我記得很清楚,這個內容我發過,可是不知道為什麼沒有了。
記錄#
- 今天學習回溯,try except。
- try 和 except 是一對,需要成對出現。
- 基本邏輯:try 代碼 錯誤時 excpet 代碼
- 使用
except Exception as err:
print (err) 打印報錯信息。 - 在第一行設置 debug 模式 , debugMode = False
- if debugMode: print(traceback)
- 這樣可以很方便的控制是否顯示系統報錯信息。
- 今天的練習是編寫一個比薩店的訂單列表,有以下幾個知識點:
- 訂單信息用 name 做字典 key,其他信息做字典 value。按照這種格式,str () 後寫到本地文件。
- 因為寫入的是字典的原因,需要先 read,賦值給字典。再寫入新的數據,然後保存。
- 讀取時要用 eval ()。
- view 時用 for 循環,先 key,value in item (),這是對字典的操作。value 是數組了,直接 for name , print name 就好。
- 正確答案沒有用字典,而是用的二維數組,相對簡單一些,直接數組.append 就可以了。
CODE#
import os, time
debugMode = False
print("🌟Dave's Dodgy Pizzas🌟")
again="y"
def addpiz():
uname = input("請輸入名字 > ")
try:
piznum = int(input("有多少個比薩? > "))
except:
piznum = int(input("您必須輸入數字字符,請重試。 > "))
pizsize = input("什麼尺寸? s/m/l > ").lower()
if pizsize == "s":
pizcost = 1.99
elif pizsize == "m":
pizcost = 9.99
elif pizsize == "l":
pizcost = 19.99
toping = input("請輸入配料 > ")
total = pizcost*piznum
print(f"謝謝 {uname},您的比薩將花費 {total}")
try:
f = open("piz.list","r")
pizlist = eval(f.read())
f.close()
except:
pizlist={}
pizlist[uname]=[toping,pizsize,piznum,total]
f = open("piz.list","w")
f.write(str(pizlist))
f.close
def viewpiz():
try:
f = open("piz.list","r")
pizlist = eval(f.read())
f.close()
except:
print("比薩列表為空。")
time.sleep(2)
print(f"{'名字': ^10}{'配料': ^10}{'尺寸': ^10}{'數量': ^10}{'總計': ^10}")
for key,value in pizlist.items():
print(f"{key: ^10}",end="")
for name in value:
print(f"{name: ^10}",end="")
print()
try:
f = open("piz.list","r")
pizlist = eval(f.read())
f.close()
except:
print("比薩列表為空。")
time.sleep(2)
os.system("clear")
while True:
if again == "y":
menu = int(input("1. 添加\n2. 查看\n"))
if menu == 1:
addpiz()
elif menu == 2:
viewpiz()
again = input("再次? y/n")