#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. Рад, что это работает. Подумайте о том, чтобы принять ответ, если ваш вопрос исчерпан. Ваше здоровье!