出现循环时变量被删除

时间:2018-02-10 02:43:47

标签: python python-3.x loops

我正在为练习注册系统制作代码,我遇到了如何添加ID和密码列表的问题。

print('id = ')
id = input()
while True:
    print('password = ')
    password = input()

    print('Please retype your password = ')
    repassword = input()

    if repassword == pas:
        print('successfully registered.')
        acc = [ ]
        acc.append([(id),(pas)])
        break
    else:
        print('please check your password.')

当此循环结束时acc列表被删除,我无法使用该列表。 如何保存我的清单?

2 个答案:

答案 0 :(得分:2)

我对您的代码进行了一些更改以使其正常工作:

  1. pas重命名为password
  2. 在循环外部的开头实例化acc,因此每次循环都不会清除它。
  3. 在列表中添加元组而不是列表。
  4. 试试这个:

    acc = []
    
    print('id = ')
    id = input()
    
    while True:
        print('password = ')
        password = input()
    
        print('Please retype your password = ')
        repassword = input()
    
        if repassword == password:
            print('successfully registered.')
            acc.append((id, password))
            break
        else:
            print('please check your password.')
    
    print(acc)
    

答案 1 :(得分:0)

阻止代码工作的唯一方法是在一个地方调用密码变量password,在另外两个地方调用pas。除了将pas更改为password之外,其他任何操作都可以使其正常运行。

循环中定义的变量在循环退出时仍在范围内。这是Python工作原理的基本部分。这是一个简单的演示:

Python 3.6.3 (default, Nov 13 2017, 09:55:42)
[GCC 4.9.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> while True:
...     x = 5
...     break
...
>>> x
5

除了修复错误名称的变量之外,我还会对代码进行三项更改:

  • 为“id”使用不同的变量名称 - id是一个内置函数,shadow内置函数不是一个好主意。也许称之为“user_id”。
  • 将提示传递给input而不是打印 - 这更简洁。像这样:

    password = input("password = ")
    
  • acc指定为一个简单的元组 - 它不需要是一个列表,您不需要创建它然后实例化它。只是做

    if repassword == password:    
        acc = (user_id, password)
        break
    

    或者,就此而言,只需在退出while循环后使用user_id和密码即可。您根本不需要acc

通过所有这些更改,您的代码变得更短更简单:

user_id = input('id = ')
while True:
    password = input('password = ')
    repassword = input('Please retype your password = ')

    if repassword == password:
        print('successfully registered.')
        break
    else:
        print('please check your password.')
print("User id: {}\nPassword: {}".format(user_id, password))