Как перехватить ошибки и go вернуться к началу al oop? - PullRequest
0 голосов
/ 08 марта 2020

Я работал над кодом, который позволяет пользователю вычислять массу молекул, и у меня было некоторое взаимодействие с пользователем в начале с некоторыми конкретными c ключевыми словами. Например, пользователь может вводить «инструкции» или «запуск», но если они вводят что-то еще, программа просто заканчивается. Как я могу вместо этого напечатать 'error, try again', и он снова отправится на старт?

print ("Welcome to MOLECULAR MASS CALCULATOR \n")
intro=input("Calculate mass of any molecule or element by entering the chemical formula. \n\n If this is your first time, it is recommended you read the instructions before you start. \n Type 'instructions'. Otherwise, type 'start'. \n\n")

while intro.upper() == 'INSTRUCTIONS':
    print ("\n\n Calculate the mass of any molecule or element by entering the chemical formula. \n\n Subscripts are possible; simply type the chemical formula. For e.g., to type the chemical formula of water simply type 'H20'. Only one digit of subscript per element is possible. \n Subscripts with  brackets, and oefficients are not possible. You would have to manually find the mass individually. For e.g., to find the mass of two gallium carbonate molecules '2Ga2(CO3)3', you would have to find the mass of one gallium carbonate molecule, and then multiply it by two. This would require you to first find the mass of one carbonate atom, then multiply by three, then add the mass of two gallium atoms. \n\n Note: If you make an error with typing, the program will terminate and you will have to  start again.")
    intro=''
    intro=input("\n\n Type 'start' to begin. \n\n ")

while intro.upper() == 'START':
    mol=input("\nEnter a molecule:")
    intro=''
#while intro.upper() != 'START' or 'INSTRUCTIONS':
#     print ("\nError, please try again.")
#     intro=''

1 Ответ

1 голос
/ 08 марта 2020

Самый простой способ сделать это - использовать while True: l oop, который всегда повторяется, и управлять им внутри l oop с помощью 'break', чтобы выйти из l oop и попасть в start код, если они вводят start, в противном случае continue.

Например, это будет делать то, что вы хотите:

print("Welcome to MOLECULAR MASS CALCULATOR \n")

intro = input("Introduction.\n Type  'instructions'. Otherwise, "
              "type 'start'. \n\n")

while True:
    if intro.upper() not in ["START", "INSTRUCTIONS"]:
        intro = input("\nError, please try again:")
        continue

    if intro.upper() == 'INSTRUCTIONS':
        print("Instructions")
        intro = input("\n\n Type 'start' to begin. \n\n ")
    elif intro.upper() == 'START':
        break

# 'START' code goes here
mol = input("\nEnter a molecule:")

Кстати, ваш закомментированный код:

while intro.upper() != 'START' or 'INSTRUCTIONS'

не будет работать так, как вы собираетесь. Python будет интерпретировать это как:

while (intro.upper() != 'START') or ('INSTRUCTIONS')

, где 'INSTRUCTIONS' (или любая ненулевая строка) всегда будет иметь значение True, поэтому весь оператор всегда будет True. В моем примере intro.upper() not in ["START", "INSTRUCTIONS"] показан один из допустимых способов оценки по списку значений, который правильно оценит то, что вы пытались сделать.

...