今天写选课管理系统的时候,无意间用for else 写登录,发现个有趣的事(以下程序为实验程序,只为说明本博客主题)
user = input('请输入账号') psw = input('请输入密码') with open(r'..dbuserinfo','r',encoding='utf-8')as f: #f中有写好的账号和密码 for i in f: u,p,i = i.strip().split('|') if u == user and p == psw: print('登陆成功')break else: print('登录失败')
这么写当循环登录的时候,再判定到输入账户之前会显示n个'登录失败'
for i in f: u,p,i = i.strip().split('|') if u == user and p == psw: print('登陆成功') else: print('登录失败')
如果这么写,登录成功后,还会显示一个'登录失败'
根据官网说明,在for循环式,当可迭代对象迭代完且为空的时候会执行else
那么只能在for中引入break,这样就会直接跳出for,不去执行else
以下为改后正常运行的程序
for i in f: u,p,i = i.strip().split('|') if u == user and p == psw: print('登陆成功') break else: print('登录失败')