ATM代码编写(1)

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标识可以有效控制循环的开关。

ATM代码编写(2)

ATM代码编写(3)

ATM代码编写(4)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值