購物車程序練習
今天我們來做一個購物車的程序聯系,首先要理清思路
- 購物車程序需要用到什么知識點
- 需要用到哪些循環
- 程序編寫過程中考慮值的類型,是int型還是字符串
- 如果值為字符串該怎么轉成int型
- 用戶如何選擇到商品並把其加入購物車內(根據索引值)
- 明白購物車流程:先輸入自己的rmb—列出商品的名稱和價格(用列表實現)—輸入用戶選擇的商品(根據索引值)—判斷你的rmb是否足以支付商品的價格—如果是則加入購物車—如果否則提示余額不足—你可以無限制的購買商品(前提是錢足夠)—如果不想購買可以輸入值結束循環—輸出購買的商品及余額
那么以上就是這個程序的思路,由於我也是第一次寫這個程序,所以如果思路上有什么錯誤的地方,還請大家諒解,在最后我會放上源碼供大家參考,那么現在就開始一起寫代碼叭!!
- 定義一個商品的列表
1 product_list = [ 2 ('iphone',5000), 3 ('coffee',31), 4 ('bicyle',888), 5 ('iwatch',2666), 6 ('Mac Pro',12000), 7 ('book',88) 8 ]
- 定義一個購物車列表,起初是空的,所以列表中為空
1 shopping_list = []#空列表,存放購買的商品
- 然后是輸入你的rmb
1 salary = input("請輸入你的工資:") 2 if salary.isdigit():# isdigit() 方法檢測字符串是否只由數字組成,是則返回True,否則返回False 3 salary = int(salary)
這里用到了isdigit()方法,在這里稍作解釋:
描述
Python isdigit() 方法檢測字符串是否只由數字組成。
語法
isdigit()方法語法:
str.isdigit()
參數
無
返回值
如果字符串只包含數字則返回 True 否則返回 False。
實例
以下實例展示了isdigit()方法的實例:
1 #!/usr/bin/python 2 3 str = "123456"; # Only digit in this string 4 print str.isdigit(); 5 6 str = "this is string example....wow!!!"; 7 print str.isdigit();
輸出結果為:
True
False
也就是說,如果你的字符串輸入的是數字,那么返回的是True,正如我寫的代碼,用if來判斷,如果我的rmb是數字,那么成立,可以繼續循環,這里大家應該都能理解,當然,如果不是,代碼為:
1 else: 2 print("輸入錯誤")
當然,我整體的代碼是一個大的框架,先要判斷我輸入的rmb是否為數字,如果是,那么將其轉為int類型,如果不是則輸出:“輸入錯誤”然后再將其他代碼寫入我的這個大的框架中,寫程序要有一個大的框架,在腦子里先定了型,這樣寫起來比較調理
- 接着是需要一個無限的循環
這個循環用到了 while True: 這樣我就可以無限的去購買我心儀的物品,在其中添加一些其他的代碼來豐富程序
先放一下其中的代碼:

1 while True: 2 for index,i in enumerate(product_list):#index作為下標索引 3 print(index,i) 4 #enumerate() 函數用於將一個可遍歷的數據對象(如列表、元組或字符串)組合為一個索引序列,同時列出數據和數據下標,一般用在 for 循環當中。 5 user_choice = input("請輸入你要購買的商品:") 6 if user_choice.isdigit(): 7 user_choice = int(user_choice) 8 if user_choice < len(product_list) and user_choice >= 0: 9 product_choice = product_list[user_choice] 10 if product_choice[1] < salary:#買得起 11 shopping_list.append(product_choice)#買得起,就放入購物車 12 salary -= product_choice[1] 13 print("Add %s into your shopping_list,your balance is \033[31;1m%s\033[0m"%(product_choice,salary)) 14 else: 15 print("\033[41;1m你的余額只剩%s啦,還買個叼啊!\033[0m"%salary) 16 print("---------shopping list-----------") 17 for s_index, s in enumerate(shopping_list): 18 print(s_index, s) 19 print("---------shopping list-----------") 20 print("你的余額為:\033[31;1m%s\033[0m" % salary) 21 else: 22 print("沒有這個商品") 23 elif user_choice == "q": 24 print("---------shopping list-----------") 25 for s_index,s in enumerate(shopping_list): 26 print(s_index,s) 27 print("---------shopping list-----------") 28 print("你的余額為:\033[31;1m%s\033[0m"%salary) 29 exit() 30 else: 31 print("輸入錯誤")
- 在這個無限循環中首先要將商品列表展現在我們面前
1 for index,i in enumerate(product_list):#index作為下標索引 2 print(index,i)
這里用到了enumerate方法,在這里稍作解釋:
描述
enumerate() 函數用於將一個可遍歷的數據對象(如列表、元組或字符串)組合為一個索引序列,同時列出數據和數據下標,一般用在 for 循環當中。
for 循環使用 enumerate
就是將列表中的值前方加上了數據下標,上面的代碼輸出結果為:
0 ('iphone', 5000) 1 ('coffee', 31) 2 ('bicyle', 888) 3 ('iwatch', 2666) 4 ('Mac Pro', 12000) 5 ('book', 88)
針對程序中所用到的一些對於像我一樣的初學者來說,可以參考 http://www.runoob.com/python/python-tutorial.html 這個網站里的一些知識點來進行學習
- 接着是輸入用戶要購買的產品
1 user_choice = input("請輸入你要購買的商品:") 2 if user_choice.isdigit(): 3 user_choice = int(user_choice)
這三行很好理解,與輸入rmb那塊的代碼段類似,第二第三行同樣是將判斷是否是數字,如果是,轉成int型,否則 else: print("沒有這個商品") ,這個很好理解,運用循環的時候,有 if 就有else,這是一個
固有的流程,我們寫程序時,頭腦中要有思路,有始有終
- 接下來就是要編寫我們購物的程序了
1 if user_choice < len(product_list) and user_choice >= 0: 2 product_choice = product_list[user_choice] 3 if product_choice[1] < salary:#買得起 4 shopping_list.append(product_choice)#買得起,就放入購物車 5 salary -= product_choice[1] 6 print("Add %s into your shopping_list,your balance is \033[31;1m%s\033[0m"%(product_choice,salary)) 7 else: 8 print("\033[41;1m你的余額只剩%s啦,還買個叼啊!\033[0m"%salary) 9 else: 10 print("沒有這個商品")
這段代碼比較長,但也相對簡單,我來解釋一下
1 if user_choice < len(product_list) and user_choice >= 0: 2 product_choice = product_list[user_choice]
首先是要判斷,用戶所選擇的數字,是否小於商品的編號,並且大於等於0,在前面我也將每個商品所對應的索引值打印了下來,利用這個來判斷我們是否選擇了商品;接着定義了 product_choice 這個就是我們選擇加入購物車的商品,它的值等於 product_list[user_choice] ,這段的意思是:用戶輸入要購買商品的編號,這個數字傳給 product_list[user_choice] ,就將商品選擇到了,舉個栗子,譬如用戶選擇 user_choice 為 1 ,那么我們的 product_list[user_choice] 就變成了 product_list[1] ,這也就是我們將第二個商品選擇到了,然后將這個值賦予給了 product_choice ,這就是這段代碼所表達的含義,可能表達的比較啰嗦,大神輕噴
1 else: 2 print("沒有這個商品")
那么如果這個值在范圍以外,那么就輸出 “沒有這個商品”
1 if product_choice[1] < salary:#買得起 2 shopping_list.append(product_choice)#買得起,就放入購物車 3 salary -= product_choice[1] 4 print("Add %s into your shopping_list,your balance is \033[31;1m%s\033[0m"%(product_choice,salary)) 5 else: 6 print("\033[41;1m你的余額只剩%s啦,還買個叼啊!\033[0m"%salary)
然后就要判斷我是否買得起這件商品,首先要明白一個知識,我的商品列表中的 [(),()]第一個值是物品名稱第二個值是價格,對應到計算機中就是 0 , 1 這兩個索引 ,那么就進入我們的判斷:
1 if product_choice[1] < salary:#買得起 2 shopping_list.append(product_choice)#買得起,就放入購物車 3 salary -= product_choice[1]
product_choice[1] 這個代表的是我所選商品的第二個值,即價格,如果小於我的rmb,說明買得起,那么用到了列表中的 append()方法:
描述
append() 方法用於在列表末尾添加新的對象。
語法
append()方法語法:
1 list.append(obj)
用這個方法,將我們所選商品加入到我們的購物車列表當中,此時,我們的購物車列表就有了第一個商品(之前購物車列表定義的是空列表)
1 salary -= product_choice[1]
然后,rmb需要減去我們購買的價格
1 print("Add %s into your shopping_list,your balance is \033[31;1m%s\033[0m"%(product_choice,salary))
然后輸出:我們已經將商品加入到了購物車內,你的余額為xx
1 \033[31;1m%s\033[0m
這個是控制高亮顯示的代碼,需要死記硬背,沒有捷徑,多寫代碼自然就記住了
1 else: 2 print("\033[41;1m你的余額只剩%s啦,還買個叼啊!\033[0m"%salary)
如果商品價格大於rmb那么就輸出余額不足
1 print("---------shopping list-----------") 2 for s_index, s in enumerate(shopping_list): 3 print(s_index, s) 4 print("---------shopping list-----------") 5 print("你的余額為:\033[31;1m%s\033[0m" % salary)
余額不足之后呢,我需要輸出你購物車內的商品,然后將購物車商品輸出,然后再跳回繼續選擇商品;這個很好理解,我用 for 循環將購物車商品輸出 ,以上幾段代碼是控制購買商品的代碼,相對來說比較核心,需要仔細品味
- 然后程序進入尾聲
1 elif user_choice == "q": 2 print("---------shopping list-----------") 3 for s_index,s in enumerate(shopping_list): 4 print(s_index,s) 5 print("---------shopping list-----------") 6 print("你的余額為:\033[31;1m%s\033[0m"%salary) 7 exit()
這個代碼段是建立在 用戶選擇 if user_choice.isdigit(): 這個基礎上的, 也就是 user_choice = input("請輸入你要購買的商品:") 我輸入了商品前的編號, 然后進入購買商品的循環, 如果我們覺得夠了,不想再買了,選擇 “ q ” 然后就可以打印購買商品,各回各家各找各媽了~!
- 那么到這里這個程序就算完成了,下面附上源碼,大家在看的時候務必要看清楚各各循環對應的功能,多加練習哦!

#!/usr/bin/env.python # -*- coding: utf-8 -*- """ ------------------------------------------------- File Name: shopping Description : Author : lym date: 2018/2/24 ------------------------------------------------- Change Activity: 2018/2/24: ------------------------------------------------- """ __author__ = 'lym' #定義一個商品列表,里面寫入商品的值和價格 product_list = [ ('iphone',5000), ('coffee',31), ('bicyle',888), ('iwatch',2666), ('Mac Pro',12000), ('book',88) ] shopping_list = []#空列表,存放購買的商品 salary = input("請輸入你的工資:") if salary.isdigit():# isdigit() 方法檢測字符串是否只由數字組成,是則返回True,否則返回False salary = int(salary) while True: for index,i in enumerate(product_list):#index作為下標索引 print(index,i) #enumerate() 函數用於將一個可遍歷的數據對象(如列表、元組或字符串)組合為一個索引序列,同時列出數據和數據下標,一般用在 for 循環當中。 user_choice = input("請輸入你要購買的商品:") if user_choice.isdigit(): user_choice = int(user_choice) if user_choice < len(product_list) and user_choice >= 0: product_choice = product_list[user_choice] if product_choice[1] < salary:#買得起 shopping_list.append(product_choice)#買得起,就放入購物車 salary -= product_choice[1] print("Add %s into your shopping_list,your balance is \033[31;1m%s\033[0m"%(product_choice,salary)) else: print("\033[41;1m你的余額只剩%s啦,還買個叼啊!\033[0m"%salary) print("---------shopping list-----------") for s_index, s in enumerate(shopping_list): print(s_index, s) print("---------shopping list-----------") print("你的余額為:\033[31;1m%s\033[0m" % salary) else: print("沒有這個商品") elif user_choice == "q": print("---------shopping list-----------") for s_index,s in enumerate(shopping_list): print(s_index,s) print("---------shopping list-----------") print("你的余額為:\033[31;1m%s\033[0m"%salary) exit() else: print("輸入錯誤") else: print("輸入錯誤")
歡迎大家多多交流
- QQ:616581760
- weibo:https://weibo.com/3010316791/profile?rightmod=1&wvr=6&mod=personinfo
- zcool:http://www.zcool.com.cn/u/16265217
- huke:https://huke88.com/teacher/17655.html