python3購物車
python3實現(xiàn)購物車小程序,優(yōu)化后將程序分成函數(shù),用文件注冊和驗證用戶名密碼。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/4/20 下午4:12
# @Author : hk
# @Site :
# @File : 購物車.py
# @Software: PyCharm
"""
需求描述:
1.輸入正確賬號,密碼,進(jìn)入購物車購物
2.登錄失敗,重新輸入賬號密碼
3.同一賬號連續(xù)登錄失敗超過三次,則鎖定該賬號
4.登錄已鎖定賬號,提示賬號已鎖定
"""
#顯示已購商品列表函數(shù)
def shoping_list(myshping,money):
print('=============您的購物清單如下=================')
dic1={}
for i in myshping:
if dic1.get(i) == None:
dic1[i] =1
else:
dic1[i] +=1
for k,v in dic1.items():
print(k,v)
print("===========================================\n您的余額:%d"%money)
#購物車函數(shù)
def shoping():
goods = [{'name': '電腦', 'price': 1999},
{'name': '鼠標(biāo)', 'price': 10},
{'name': '游艇', 'price': 20},
{'name': '美女', 'price': 998},
{'name': 'iphone', 'price': 5000},
]
flag = False
my_shopping = []
while True:
money = input("請輸入您的金額:\n")
if not money.isdigit():
keys = input("輸入錯誤,請按任意鍵重新輸入,或輸入q退出購買\n")
if keys.upper() == 'Q':
break
continue
money = int(money)
while True:
print('+++++++++++商品列表+++++++++++++')
for index, key in enumerate(goods):
print(index + 1, key['name'], key['price']) # 這里key取到的值是每一行的字典,再按key字典的鍵值打印出來商品明細(xì)
print('我的錢包余額', money)
num = input("請輸入想要購買的商品序號:【或輸入q結(jié)束購買】\n")
if num.upper() == 'Q':
flag = True
break
if not num.isdigit():
print("輸入錯誤,請重新輸入!")
continue
num = int(num)
if num > 0 and num < len(goods) + 1:
# print(num,"開始購物\n----------")
if money >= goods[num - 1]['price']:
my_shopping.append(goods[num - 1]['name'])
money = money - goods[num - 1]['price']
shoping_list(my_shopping,money)
# print(my_shopping, "我的余額", money)
else:
# print("余額不足")
while True:
chongzhi = input("余額不足,請輸入充值金額:【或輸入q結(jié)束購買。]\n")
if chongzhi.upper() == "Q":
flag = True
break
if not chongzhi.isdigit():
# keys_1=input("輸入錯誤,請重新輸入充值金額:或輸入q結(jié)束購買。。。充值部分的錯誤]")
# if keys_1.upper() == "Q":
# flag = True
# break
print("輸入錯誤,請重新輸入")
continue
money = money + int(chongzhi)
break
# break
if flag == True:
break
else:
print("請輸入正確商品編號")
continue
if flag == True:
# 打印出購物清單并統(tǒng)計,顯示余額。
print("謝謝光臨!")
shoping_list(my_shopping,money)
exit(0)
continue
#注冊函數(shù)
def regist():
"""
注冊用戶
name: 用戶名稱
password:用戶密碼
:return:
"""
# 讀取用戶文件
with open("user.txt", encoding='utf-8',mode="r") as read_file:
read_data = read_file.readlines()
i_name = []
for i in read_data:
i_line = i.strip().split(',')
i_name.append(i_line[0])
while True:
username = input('請輸入用戶名:\n').strip()
if username in i_name:
print('用戶名已經(jīng)存在,請重新輸入。')
continue
else:
password = input('請輸入密碼:\n').strip()
with open('user.txt',encoding='utf-8',mode='a') as read_f1:
new_user = [username,password,'0']
new_user ='\n' + ','.join(new_user)
# print(new_user,type(new_user))
read_f1.write(new_user)
print('%s,恭喜您注冊成功,請登錄'%username)
break
#修改用戶登錄次數(shù)函數(shù)
def modify_user(name, mode="add"):
"""
修改用戶名單中的登錄錯誤次數(shù)
:param name: 用戶名稱
:param mode:add,登錄錯誤次數(shù)自增1;del,登錄錯誤次數(shù)重置為0
:return:
"""
# 讀取用戶文件
with open("user.txt", encoding='utf-8',mode="r") as read_file:
read_data = read_file.readlines()
# 寫入用戶文件
with open("user.txt", encoding='utf-8',mode="w") as write_file:
for line in read_data:
new_line = line.split(',')
if new_line[0] == name:
if mode == "add":
new_line[2] = int(new_line[2]) + 1
new_line[2] = str(new_line[2])
print(">>>>>>>",new_line)
else:
new_line[2] = "0"
new_line = ",".join(new_line) + "\n"
write_file.write(new_line)
# print('寫入',new_line)
write_file.flush()
else:
write_file.write(line)
#驗證用戶名密碼函數(shù)
def auth(name, passwd):
with open("user.txt", encoding='utf-8',mode="r") as read_file:
for eachLine in read_file:
user_name, password, errors = eachLine.strip().split(',')
if name == user_name:
if int(errors) < 3:
if password == passwd:
print ("Dear [%s],歡迎你登錄本購物車" % name)
modify_user(name, "del")
shoping()
# return True
else:
print ("密碼錯誤,請重新輸入用戶名密碼!")
modify_user(name, "add")
return False
else:
print ("您的用戶已經(jīng)鎖定,請聯(lián)系管理員!")
return False
else:
print ("用戶名不存在,請重新輸入!")
return False
def login():
while True:
name = input("請輸入用戶名:")
passwd = input("請輸入密碼:")
if auth(name, passwd):
break
def menu() :
while True:
mode = input('請您注冊或登錄:\n'
'注冊選1\n'
'登錄選2\n'
'或按輸入q退出\n').strip()
if mode == '1':
regist()
elif mode == '2':
login()
elif mode.upper() == 'Q':
exit(0)
else:
print("輸入錯誤,請重新輸入,或按q退出。")
continue
if __name__ == '__main__':
menu()
user.txt文件內(nèi)容
hk,123,2
abc,222,2
haha,1,1
test,1234,0

浙公網(wǎng)安備 33010602011771號