Приглашение пользователя выйти или продолжить - PullRequest
1 голос
/ 14 февраля 2020

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

import math

prompt = '''Enter a number for the function you want to execute.
        Type 'exit' or 'quit' to terminate.
1 sin(x)
2 cos(x)
3 tan(x)
4 asin(x)
5 acos(x)
6 atan(x)
7 ln(x)
8 sqrt(x)
9 factorial(x)
:'''

while True:
    function = input(prompt)

    if function == 'quit' or 'exit':
        break
    elif function(range(0,10)):
        print(f"You entered {function()}!")
    else:
        print("Answer not valid try again")

functions = {1: math.sin, 2: math.cos, 3: math.tan, 4: math.asin,
             5: math.acos, 6: math.atan, 7: math.log, 8: math.sqrt, 9: math.factorial}

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

if 'exit' возвращает True, поскольку это непустая строка.

>>> bool('')
False
>>> bool('exit')
True

Это означает, что вы вызываете break каждую отдельную итерацию, поскольку exit всегда True.

Другая проблема, которая также возникает у вас, по умолчанию input() сохраняет значение string В вашем случае вы пытаетесь вернуть как целые числа, так и строки.

В строке function(range(0,10)): вы получите TypeError.

test = '1'

test (диапазон (0,10))

Traceback (последний последний вызов): файл "", строка 1, в тесте (диапазон (0,10))

TypeError: объект 'str' не вызывается

Даже после исправления этого TypeError вы получите возврат False, так как string не будет существовать в range() ценность.

bool(test in range (0, 10))
#False

Мы можем решить эти проблемы, изменив код ниже, пожалуйста, обратитесь к комментариям для получения информации о том, что делает каждая строка.

run = True #We will run our loop based on the value of run
terminate = ['quit', 'exit'] #Prompt termination words

while run:
    function = input(prompt)

    # If the value stored in function is a NOT a digit Example: 'quit' AND the word exists in our terminate queries.

    if function.isdigit() is False and function in terminate:

        # Break the loop by setting run to False

        run = False

    # Else if, the valye stored in function IS a digit Example: '1' AND it is between 1-9

    elif function.isdigit() and 9 >= int(function) > 0:
        print(f"You entered {function}!")
    else:
        print("Invalid Answer, try again.")
0 голосов
/ 14 февраля 2020

Ваша проблема здесь:

if function == 'quit' or 'exit':

Python разбивает это условие на if function == 'quit' и if 'exit' и прекратит работу, если любой из них верен. if 'exit' всегда будет верным, потому что вы ничего не сравниваете, а 'exit' не является пустой строкой. Вы должны изменить эту строку на:

if function in ['quit', 'exit']:

Это проверяет, есть ли function в списке, и разрывается, если это так.


Как только вы сделаете это изменение, ваш код все равно будет содержать ошибки. Не ясно, хотите ли вы запустить функцию, которую выбирает пользователь, или сказать им, какую функцию они выбрали. Вы должны как можно больше прояснить свой вопрос или задать другой.
...