问题是您正在比较数组索引0但是在第二次设置userNameInput时它被设置为字符串而不是数组。
修复程序看起来像这样:
def getUserName(): userName = ["Chan"] userNameInput = [""] userNameInput[0] = input("Username: ") while userNameInput != userName: if userNameInput[0] == "": print("Username can not be blank. Please try again.") userNameInput[0] = input("Username: ") elif userNameInput[0] == userName[0]: print("Username is correct. Input password.") else: print("Username is not correct. Please try again.") userNameInput[0] = input("Username: ")
为什么需要列表来存储用户名和用户名输入而不仅仅是典型的字符串?
代码失败并且字符串索引超出范围的原因是您将userNameInput变量设置为字符串而不是将其第一个元素设置为字符串。
但是,最好只使用字符串而不是列表。
def getUserName(): userName = "Chan" userNameInput = input("Username: ") while userNameInput != userName: if len(userNameInput) == 0: print("Username can not be blank. Please try again.") userNameInput = input("Username: ") elif userNameInput == userName: print("Username is correct. Input password.") else: print("Username is not correct. Please try again.") userNameInput = input("Username: ")
这是一个使用字符串而不是列表的解决方案,可以解决您的问题。
编程中的重复是一种不好的做法。所以在我的解决方案中,我已经从代码中删除了所有重复部分
def getUserName(): userName = "Chan" while True: userNameInput = input('Username: ') if not userNameInput: print("Username can not be blank. Please try again.") elif userNameInput != userName: print("Username is not correct. Please try again.") else: print("Username is correct") break;
输出:
C:\***\****>py getUserName.py Username: sad Username is not correct. Please try again. Username: Username can not be blank. Please try again. Username: Chan Username is correct