函数
函数是分开工具,不会减少代码量
def 函数名():
<函数实现的功能>
定义函数的三种方式
空函数
def register():
#todo: 注册功能,暂时不会写
pass#写个空函数,占个位置
有参函数
def compare(x,y):
if x>y:
print(x)
else:
print(y)
compare(30,40)
无参函数
def func():
print(1)
func()
函数的返回值
1.如果函数没有返回值,默认返回None(None就是返回值(使用函数后拿到的一个结果))
2.函数可以通过return返回返回值
def compare():
x=10
y=20
if x>y:
return x
else:
return y
res=compare()
print(res)
3.return可以终止函数
def print_1_10():
for i in range(10):
if i==5:
return#终止函数
print(i)
print_1_10()
4.return可以返回多个值,以列表的形式存储
def return_nums():
return 10,100,1000
res=return_nums()
print(res[1])
函数的参数
形参和实参
1.形参
在函数定义阶段括号内定义的参数,本质就是变量名
2.实参
在函数调用阶段括号内传入的参数,本质就是变量值
位置形参
1.位置形参
在函数定义阶段,按照从左到右的顺序依次定义的形参
特点:按照位置定义的形参,都必须被传值,多一个不行,少一个也不行
2.位置实参
在函数调用阶段,按照从左到右的顺序依次定义的实参
特点:按照位置为对应的形参依次传值
关键字
在调用函数时,按照key=value的形式为指定的参数传值
特点:可以打破位置的限制,但是仍能为指定的形参赋值
注意:1.可以混用位置实参和关键字实参,但是位置实参必须在关键字实参的左边。
2.可以混用位置实参和关键字实参,但不能对一个形参重复赋值
默认形参
在定义阶段,就已经被赋值
特点:在定义阶段就已经被赋值,意味着在调用时可以不用为其赋值
注意:
1.位置形参必须放在默认形参的左边
2.默认形参的值只在定义阶段赋值一次,也就是说默认参数的值在函数定义阶段就已经固定了。
编写注册函数
def register():
print('注册界面')
username=input('输入用户名')
pwd=input('输入密码')
with open('user.txt','a',encoding='utf8') as fa:
fa.write(f'{username}:{pwd}|')
print('注册成功')
编写登陆函数
def login():
print('登陆见面')
user_id=[]
with open('user.txt','r',encoding='utf8') as fr:
data=fr.read()
data=data.split('|')
for i in data:
data_s=i.split(':')
user_id.append(data_s)
user_log=input('输入用户名')
pwd_log=input('输入密码')
for j in range(0,len(user_id)):
if user_id[j][0]==user_log and user_id[j][1]==pwd_log:
print('登陆成功')
break
else:
print('登陆失败')
编写购物车系统
import os
print('''注册(按1)
登陆(按2)
'''
)
def register():
print('注册界面')
username=input('输入用户名')
pwd=input('输入密码')
qianqian=input('余额')
with open('userr.txt','a',encoding='utf8') as fa:
fa.write(f'{username}:{pwd}:{qianqian}|')
fa.flush()
print('注册成功')
login()
def login():
print('登陆界面')
user_id=[]
with open('userr.txt','r',encoding='utf8') as fr:
data=fr.read()
data=data.split('|')
for i in data:
data_s=i.split(':')
user_id.append(data_s)
for k in range(1,4):
user_log=input('输入用户名')
pwd_log=input('输入密码')
for j in range(0,len(user_id)):
if user_id[j][0]==user_log and user_id[j][1]==pwd_log:
global xian
xian=user_id[j][2]
print('登陆成功')
wuping()
return
else:
print(f'用户名或密码错误,你还有{3-k}次机会')
def wuping():
wupinglst=[
['红米',999],
['小米',998],
['华为',1999],
]
xun=True
while xun:
print('********************************')
for i in range(0,len(wupinglst)):
print(f'编号{i} {wupinglst[i][0]} {wupinglst[i][1]}')
bianhao=int(input('按编号选择物品'))
with open('gouwulan.txt','a',encoding='utf8')as ff:
ff.write(f'{wupinglst[bianhao][0]}:{wupinglst[bianhao][1]}|')
sf=input('是否继续购买')
if sf!='y':
tuichu = input('结账按p')
if tuichu=='p' :
jiezhang()
return
def jiezhang():
with open('gouwulan.txt','r',encoding='utf8') as fff:
gouwup=fff.read()
gouwup_list=gouwup.split('|')
# print(gouwup_list)
gouwulann=[]
for q in gouwup_list:
gouwup_str=q.split(':')
print(gouwup_str)
gouwulann.append(gouwup_str)
print('购物篮')
count=0
for t in range(0,len(gouwulann)-1):
print(f'{gouwulann[t][0]}')
count=count+int(gouwulann[t][1])
# print(count)
# print(xian)
if count>int(xian):
print('余额不足')
else:
print(f'已发货,余额为{int(xian)-count}')
os.remove('gouwulan.txt')
xian=0
m=int(input('请选'))
if m==1:
register()
if m==2:
login()