ATM代码编写:
一、要求:
1、编写一个简单的ATM注册和登录功能:
a)利用两个列表,一个存放用户名,一个存放密码,下标位置一一对应好。注册时,判断用户名是否已经存在,密码长度要大于等于6位,如果输入错误要有相应提示,并退出系统。
b)如果用户注册成功,则提示用户进行登录。要求用户输入用户名和密码,只有当前用户名和密码均正确才能提示用户登录成功,否则提示用户名或密码错误,并退出系统。
2、在上题的基础上加入错误重试功能,不管是注册阶段还是登录阶段,一旦用户输入错误,都提示用户重新输入,直到正确为止。
二、代码(python):
'''
满足要求1、2
'''
import sys
userList=[]
passwordList=[]
def register():
print('欢迎注册')
print('请输入用户名:')
user=input()
for name in userList:
if name == user:
print('该用户名已注册,请重新输入!')
user=input()
userList.append(user)
while 1:
print('请输入密码(密码长度要大于等于6位):')
password=input()
if len(password) < 6:
print('密码长度不符合要求,请重新输入:')
else:
passwordList.append(password)
print('注册成功!')
print('请登录ATM系统')
login()
def login():
flag=1
while flag:
print('请输入用户名:')
user=input()
print('请输入密码:')
password=input()
if userList.count(user)==0:
print('用户名或密码错误,请重新输入...')
elif passwordList.count(password)==0:
print('用户名或密码错误,请重新输入...')
elif userList.index(user) == passwordList.index(password):
print('用户名和密码正确,登录成功!')
flag = 0
else:
print('用户名或密码错误,请重新输入...')
zhuJiemian()
def exit():
print('正在退出ATM系统...')
sys.exit()
def menu():
print('***********欢迎来到ATM系统***********')
print('************请选择操作菜单***********')
print('*********1.注册 2.登录 3.退卡********')
def zhuJiemian():
print('welcome to ATM')
menu()
function = input()
if function == '1':
register()
elif function == '2':
login()
elif function =='3':
exit()
else:
print('输入错误,请重新输入!')
menu()
三、问题总结:
问题一:
代码编写过程中,使用list.index()方法时忽略元素不在列表中的情况,运行时输入未创建的账号或密码导致程序异常退出。
解决办法:
在判断账号和密码索引值是否相等之前,先使用list.count()判断元素是否在列表中。如果不在直接返回提示语句,并进行下一轮循环。或者使用 if user in user.list: 也可以完成判断。
if userList.count(user)==0:
print('用户名或密码错误,请重新输入...')
elif passwordList.count(password)==0:
print('用户名或密码错误,请重新输入...')
elif userList.index(user) == passwordList.index(password):
print('用户名和密码正确,登录成功!')
flag = 0
else:
print('用户名或密码错误,请重新输入...')
或
if user in userlist:
i = user.index(user)
if password == passwordlist[i]:
print('用户名和密码正确,登录成功!')
flag = 0
else:
print('用户名或密码错误,请重新输入...')
else
print('用户名或密码错误,请重新输入...')
问题二:
使用while循环的时候,误用{}将后续语句块括起来
解决办法:
正确使用缩进表示语句块,删除{}
问题三:
对列表使用find()方法,导致程序报错,异常退出。
解决办法:
find()方法是字符串类型方法。正确使用不同数据类型的方法,不能混用。
(详见:不同数据类型常用方法)
问题四:
注册时,若用户名不重复,但密码不满足要求,此时用户中断注册,则会将用户名存进列表,但密码没有存进,这样会导致下一个用户注册时用户名和密码不匹配。
解决方法:
将17行userList.append()移至23行passwordList.append()的上方
四、tips:
1、由于使用列表存放数据,数据不会被保留到下一次运行的程序中。因此每次登录的时候都需要重新注册。
2、使用flag标识可以有效控制循环的开关。