Python получить пароль и проверить цикл - PullRequest
0 голосов
/ 13 марта 2019

Итак, я пытаюсь запросить ввод, а затем проверить правильность пароля. Он проверит, является ли ввод пустым, неправильным или правильным. Тем не менее, после первого начального ввода пробела, если я снова введу пробел, программа прерывается. Как мне сделать так, чтобы он продолжал цикл и корректно проверял

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 = input("Username: ")
        elif userNameInput[0] == userName[0]:
            print("Username is correct. Input password.")
        else:
            print("Username is not correct. Please try again.")
            userNameInput = input("Username: ")

Ответы [ 3 ]

2 голосов
/ 13 марта 2019

Зачем вам нужны списки для хранения ввода имени пользователя и имени пользователя вместо обычных строк?

Причина, по которой код завершается ошибкой, если строковый индекс выходит за пределы диапазона, заключается в том, что вместо переменной 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: ")

Вот решение с использованием строк вместосписки, решающие вашу проблему.

1 голос
/ 13 марта 2019

Повторение в программировании - плохая практика.Итак, в моем решении я исключил все повторяющиеся части из вашего кода и

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
0 голосов
/ 13 марта 2019

Проблема в том, что вы сравниваете индекс массива 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: ")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...