流程控制
Copy
'''
1.
用if分支完成猜数字游戏
-- 先通过键盘输入一个数字算作出题
-- 在键盘输入答案
-- 正确:猜对 | 误差3以内:接近了 | 误差外小值:太小 | 误差外大值:太大
'''
quest = int(input("输入一个数字完成出题:"))
answer = int(input('输入你的答案:'))
error = quest - answer
if quest == answer:
print('猜对')
elif -3 < error < 3:
print('接近了')
elif error > 3:
print('太大了')
elif error < 3:
print('太小了')
'''
2.
添加循环,让第1题可以循环完成多次猜字游戏
-- 一次循环完成一次出题和猜题
-- 当出题输入Q或q时结束游戏
'''
while True:
quest = input("输入一个数字完成出题,输入q|Q退出:")
end = ['q', 'Q']
if quest in end:
break
quest=int(quest)
answer = int(input('输入你的答案:'))
error = quest - answer
if quest == answer:
print('猜对')
break
elif -3 < error < 3:
print('接近了')
elif error > 3:
print('太大了')
elif error < 3:
print('太小了')
'''
3.
在第二题基础上,完成一次出题可以最多进行三次猜题
-- 一次出题,进入猜题,猜对进入下一次出题
-- 猜错进入下一次猜题,最多错三次,三次全错自动进入下一次出题
'''
while True:
quest = input("输入一个数字完成出题,输入q|Q退出:")
end = ['q', 'Q']
if quest in end:
break
count = 1
while count <= 3:
quest = int(quest)
answer = int(input('输入你的答案:'))
error = answer - quest
if error == 0:
print('猜对')
break
elif -3 < error < 3:
print('接近了')
elif error > 3:
print('太大了')
elif error < 3:
print('太小了')
count += 1
else:
print()
print('你已输错3次,请重新输入')
列表的操作
Copy
'''
1.循环输入10条信息,如果输入的是自然数,就存放到名为nums的列表中,如果不是,就存放到名为strs列表中
-- nums中存放的数据都是int类型
-- strs中存放的都是字符串类型
-- 最终打印两个列表以及个列表的中元素的个数
'''
(方法一)
nums = []
strs = []
count = 1
while count <= 10:
res = input('请输入正整数或者字符串 ')
if res.isdigit() == True:
nums.append(int(res))
else:
strs.append(res)
count += 1
print('nums变量中存放的元素有%s个,%s' % (len(nums), nums))
print('strs变量量中存放的元素有%s个,%s' % (len(strs), strs))
(方法二)
for i in range(10):
info = input('请输入10条信息 ')
if info.isdigit():
nums.append(int(info))
else:
strs.append(info )
print(nums)
print(strs)
'''
2.完成用list存放注册用户信息的功能:可以循环来完成注册,先输入账号,再输入密码,密码需要二次确认,两次密码一致才能往下进行注册,
如果不一致返回重新注册输入
-- 账号输入Q或q,退出整个程序
-- 账号成功,进行两次密码验证,验证失败直接进入下一次注册
-- 账号必须全部是英文字母3个长度及以上,密码必须是英文或数字3个长度及以上
-- 两次密码验证成功,就注册信息存放到列表中
-- 假设注册成功了Owen,123 | Zero,000两个信息,最终形成的注册结果为
[['Owen', '123'], ['Zero', '000']]
'''
list_1 = []
while True:
user = input('请输入账号,输入q/Q退出程序 ')
if user == 'q' or user == 'Q':
break
if not user.isalpha() and len(user) >= 3:
print('注册不成功,请重新输入用户名')
while True:
pwd = input('请输入密码 ')
if pwd:
re_pwd = input('请再次输入密码 ')
if pwd == re_pwd:
info = [user, pwd]
list_1.append(info)
print('注册成功')
break
else:
print('两次密码输入不一致,请重新输入密码 ')
continue
print(list_1)
字典的操作
Copy
'''
1.将几个指定字符串形成目标字符串
指定字符串:'I' | 'am' | 'you are a good boy' | '!'
目标字符串:'I am a good boy!'
'''
first = 'I'
second = 'am'
third = 'you are a good boy'
fourth = '!'
third = third[8:]
print('%s %s %s%s' % (first, second, third,fourth))
'''
2.写出你可以想到的所有按要求格式输出列表的解决方案
指定列表:[1, 2, 3, 4, 5]
输出结果:[5, 4, 3, 2, 1]
'''
list1 = [1, 2, 3, 4, 5]
print(sorted(list1, reverse=True))
print(list(reversed(list1)))
print(list1[::-1])
list1.reverse()
print(list1)
list1.sort(reverse=True)
print(list1)
'''
3.遍历删除包含 Bi词汇(脏话) 的目标
指定列表:['Owen', 'BobSB', 'SBen', 'ZeroS', 'OSBO']
输出结果:['Owen', 'ZeroS']
'''
list1 = ['Owen', 'BobSB', 'SBen', 'ZeroS', 'OSBO']
list2 = []
source=['Owen', 'BobSB', 'SBen', 'ZeroS', 'OSBO']
res=[]
for i in source:
if 'SB' not in i:
res.append(i)
print(res)
for i in source[::-1]:
if 'SB' in i:
source.remove(i)
print(source)
'''
4.求得指定元组中是字符串数据的总个数
指定元组:(1, 2, '3', '4', 5, '6', 7, 8, 9)
求的结果:3
'''
ls = (1, 2, '3', '4', 5, '6', 7, 8, 9)
list1 = []
for i in ls:
if isinstance(i, str):
list1.append(i)
print(len(list1))
ls = (1, 2, '3', '4', 5, '6', 7, 8, 9)
list1 = []
count = 0
for i in ls:
if isinstance(i, str):
list1.append(i)
count += 1
print('字符串个数为%s' % count)
'''
5.求得指定元组中 str数据的个数 与 int数据的个数,存储到字典存放
指定元组:(1, 2, '3', '4', 5, '6', 7, 8, 9)
求的结果:{'str': 3, 'int': 6}
'''
tuple_refer=(1, 2, '3', '4', 5, '6', 7, 8, 9)
dic={}
inter=[]
string=[]
for i in tuple_refer:
if isinstance(i,int):
inter.append(i)
else:
string.append(i)
num_int=len(inter)
num_str=len(string)
dic['str']=num_str
dic['int']=num_int
print(dic)
count_str = 0
count_int = 0
tuple_refer = (1, 2, '3', '4', 5, '6', 7, 8, 9)
tuple_list = list(tuple_refer)
for i in tuple_list:
if isinstance(i, str):
count_str += 1
else:
count_int += 1
print(dict({'str': count_str, 'int': count_int}))
tuple_refer = (1, 2, '3', '4', 5, '6', 7, 8, 9)
res = {}.fromkeys(['str', 'int'], 0)
for i in tuple_refer:
if isinstance(i, str):
res['str'] += 1
else:
res['int'] += 1
print(res)
'''
6.列表数据的去重
指定列表:[3, 1, 2, 2, 1, 5, 9, 7]
求的结果:[3, 1, 2, 5, 9, 7]
'''
list1=[3, 1, 2, 2, 1, 5, 9, 7]
print(list(set(list1)))
-----> 定义一个新列表,然后遍历list1,将list1中的值取出来,判断是否包含在新列表list1_new中,如果不包含,就执行插入操作
list1=[3, 1, 2, 2, 1, 5, 9, 7]
list1_new=[]
for i in list1:
if i not in list1_new:
list1_new.append(i)
print(list1_new)
list1 = [3, 1, 2, 2, 1, 5, 9, 7]
dic = {}.fromkeys(list1, 0)
dic_keys = dic.keys()
res=list(dic_keys)
print(res)
'''
7.回答字典能不能按索引取值?能不能切片?能去求长度?能否字典与字典拼接?成员运算判断的是key还是value
'''
dic = {'name': 'bob', 'age': 18}
dic3 = {'name2': 'bobbb', 'sex': 'male'}
res=dic.copy()
res.update(dic3)
print(res)
print(len(res))
print('name' in res)
print('name2' in res)
print('age' in res)
print('sex' in res)
'''
8.修改所有以 Bi词汇(脏话) 开头或结尾的字符串,将 Bi词汇 替换为**
指定列表:['Owen', 'BobSB', 'SBen', 'ZeroS', 'OSBO']
运行结果:['Owen', 'Bob**', '**en', 'ZeroS', 'OSBO']
'''
source = ['Owen', 'BobSB', 'SBen', 'ZeroS', 'OSBO']
for v in source:
if v.startswith('SB') or v.endswith('SB'):
index = source.index(v)
source[index] = source[index].replace('SB', '**')
print(source)
函数练习
Copy
'''
1)具有进货功能1,销售车辆功能2,展示所有库存功能3,展示销售总业绩功能4
2)用户输入0退出系统,输入提供的功能编号,完成对应的功能,否则重新输入,eg:2就进入销售撤功能
3)车辆信息具有持久化(文件永久)存储功能,车辆有奔驰|宝马|奥迪三款
文件信息:
total.txt: 就是记录了总销售额
car.txt:
宝马 120000 9
奔驰 150000 7
奥迪 100000 8
4)进货功能:选择进货的车型与数量,完成进货
5)销车功能:选择售出的车,有库存售出,更新销售总业绩,没有则进入进货功能
6)展示库存:显示所有车与库存两条信息即可
7)总业绩:显示总业绩金额即可
'''
'''
{
'宝马': [120000, 9]
}
{
'宝马': {'price': 120000, 'num': 9}
}
'''
def read_car():
dic = {}
with open('car.txt', 'r', encoding='utf-8') as f:
for n_p in f:
name, price, num = n_p.strip('\n').split(' ')
dic[name] = [int(price), int(num)]
return dic
def write_car(dic):
with open('car.txt', 'w', encoding='utf-8') as f:
for k, v in dic.items():
info = "%s %s %s\n" % (k, v[0], v[1])
f.write(info)
def choose_car():
while True:
car = input('请选择车型 ')
if car in ['宝马', '奔驰', '奥迪']:
return car
def choose_num():
while True:
num = input('请输入数量 ')
if num.isdigit() and int(num) > 0:
return int(num)
def read_total():
with open('total.txt', 'r', encoding='utf-8') as f:
return int(f.read())
def write_total(total):
with open('total.txt', 'w', encoding='utf-8') as f:
f.write(str(total))
def grade(add_total=0):
if add_total > 0:
total = read_total() + add_total
write_total(total)
else:
print(read_total())
def hub():
print('库存功能')
car_dic = read_car()
for k, v in car_dic.items():
print(k + ' ' + str(v[1]))
def sell():
print('售车功能')
car_dic = read_car()
car = choose_car()
num = choose_num()
car_dic[car][1] -= num
write_car(car_dic)
if car_dic[car][1] < num:
print('存活不足')
stock()
add_total = car_dic[car][0] * num
grade(add_total)
print('售车成功')
def stock():
print('进货功能')
car_dic = read_car()
car = choose_car()
num = choose_num()
car_dic[car][1] += num
write_car(car_dic)
method_map = {
'1': stock,
'2': sell,
'3': hub,
'4': grade
}
def sys_start():
while True:
cmd = input('''请输入:
1.进货 | 2.售车 | 3.库存 | 4.业绩 | 0.退出
>>>: ''')
if cmd == '0':
break
if cmd in method_map:
method_map[cmd]()
else:
print('指令错误,重来')
sys_start()
Copy
需求:
1.用户信息由user.info文件存放,内容格式:abc|123|0,qwe|123|1000
2.实现 登录,注册,注销,购物,充值,退出系统 六个功能
3.注册可以完成用户的注册,注册时要提供账号密码,初始财产余额为0
1)注册先输入账号,要对账号做 输入的是否为空、输入的账号是否已经存在两种判断,都通过进入输入密码,否则重新输入
2)输入密码,要对密码长度最短为3位的限制,长度3位或以上代表合法,可以完成注册
3)注册是将账号密码写入文件,财产余额初始为0,
第一次写入格式:账号|密码|余额
再次写入格式:,账号|密码|余额
4.用户登录状态需要保存,在程序运行的py文件最上方定义一个user字典,字典为空代表未登录,为{'usr': 账号, 'ps': 密码, 'money': 余额}代表登录,记录的就是当前登录的用户
5.完成用户登录
1)解析user.info文件,将用户信息存放到users_dic字典中,格式见下,解析的过程可以定义为方法,
{
'abc': {'ps': '123', 'money': 0},
'qwe': {'ps': '000', 'money': 1000}
}
2)判断用户是否登录了,如果登录了就提示不需要重复登录,未登录就可以往下走,完成登录
3)先输入账号,账号为空、不存在都会验证失败,继续输入,3次失败后就可以进入注册功能,验证通过进行玩下
4)再输入密码,密码必须超过3位,3次登录失败退出登录,成功的记录登录的用户信息到user字典,表示已登录
6.用户注销,就是清楚登录状态,将存放登录用户信息的user字典制空user={}
7.用购物功能完成购物,
1)必须在登录状态,未登录时,进入登录页面,已登录则可以购物
2)预定义一些商品与价格,每一次完成购物后,提示用户是否继续进行购物
3)如果余额不足则进入充值功能
8.充值功能
1)必须在登录状态才可以操作
2)充值后的金额数据要同步到user.info文件,user字段和user_dic字典中
9.退出系统,将退出系统,但注册的用户和余额都保存在文件中
```python
user = {}
def check_login(func):
def inner(*args, **kwargs):
if not user:
login()
return func(*args, **kwargs)
return inner
'''1. 用户信息由user.info文件存放,内容格式:abc|123|0,qwe|123|1000
账号|密码|余额,账号|密码|余额'''
def _read_file():
dic = {}
with open('user.info2', 'r', encoding='utf-8') as f:
a = f.read()
if a:
for i in a.split(','):
res = i.split('|')
dic[res[0]] = {'ps': res[1], 'money': int(res[2])}
return dic
def _write_file(dic):
info = ''
for x, y in dic.items():
u = x
v = y['ps']
w = y['money']
info += '%s|%s|%s,' % (u, v, w)
info = info.rstrip(',')
with open('user.info2', 'w', encoding='utf-8') as f:
f.write(info)
'''
3.注册可以完成用户的注册,注册时要提供账号密码,初始财产余额为0
1)注册先输入账号,要对账号做 输入的是否为空、输入的账号是否已经存在两种判断,
都通过进入输入密码,否则重新输入
2)输入密码,要对密码长度最短为3位的限制,长度3位或以上代表合法,可以完成注册
3)注册是将账号密码写入文件,财产余额初始为0,
第一次写入格式:账号|密码|余额
再次写入格式:,账号|密码|余额
'''
def register():
dic = _read_file()
while True:
usr = input('输入账号 ').strip()
if usr in dic:
print('账号已存在')
continue
if not usr:
print('账号不能为空')
continue
break
while True:
pwd = input('输入密码 ').strip()
if len(pwd) < 3:
print('密码长度必须满3位,重新输入密码')
continue
else:
dic[usr] = {'ps': pwd, 'money': 0}
_write_file(dic)
print('注册成功')
break
'''
4.用户登录状态需要保存,在程序运行的py文件最上方定义一个user字典,字典为空代表未登录,为{'usr': 账号, 'ps': 密码, 'money': 余额}代表登录,记录的就是当前登录的用户
5.完成用户登录
1)解析user.info文件,将用户信息存放到users_dic字典中,格式见下,解析的过程可以定义为方法,
{
'abc': {'ps': '123', 'money': 0},
'qwe': {'ps': '000', 'money': 1000}
}
2)判断用户是否登录了,如果登录了就提示不需要重复登录,未登录就可以往下走,完成登录
3)先输入账号,账号为空、不存在都会验证失败,继续输入,3次失败后就可以进入注册功能,验证通过进行玩下
4)再输入密码,密码必须超过3位,3次登录失败退出登录,成功的记录登录的用户信息到user字典,表示已登录
'''
def login():
print('登陆功能')
global user
if user:
print('用户%s已登陆' % user['usr'])
return
user_dic = _read_file()
count = 1
while True:
if count > 3:
register()
return
usr = input('输入账号 ').strip()
if not usr:
print('账号不能为空')
count += 1
continue
if usr not in user_dic:
print('账号不存在')
count += 1
continue
break
tag = 1
while True:
if tag > 3:
print('已输错3次,请重新登陆')
return
pwd = input('输入密码 ').strip()
if not pwd:
print('密码不能为空')
tag += 1
continue
if len(pwd) < 3:
print('密码不能少于3位')
tag += 1
continue
if pwd != user_dic[usr]['ps']:
print('密码错误')
tag += 1
continue
break
money = user_dic[usr]['money']
user = {'usr': usr, 'ps': pwd, 'money': money}
print('登陆成功')
def logout():
print('注销功能')
global user
if not user:
print('未登陆,无需注销')
return
print('正在注销用户%s >>>>' % user['usr'])
user = {}
print('注销成功')
'''
7.用购物功能完成购物,
1)必须在登录状态,未登录时,进入登录页面,已登录则可以购物
2)预定义一些商品与价格,每一次完成购物后,提示用户是否继续进行购物
3)如果余额不足则进入充值功能
'''
@check_login
def shopping():
goods_map = {
'男朋友': 100,
'女朋友': 100,
'ipad': 1000
}
print('购物功能')
for k, v in goods_map.items():
print(k, v, end=' ')
goods = input('请输入购物商品名 ')
if goods not in goods_map:
print('没有该商品')
return
while goods_map[goods] > money:
choose = int(input('余额不足,是否进行充值 0|1'))
if not choose:
print('返回主页面')
return
print('将进入充值页面')
top_up()
user['money'] -= goods_map[goods]
user_dic = _read_file()
goods_map = {
'男朋友': 100,
'女朋友': 100,
'ipad': 1000
}
usr = user['usr']
user_dic[usr]['money'] -= goods_map[goods]
_write_file(user_dic)
print('购物成功')
if int(input('是否继续购物0|1:')):
shopping()
print('返回主页面')
'''
8.充值功能
1)必须在登录状态才可以操作
2)充值后的金额数据要同步到user.info文件,user字段和user_dic字典中
'''
@check_login
def top_up():
print('充值功能')
money = int(input('充值的金额 '))
user['money'] += money
user_dic = _read_file()
usr = user['usr']
user_dic[usr]['money'] += money
_write_file(user_dic)
print('充值成功')
method_map = {
'1': login,
'2': register,
'3': shopping,
'4': top_up,
'5': logout
}
def run():
while True:
cmd = input('''功能:
1:<登陆> 2:<注册> 3:<购物> 4:<充值> 5:<注销> 6:<退出>
>>>: ''')
if cmd == '6':
break
if cmd in method_map:
method_map[cmd]()
else:
print('指令错误')
continue
run()
Copy
(方法二)
user = {}
def check_login(func):
def inner(*args, **kwargs):
if not user:
print('未登陆')
login()
res = func(*args, **kwargs)
return res
return inner
def _read():
dic = {}
with open('user.info2', 'r', encoding='utf-8') as f:
a = f.read()
if not a:
return
b = a.split(',')
for i in b:
u = i.split('|')[0]
v = i.split('|')[1]
w = i.split('|')[2]
dic[u] = {'ps': v, 'money': int(w)}
return dic
def _write(dic):
if not dic:
return
info = ''
for u, v in dic.items():
x = v['ps']
y = v['money']
info += '%s|%s|%s,' % (u, x, y)
info = info.rstrip(',')
with open('user.info2', 'w', encoding='utf-8') as f:
f.write(info)
def register():
print('注册功能')
dic = _read()
while True:
usr = input('输入账号 ')
if not usr:
print('账号不能为空')
continue
elif usr in dic:
print('账号已存在')
continue
break
while True:
pwd = input('输入密码 ')
if not usr:
print('密码不能为空')
continue
elif len(pwd) < 3:
print('密码不合法')
continue
break
dic[usr] = {'ps': pwd, 'money': 0}
_write(dic)
print('账号%s注册成功' % usr)
def login():
user_dic = _read()
global user
if user:
print('用户%s已登陆' % user['usr'])
count = 1
while True:
if count > 3:
print('账号输入次数过多,请注册')
register()
return
usr = input('输入登陆账号')
if not usr:
print('账号不能为空')
count += 1
continue
elif usr not in user_dic:
print('账号不存在')
count += 1
continue
break
tag = 1
while True:
if tag > 3:
print('密码输入次数过多,请注册')
register()
return
pwd = input('输入登陆密码')
if not usr:
print('密码不能为空')
tag += 1
continue
elif len(pwd) < 3:
print('密码不合法')
tag += 1
continue
elif pwd != user_dic[usr]['ps']:
print('密码错误')
tag += 1
continue
break
user = {'usr': usr, 'ps': pwd, 'money': user_dic[usr]['money']}
print('用户%s登陆成功' % usr)
def logout():
global user
if not user:
print('没有用户登陆,无需注销')
return
res = user['usr']
user = {}
print('%s注销成功' % res)
@check_login
def topup():
print('充值功能')
global user
money = int(input('充多少 '))
user['money'] += money
user_dic = _read()
user_dic[user['usr']]['money'] += money
_write(user_dic)
print('充值成功')
@check_login
def shop():
print('购物功能')
shop_list = {
'男朋友': 100,
'女朋友': 50,
'ipad': 1000
}
for u, v in shop_list.items():
print(u, v, end=' ')
print('')
choice = input('请选择商品 ')
if choice not in shop_list:
print('没有该商品,返回主页面')
return
money = shop_list[choice]
global user
user_dic = _read()
while money > user['money']:
confirm = int(input('余额不足,是否进行充值0|1'))
if not confirm:
print('返回主界面')
return
print('进入充值页面')
topup()
user['money'] -= money
user_dic[user['usr']]['money'] -= money
_write(user_dic)
print('购物成功')
choice2 = int(input('是否继续购物0|1'))
if choice2:
print('继续购物')
shop()
else:
print('返回主页面')
map_list = {
'1': login,
'2': register,
'3': logout,
'4': shop,
'5': topup
}
def run():
while True:
choice = input('''请选择功能:
1:登陆|2:注册|3:注销|4:购物|5:充值|6:退出系统 ''')
if choice == '6':
break
if choice not in map_list:
print('指令错误')
continue
map_list[choice]()
run()
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
· 本地部署 DeepSeek:小白也能轻松搞定!
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 如何基于DeepSeek开展AI项目