python基础练习题

时间:2023-02-23 00:03:38

购物车程序

#!/usr/bin/env python
#
-*- coding: utf-8 -*-
#
@Time : 2018/3/6 21:01
#
@Author : hyang
#
@Site :
#
@File : shop_cart.py
#
@Software: PyCharm

"""
购物车程序
数据结构:
goods = [
{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998},
......
]

功能要求:
基础要求:

1、启动程序后,输入用户名密码后,让用户输入工资,然后打印商品列表

2、允许用户根据商品编号购买商品

3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒

4、可随时退出,退出时,打印已购买商品和余额

5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示


扩展需求:

1、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买

2、允许查询之前的消费记录
"""
import os

# 商品列表
goods = [
{
"name": "电脑", "price": 1999},
{
"name": "鼠标", "price": 10},
{
"name": "游艇", "price": 20},
{
"name": "IPAD", "price": 1998},
{
"name": "手机", "price": 998},
{
"name": "玩具", "price": 50},
{
"name": "教科书", "price": 100}
]

last_shop
= [] # 上次购买数据
last_bal = [] # 得到每次购买余额

def is_shop(user):
"""
判断该用户是否已消费数据
:param user:
:return:
"""
flg
= False
if os.path.exists(r"user_shop.txt"):
# 查询用户有购买记录
with open(r"user_shop.txt", "r", encoding='utf-8') as f:
for line in f:
if line.find(user) != -1:
flg
= True
break
else: # 创建空文件
with open(r"user_shop.txt", "w", encoding='utf-8') as f:
f.write(
"")
return flg


def login():
"""
用户登录
:return:
"""
err_cnt
= 0
suc_user
= '' # 返回成功登录用户
# 判断锁标志
while err_cnt < 3:
user
= input('输入用户名: ')
pwd
= input('输入密码: ')
if user == 'alex' and pwd == '123':
print('登录成功')
suc_user
= user
break
else:
print('登录失败')
err_cnt
+= 1
else:
print('您登录失败已超过3次')
return suc_user


def check_salary():
"""
检查收入
:return:
"""
while True:
salary
= input('输入工资: ')
if salary.isdigit():
break
else:
print('工资输入错误,请重新输入!')
return int(salary)


def shop(user, salary):
"""
用户购物
"""
shop_cart
= [] # 购物车
while True:
print('-------商品列表--------')
for index, value in enumerate(goods):
print('商品编号:%s 商品名称:%s 商品价格:%s' % (index, value['name'], value['price']))

choice
= input('输入商品编号:---输入q退出购买 ')
if choice.isdigit():
choice
= int(choice)
if 0 <= choice < len(goods):
price
= goods[choice]['price']
if (salary - price) > 0:
salary
= salary - price
shop_cart.append(goods[choice])
print('\033[1;32;40m购买商品编号:%s 购买商品名称:%s 购买商品价格:%s\033[0m'
% (choice, goods[choice]['name'], goods[choice]['price']))
print('\033[1;32;40m工资余额=%s\033[0m' % salary)
else:
print('余额不足')
continue
else:
print('商品编号不存在!')

elif choice == 'q':
print('\033[1;31;40m-------本次购物退出--------\033[0m')
if len(shop_cart) > 0:
print('-------本次购买商品列表--------')
with open(r
"user_shop.txt", "a+", encoding='utf-8') as f:
f.write(
"user:%s\n" % user)
for value in shop_cart:
shop_info
= '购买商品名称:%s|购买商品价格:%s' % (value['name'], value['price'])
print('\033[1;32;40m%s\033[0m' % shop_info)
f.write(shop_info
+ "\n")
bal_info
= '工资余额:%s' % salary
print('\033[1;32;40m%s\033[0m'% bal_info)
f.write(bal_info
+ "\n")
break

def get_shop(user):
"""
读取文件得到用户已消费数据
:param user:
:return:
"""
flg
= False
resume_goods
= [] # 消费商品
with open(r"user_shop.txt", "r", encoding='utf-8') as f:
for line in f:
if line.find("购买") != -1:
shop_li
= line.split("|")
resume_goods.append([shop_li[0].split(
":")[1].strip(), shop_li[1].split(":")[1].strip()])
elif line.find("余额") != -1:
last_bal.append(line.split(
":")[1].strip())
print("\033[1;32;40m历史购物:%s\033[0m" % resume_goods) # 带绿色输出
print('\033[1;32;40m还剩下余额:%s\033[0m' % last_bal[-1]) # 带绿色输出


if __name__ == '__main__':
user
= login()
if user != '':
print('{}登录成功'.format(user))
while True:
action
= input('输入c查询消费记录,输入b购买商品,输入q退出:')
if action == 'q':
print('\033[1;31;40m---退出程序------\033[0m') # 带红色输出
get_shop(user)
break
elif action == 'c':
if is_shop(user):
print("---查询之前的消费记录---")
get_shop(user)
else:
print("---查询之前无消费记录---")
elif action == 'b':
if not is_shop(user):
salary
= check_salary()
else:
salary
= int(last_bal[-1])
print('您工资现有:', salary)
shop(user, salary)

 

输出结果

python基础练习题

python基础练习题

 

 

三级菜单程序

 

#!/usr/bin/env python3 
#
-*- coding: utf-8 -*-
#
@Time : 2018/3/1 9:38
#
@Author : hyang
#
@File : three_menu.py
#
@Software: PyCharm
"""
可依次选择进入各子菜单
可从任意一层往回退到上一层
可从任意一层退出程序
"""
menu
= {
'北京':{
'海淀':{
'五道口':{
'soho':{},
'网易':{},
'google':{}
},
'中关村':{
'爱奇艺':{},
'汽车之家':{},
'youku':{},
},
'上地':{
'百度':{},
},
},
'昌平':{
'沙河':{
'老男孩':{},
'北航':{},
},
'天通苑':{},
'回龙观':{},
},
'朝阳':{},
'东城':{},
},
'上海':{
'闵行':{
"人民广场":{
'炸鸡店':{}
}
},
'闸北':{
'火车站':{
'携程':{}
}
},
'浦东':{},
},
'山东':{},
}

current_menu
= menu # 当前菜单
last_menu = [] # 上层菜单
prompt = "输入菜单名,进入子菜单\n 输入'b',返回上层菜单\n 输入'q',退出程序\n"
while True:
if len(current_menu) == 0:
print('已经到最底层,该菜单下无节点')
else:
for k in current_menu:
print('菜单->', k)
input_str
= input(prompt).strip()
if input_str == 'q':
print('退出程序')
break
elif input_str in current_menu:
last_menu.append(current_menu)
# 保存上一层菜单
current_menu = current_menu[input_str] # 保存当前层
elif input_str == 'b':
if len(last_menu) != 0:
current_menu
= last_menu.pop() # 弹出上一层菜单
else:
print('已经是顶层菜单')
else:
print('该节点菜单不存在')
continue