当前位置: 首页 > 编程日记 > 正文

python学习day3

1丶 用户先进行登陆如果用户名在文件中且用户密码也正确就登陆成功调用购物车函数,如果用户用户名输入正确密码错误,提示用户密码错误且重新输入,如果用户
输入用户名不存在,提示用户是否创建该用户,调用注册函数。

1.1、用户登录完成后,要求其输入初始金额,如果用户名或密码输入错误超过三次则退出程序。

2、 显示当前的主菜单列表 ["商品列表", "购物车", "充值"] 定义print_main_menu函数呈现主菜单

2.1、 商品列表: 定义一个商品字典 [{'name':'电脑','price':5000},{},{},...] 定义print_commodity_list函数呈现商品列表

2.2、 购物车: 用户购买的商品,形成一个列表呈现,以及金额的total, [{'name':'电脑','price':5000},{},{},] 定义print_shopping_car函数呈现购物车

2.3、 结算: 结算功能在购物车里,向用户提供结算功能,用户选择后 用户的初始金额 - 购物车中的总金额, 包括判断 "余额不足"

2.4、 充值: 当用户选择充值时,要求用户输入一个非负值,与用户的余额进行相加操作


# _*_ coding:utf-8 _*_

"""
解题思路

创建用户登录函数,用户登错3次程序退出
创建新用户注册函数(如果用户用户名没在用户文件中提示是否新建用户)
创建购物车函数

"""
import time


def login():
flag = False
count = 0

while True:
user_name = input("请输入用户名:")
password = input("请输入密码:")
# user_name = "dingyang"
# password = "12"

with open("login", encoding="utf-8", mode="r") as f:

for countent in f:
line = countent.strip().split()
#print(line)
if count == 2:
print("您已经输错三次,已经不能再输入了。")
exit()
if user_name == line[0] and password == line[1]:
flag = True
break

if flag :
print("欢迎%s登陆成功" % user_name)
shopping_car()
break
else:
with open("login", encoding="utf-8", mode="r") as f1:
for counten in f1:
line1 = counten.strip().split()
# print(line1)
if user_name != line1[0]:
#print(line1[0])
# while True:
print("您输入的用户名不存在,需要注册%s吗?" % user_name)
user_input = input("按y进行注册,按q重新输入:")
if user_input == "y":
print(user_name)
user_register(user_name)


elif user_input == "q":
break
else:
print("您输入有误,请输入y或q")
else:
print("%s用户密码错误,请重新输入!" % user_name)
break

count = count + 1


def user_register(username):
while True:
register_passwd = input("请输入新用户密码:")
new_register_passwd = input("请再次输入密码: ")
if register_passwd == new_register_passwd:
with open("login",encoding="utf-8",mode="a") as f2:
f2.write("\n%s " % username)
f2.write(new_register_passwd)
f2.close()
print("用户%s注册成功" % username)
login()
break
else:
print("您输入的密码不一致,请重新输入:")

def shopping_car():
print("欢迎使用淘淘宝".center(50, "-"))
user_rmb()


userRMB = 0
def user_rmb():
while True:
try:
userRMB = int(input("请输入金额数(10-10000):"))
except ValueError as e:
print("输入非法,请重新输入")
continue

if userRMB < 10 or userRMB > 10000:
print("输入非法,请重新输入")
else:
break


main_Menu = ["商品列表", "查看购物车", "充值"]
def print_main_menu():
'''主菜单呈现'''
global main_Menu
for index,item in enumerate(main_Menu):
menu_index = index + 1
print("%d. %s" % (menu_index,item))


commodity_List = [
{"name":"ThinkPad","price":3500},
{"name":"Iphone","price":4500},
{"name":"Three Squirrels","price":30},
{"name":"Ipod","price":500}
]
def print_commodity_list():
'''商品列表呈现'''
global commodity_List

print("商品列表".center(50, "-"))

for index, item in enumerate(commodity_List):
commodity_index = index + 1
print(str(commodity_index).center(10, " "), str(item["name"].ljust(31, " ")), str(item["price"]))

def print_shopping_cart():
'''购物车列表呈现'''

global shopping_cart

print("购物车列表".center(50, "-"))

for index, item in enumerate(shopping_cart):
shopping_cart_index = index + 1
print(str(shopping_cart_index).center(10, " "), str(item["name"].ljust(31, " ")), str(item["price"]))

shopping_cart = []
#C =


login()

while True:
print_main_menu()
try:
menu_choice = int(input("请输入要选择的操作:"))
except ValueError as e:
print("输入非法,请重新输入")
continue
if menu_choice < 1 or menu_choice > len(main_Menu):
print("输入非法,请重新输入")

if main_Menu[menu_choice - 1] == "商品列表":

while True:
print_commodity_list()
try:
commodity_choice = int(input("请选择要购买的商品:"))
except ValueError as e:
print("输入非法,请重新输入")
continue

if commodity_choice < 1 or commodity_choice > len(commodity_List):
print("输入非法,请重新输入")
continue

shopping_cart.append(commodity_List[commodity_choice - 1])
print("添加购物车成功!")

user_operation = input("继续:y\n退出:e\n返回上一级:q ")

if user_operation == 'y':
continue
elif user_operation == 'e':
exit(0);
elif user_operation == 'q':
break
else:
print("输入非法,请重新输入")

elif main_Menu[menu_choice - 1] == "查看购物车":
while True:
total_consume = 0
print_shopping_cart()

for i in shopping_cart:
total_consume += i['price']

print("所有商品总金额为:", total_consume)

user_operation = input("立即结算:c\n退出:e\n返回上一级:q ")

if user_operation == 'c':
if userRMB > total_consume:
userRMB -= total_consume
print("结算成功:本次消费 %d,您的账户余额为 %d" % (total_consume, userRMB))
shopping_cart = []


else:
print("您的账户余额不足,请返回上一级充值后,再进行支付.")
elif user_operation == 'e':
exit(0);
elif user_operation == 'q':
break
else:
print("输入非法,请重新输入")

elif main_Menu[menu_choice - 1] == "充值":
while True:
try:
recharge_amount = int(input("请输入要充值的金额数,每次充值不得小于100"))
except ValueError as e:
print("输入非法,请重新输入")
if recharge_amount < 100:
print("输入金额过少,充值金额不得小于100")
continue
userRMB += recharge_amount

print("恭喜你充值成功,本次充值金额为 %d, 余额为 %d, 3秒后返回主菜单" % (recharge_amount, userRMB))
time.sleep(3)
break















转载于:https://www.cnblogs.com/dingyang-python/p/9087349.html

相关文章:

Visual Studio 2010构建Web浏“.NET研究”览器应用程序

2001年&#xff0c;我使用C#中的WebBrowser ActiveX控件编写了我的第一个应用程序&#xff0c;点此阅读&#xff0c;Kapil Sony写了一篇文章介绍了C# 2.0中上海企业网站制作的WebBrowser控件&#xff0c;每一次.NET新版本发布&#xff0c;控件和功能都会发生一些变化&#xff0…

如何通过结构化智能体完成物理构造任务?| 技术头条

作者 | Victor Bapst, Alvaro Sanchez-Gonzalez,Carl Doersch, Kimberly L. Stachenfel译者 | Linstancy编辑 | 一一出品 | AI 科技大本营&#xff08;ID:rgznai100&#xff09;摘要物理构造 (physical construction) 是根据物理动力学原理构造带有一些功能的物体的能力&#x…

【GStreamer】gstreamer工具详解之:gst-launch-1.0

一、gst-launch-1.0 1、简介: gst-launch-1.0构建和运行基本GStreamer管道的工具 官网:https://gstreamer.freedesktop.org/documentation/tools/gst-inspect.html?gi-language=c 命令格式: gst-launch-1.0 [OPTIONS] PIPELINE-DESCRIPTION2、OPTIONS参数选项: –help…

WPF查找子控件和父控件方法

原文:WPF查找子控件和父控件方法public List<T> GetChildObjects<T>(DependencyObject obj, string name) where T : FrameworkElement{DependencyObject child null;List<T> childList new List<T>();for (int i 0; i < VisualTreeHelper.GetCh…

ARP(Accounting Resource Planning)项目感想

ARP是Accounting Resource Planning&#xff08;会计资源计划&#xff09;的简称。转载于:https://blog.51cto.com/lya041/690079

【GStreamer】gstreamer工具详解之:gst-inspect-1.0

二、gst-inspect-1.0 1、简介 gst-inspect-1.0 打印插件列表、指定插件或指定元素的信息 2、命令格式: gst-inspect-1.0 [OPTION...] [PLUGIN|ELEMENT]3、OPTION参数选项: --help --gst-info-mask=FLAGS 设置GStreamer信息标志?? -a, --print-all 打印所有插件和元…

心酸科研路:3年前CVPR论文,仅被引用11次,如今成就黑洞照片!

众所周知&#xff0c;黑洞照片已经朋友圈刷屏了&#xff0c;可你也许不知道这张照片背后的一个故事。 译者 | Linstancy、Major 编辑 | 琥珀 出品 | AI科技大本营&#xff08;公众号ID&#xff1a;rgznai100&#xff09; 近日&#xff0c;由天文学家公布的人类首张黑洞照片引…

Redis和Memcache的区别是什么

Redis和Memcache都是内存数据库&#xff0c;但它们之间还是有区别的&#xff0c;跟着ytkah看看Redis和Memcache的区别吧 Redis 支持多种数据结构&#xff0c;如string,list,dict,set,zset,hyperloglog 单线程请求&#xff0c;所有命令串行执行&#xff0c;并发情况下不需要考虑…

windows加载符号小计

1、如果当前并没有设置符号路径和符号服务器&#xff0c;且当前正在调试&#xff0c; 则需要设置符号服务器和路径后&#xff0c;重新调试生效 2、如果当前有些pdb没有加载&#xff0c;因为这些pdb放在其他路径了&#xff0c;未加载&#xff0c;当把pdb拷到程序启动目录时&…

谈谈Python那些不为人知的冷知识(一)

本文转载自公众号Python编程时光&#xff08;ID:Python-Time&#xff09;小明在日常Code中遇到一些好玩&#xff0c;冷门的事情&#xff0c;通常都会记录下来。现在已经积攒了一些了&#xff0c;最近打算整理一波&#xff0c;发出来给大家补补。一篇只分享五个&#xff0c;有时…

【GStreamer】gstreamer工具详解之:ges-launch-1.0

三、ges-launch-1.0 1、简介 ges-launch-1.0:视频裁剪编辑,GStreamer编辑服务原型工具 详见官网:https://gstreamer.freedesktop.org/documentation/tools/ges-launch.html?gi-language=c#mandatory-arguments1 ges-launch-1.0 创建多媒体时间线并将其回放,或将其呈现为…

三大软件公司争霸赛区块链

导语&#xff1a;\\区块链技术发展到今天&#xff0c;区块链的扩容、吞吐量、运维弹性&#xff08;Operational Resilience&#xff09;、安全性、企业支持和Token管理等挑战&#xff0c;已成为区块链进一步发展绕不开的技术问题。\\突破这些现实技术挑战&#xff0c;不仅构能建…

【系列索引】结合项目实例 回顾传统设计模式 打造属于自己的模式类系列

网上设计模式的文章很多 虫子就不再和大家扯一些没有营养的理论 开此系列博文 一方面因为自己颓废了大半年 趁此机会回顾一下 另一方面希望能够帮助新人走出设计模式的误区, 如何做好设计模式 1.在发掘新的模式之前&#xff0c;必须熟悉理解现有的模式。许多模式看起来像是全新…

【GStreamer】gstreamer工具详解之:gst-discoverer-1.0

四、gst-discoverer-1.0 1、简介 gst-discoverer-1.0用于显示文件元数据和流信息,它可以运行在单独的文件或整个目录(递归到子目录中)。 2、命令格式: gst-discoverer-1.0 FILE|DIRECTORY|URI [FILE2|DIRECTORY2|URI2]选项详解 帮助选项 -h, --help Show help options…

一道简约而不简单的算法题——数据流的中位数 | 附动画解析

作者 | 程序员小吴转载自微信公众号&#xff08;ID:CXYxiaowu&#xff09;题目来源于 LeetCode 上第 295 号问题&#xff1a;数据流的中位数。难度级别为 Hard&#xff0c;目前通过率为 33.5% 。题目描述中位数是有序列表中间的数。如果列表长度是偶数&#xff0c;中位数则是中…

HBase安装与命令行操作

2019独角兽企业重金招聘Python工程师标准>>> HBase简介 基于Hadoop的NoSql数据库&#xff0c;适合存储半结构化、非结构化的稀疏数据&#xff0c;提供增删改查能力。因为其底层是hdfs&#xff0c;所以具有存储海量数据&#xff0c;高容错&#xff0c;高可用等特点&a…

zip/unzip 命令

zip 命令 功能说明&#xff1a;压缩文件。语 法&#xff1a;zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目录>][-ll][-n <字尾字符串>][-t <日期时间>][-<压缩效率>][压缩文件][文件...][-i <范本样式>][-x <范本样式>]补充说明&#xf…

《App架构师实践指南》:移动开发的进阶指南

文章主要内容&#xff1a;什么是 app 架构师这本书主要内容读完感受什么是 App 架构师成为“架构师”是许多程序员的梦想&#xff0c;当然也包括我&#xff0c;在工作的几年里&#xff0c;我见过很多架构师&#xff0c;他们在设计某个大型系统时具备很大的话语权&#xff0c;可…

FoveaBox:目标检测新纪元,无Anchor时代来临 | 技术头条

作者 | CV君转载自我爱计算机视觉&#xff08;ID:aicvml&#xff09;目标检测的任务是“分类”并从图像中“定位”出物体&#xff0c;但长久以来&#xff0c;该领域的工作大多是这样&#xff1a;生成可能包含目标的区域&#xff0c;然后在该区域提取特征并分类。显然&#xff0…

【Ubuntu】安装中文输入法、终端不支持中文的解决方法

一、中文输入法安装 1、安装汉语语言包 sudo apt install fcitx sudo apt install language-pack-zh-hans2、安装google拼音输入法 sudo apt install fcitx-googlepinyin安装完毕后&#xff0c;重启或者退出登陆 3、安装sun-pinyin输入法 sudo apt install fcitx-sunpinyi…

CCNA 第一章 网际互联

第一章 网际互联 路由器知识点&#xff1a; 1、默认时&#xff0c;路由器不转发任何广播包和组播包。 2、路由器使用逻辑地址&#xff0c;逻辑地址在网络层的包头中&#xff0c;用来决定将包转发到的下一跳路由器。 3、路由器可以使用管理员创建的访问表来控制被允许进入或流出…

【Cmake】执行cmake命令时报错:No XSLT processor found

一、问题描述 在ubuntu中&#xff0c;在生成Doc(文档)中&#xff0c;执行cmake命令时报错&#xff1a;No XSLT processor found 二、原因查找 google该错误信息&#xff0c;原因是确实ubuntu中没有安装 xsltproc 三、解决方法 安装 xsltproc sudo apt install xsltproc四…

一张“黑洞”需要拍两年?有了它或许就不会让大家等那么久了

只闻其名&#xff0c;不见其形&#xff0c;从小听到大的”黑洞“&#xff0c;终于让我们在有生之年见到了它的真容&#xff0c;只能说幽暗的宇宙美丽也调皮&#xff0c;长久以来人类关于黑洞的探索&#xff0c;在这一刻终于得到影像印证。相信很多人心中都有一个疑惑&#xff0…

如何在一场面试中展现你对Python的coding能力?| 技术头条

点击上方↑↑↑蓝字关注我们~作者 | wLsq 来源 | Python数据科学&#xff08;ID:PyDataScience&#xff09;如果你已经通过了招聘人员的电话面试&#xff0c;那么下面正是该展现你代码能力的时候了。无论是练习&#xff0c;作业&#xff0c;还是现场白板面试&#xff0c;这都是…

Django web : CSRF verification failed. Request aborted.

错误标题&#xff1a;CSRF verification failed. Request aborted. 错误描述&#xff1a; HelpReason given for failure:CSRF cookie not set.In general, this can occur when there is a genuine Cross Site Request Forgery, or when Djangos CSRF mechanism has not been …

分享一个PC端六格密码输入框写法

如图。我们一般做商城类的项目不免会用到支付密码输入框&#xff0c;我研究了下并决定发上来&#xff0c;也当作是自己成长路上的一点小小的记录。本次介绍的是基于vue的项目 html&#xff1a; <template><div classam_payPwd :id"ids_${id}"><input …

【数据库】sqlite中PRAGMA命令说明

关于sqlite中PRAGMA的说明网上已经有很多了&#xff0c;这里不再复制粘贴&#xff0c;只把内容最全的网址连接记录一下&#xff1a; 官网说明&#xff08;英文&#xff09;&#xff1a;https://sqlite.org/pragma.html 中文翻译&#xff0c;参见博客&#xff1a;https://www.i…

思科交换机各类型中字母的意思?

24TC-L中各字母的意思分别指? 24TT-L中第二个T的意思? 2960和2960G的区别&#xff1f;基中G是什麽意思? F0/1和G0/1区别&#xff1f; 24代表是24个网络接口 第一个T表示TX&#xff0c;也就是所谓RJ-45的类型&#xff08;指这个24个接口都是RJ-45&#xff0c;若是P的话&#…

医生还未失业,IBM Watson已跌入深渊 | 极客头条

点击上方↑↑↑蓝字关注我们~作者 | Eliza Strickland译者 | Major编辑 | 琥珀出品 | AI 科技大本营&#xff08;公众号ID&#xff1a;rgznai100&#xff09;导语&#xff1a;2011 年&#xff0c;Jeopardy! 挑战赛的成功&#xff0c;让外界看到 IBM 的人工智能给医学带来的革命…

【Qt】Qt容器总结

目录 一、容器类1、顺序容器2、关联容器二、Qt容器特点三、迭代器1、Jave样式的迭代器(效率略低)2、SLT样式的迭代器注意: 由于Qt的容器是写时复制的,因此非const访问器从本质上讲更加昂贵, 因为它们必须首先检查是否需要复制基础数据(并在必要时进行复制)。 因此,在Qt…