Я пытаюсь передать инструкцию по печати, если элемента нет в списке на python. Он работает только тогда, когда пин-код неверен, а не для неправильной учетной записи

#python

Вопрос:

 account_name = ['Adetunji Michael', 'Dina Asher-Smith', 'Niyola Davidson', 'John Paul']
valid_accounts= [3455590445, 2871290429, 3599076267, 1234567890]
valid_pins = [34777, 45786, 24055, 12345]
account_balance= [112000, 45700, 2300, 30000]

#This is the introductory aesthetic.
print("             *************************")
print("                 ABC BANK OF NIGERIA.n              MARVELLING YOU SINCE 2003n             WELCOME TO THE ATM MACHINE.")
print("             *************************")

#This is the start of the code. Everything here is made on the inference that normal ATM machines do not have any alphabetic input available.

trials=3
while trials!=0:
    account= int(input("    PLEASE INPUT YOUR ACCOUNT NUMBER: "))
    pin = int(input("   PLEASE INPUT YOUR 5 DIGIT PIN: "))
    correct_pin= valid_pins[valid_accounts.index(account)]
    if (account not in valid_accounts) or (pin!=correct_pin):
        print(" INVALID LOGIN DETAILS. ")
        trials= trials-1
        print(" YOU HAVE ", trials, " TRIALS LEFT")
    elif (account in valid_accounts) and (pin==correct_pin):
        print("Welcome")
 

Комментарии:

1. Вам нужно break выйти из цикла успеха.

2. Кроме correct_pin того, вы должны проверить, правильно account ли вы проверили .

Ответ №1:

 trials=3
while trials!=0:
    account= int(input("    PLEASE INPUT YOUR ACCOUNT NUMBER: "))
    pin = int(input("   PLEASE INPUT YOUR 5 DIGIT PIN: "))
    correct_pin= valid_pins[valid_accounts.index(account)]
    if (account not in valid_accounts) or (pin!=correct_pin):
        print(" INVALID LOGIN DETAILS. ")
        trials= trials-1
        print(" YOU HAVE ", trials, " TRIALS LEFT")
    elif (account in valid_accounts) and (pin==correct_pin):
        print("Welcome")
        break
 

Но в программе все еще будет несколько раскрытых случаев

  • Если введенной учетной записи нет в списке учетных записей, вы получите ошибку ValueError.
  • Немедленное преобразование input() в int () — не очень хорошая практика. если будет введена строка, вы получите ошибку ValueError.

Редактировать:

 trials=3
while trials!=0:
        try: # Check if the input is convertible to int()
            account= int(input("    PLEASE INPUT YOUR ACCOUNT NUMBER: "))
            pin = int(input("   PLEASE INPUT YOUR 5 DIGIT PIN: "))

            if account in valid_accounts:
                    # Create correct_pin only after making sure that the account is in valid_accounts.
                    #  Otherwise .index() will not work
                    correct_pin= valid_pins[valid_accounts.index(account)]
                    # You need to check the correct pin only when the account is valid
                    # Makes no sence to check the pin if there is no such account.
                    if (pin==correct_pin): 
                            print("Welcome")
                            break
                    else: # Pin is either correct or not. Else is more suitable than elif.
                            print(" INVALID LOGIN DETAILS. ")
                            trials -= 1
                            print(" YOU HAVE ", trials, " TRIALS LEFT")

            else: # Account is either valid or not. Else is more suitable than elif.
                    print(" INVALID LOGIN DETAILS. ")
                    trials -= 1
                    print(" YOU HAVE ", trials, " TRIALS LEFT")
                    
    except ValueError:
            print("   PLEASE INPUT ONLY INTEGERS")
 

Комментарии:

1. Спасибо. Любая рекомендация о том, как заставить мой код печатать неверные данные для входа, если введенного номера учетной записи нет в списке. Я думал, что функция «не в» сделает это

2. @Chukwukelu Чудесно, я отредактировал ответ. Вам нужно будет внести некоторые структурные изменения в логику. Пожалуйста, ознакомьтесь с комментариями в коде.

3. Сработало как заклинание. Код теперь работает идеально. Большое вам спасибо за вашу помощь

4. Рад, что это работает. Подумайте о том, чтобы принять ответ, если ваш вопрос исчерпан. Ваше здоровье!