Week3 Exceptions
Fuel Gauge
题目描述:
输入分数字符串,判断并输出相应的百分数;特例不足1%输出E,超出99%输出F
【资料图】
思路:
1,从字符串中取出x,y;
2,按题中要求计算输出;
题解:
while True: try: ## 取出x,y x, z, y= input("Fraction: ") x, y = int(x), int (y) ##防止出错 if y == 0: raise ZeroDivisionError if x > y: raise ValueError break except(ValueError, ZeroDivisionError): pass## 模拟题if 0 < x/y < 0.99: print(f"{round(x/y*100)}%")elif x/y >= 0.99: print("F")else: print("E")
Felipe’s Taqueria
题目描述:
根据用户输入的信息,匹配菜单价格,最终算出最终价格。
题解:
## 菜单信息menu = { "Baja Taco": 4.00, "Burrito": 7.50, "Bowl": 8.50, "Nachos": 11.00, "Quesadilla": 8.50, "Super Burrito": 8.50, "Super Quesadilla": 9.50, "Taco": 3.00, "Tortilla Salad": 8.00,}##total:结果total = 0## 计算输出while True: try: ## title(): 首字母大写其余小写 item = input("Item: ").title() if item in menu: total += menu[item] print(f"Total: ${total:.2f}") except EOFError: print() break
Grocery List
题目描述:
记录用户输入商品,最终输出已输入的商品以及商品数量;
题解:
## 存储商品信息list = {}while True: ## 输入处理 try: ## upper():字符串大写 item = input("").upper() except EOFError: print() break ## 记录商品 if item in list: list[item] += 1 else: list[item] = 1## 输出结果for item, cnt in sorted(list.items()): print(f"{cnt} {item}")
Outdated
题目描述:
用户输入9/8/1636,September 8, 1636形式,系统转换输出1636-09-08;若用户输出其他形式抛异常。
题解:
## 月份记录months = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]##思路:分情况讨论while True: date = input("Date: ") month,day,year = "", "", "" try: ## 9/8/1636 if len(date.split("/")) == 3: date = date.split("/") month, day, year = map(int, date) ## September 8, 1636 else: date = date.split(",") if len(date) == 2: month, day = date[0].split() month = months.index(month)+1 day, year = int(day), int(date[1]) ##输出 if 1<=int(month)<=12 and 1<=int(day)<=31: print(f"{year:04}-{month:02}-{day:02}") break except ValueError: pass
Week4 Libraries
Emojize
题目描述:
练习python调用库操作;
题解:
from emoji import emojizeprint("Output:", emojize(input("Input: ")))
Frank, Ian and Glen’s Letters
题目描述:
The documentation for pyfiglet isn’t very clear, but you can use the module as follows:
from pyfiglet import Figletfiglet = Figlet()
You can then get a list
of available fonts with code like this:
figlet.getFonts()
You can set the font with code like this, wherein f
is the font’s name as a str
:
figlet.setFont(font=f)
And you can output text in that font with code like this, wherein s
is that text as a str
:
print(figlet.renderText(s))
题解:
from pyfiglet import Figletimport randomimport sysfonts = Figlet().getFonts()# Zero if the user would like to output text in a random font.# Two if the user would like to output text in a specific font, in which case the first of the two should be -f or --font, and the second of the two should be the name of the font.if len(sys.argv) == 1: font = random.choice(fonts)elif len(sys.argv) == 3: if sys.argv[1] in ["-f", "--font"] and sys.argv[2] in fonts: font = sys.argv[2] else: sys.exit("Invalid arguments.")else: sys.exit("Invalid number of arguments.")## 输出text = input("Input: ")print("Output:\n", Figlet(font=font).renderText(text))
Adieu, Adieu
题目描述:
用户输入名字,将所有名字按照inflect中的操作输出;
题解:
import inflectp = inflect.engine()names = []while True: try: names.append(input("Name: ").strip()) except EOFError: print() breakprint(f"Adieu, adieu, to {p.join(names)}")
Guessing Game
题目描述:
用户选择猜数等级,然后进行竞猜。竞猜过程中会提示用户信息,直到猜中为止;
题解:
from random import randint## 选择猜数等级while True: try: n = int(input("Level: ")) if n < 0: raise ValueError break except ValueError: pass## 生成竞猜的数rand = randint(1, n)## 用户判断while True: try: guess = int(input("Guess: ")) if guess < rand: print("Too small!") elif guess > rand: print("Too large!") else: print("Just right!") break except ValueError: pass
Little Professor
题目描述:
用户选择等级进行随机式子生成,最后根据算式正确结果算取所得分数;
题解:
import randomdef main(): level = get_level() score = 0 for _ in range(10): x = generate_integer(level) y = generate_integer(level) ## 计算score tries = 0 while tries < 3: try: tries += 1 answer = int(input(f"{x} + {y} = ")) if answer == x+y: score += 1 break else: print("EEE") except ValueError: pass print(f"{x} + {y} = {x+y}") print("Score", score)## 获取等级def get_level(): while True: try: level = int(input("Level: ")) if level in [1, 2, 3]: return level except ValueError: pass ## 在范围内生成数字def generate_integer(level): if level == 1: return random.randint(0, 9) return random.randint(10 ** (level - 1), 10**level - 1)if __name__ == "__main__": main()
Bitcoin Price Index
题目描述:
Expects the user to specify as a command-line argument the number of Bitcoins n, that they would like to buy. If that argument cannot be converted to a float
, the program should exit via sys.exit
with an error message.
Queries the API for the CoinDesk Bitcoin Price Index at https://api.coindesk.com/v1/bpi/currentprice.json, which returns a JSON object, among whose nested keys is the current price of Bitcoin as a float
. Be sure to catch any exceptions, as with code like:
import requeststry: ...except requests.RequestException: ...
Outputs the current cost of Bitcoins in USD to four decimal places, using ,
as a thousands separator.
题解:
import sysimport requeststry: response = requests.get("https://api.coindesk.com/v1/bpi/currentprice.json") data = response.json() current_price = data["bpi"]["USD"]["rate_float"]except requests.RequestException: sys.exit()try: n = float(sys.argv[1])except IndexError: sys.exit("Missing command-line argument")except ValueError: sys.exit("Command-line argument is not a number")print(f"${n * current_price:,.4f}")