просмотр списка в операторе if для проверки возможного результата - PullRequest
1 голос
/ 08 июля 2020

Я пытаюсь l oop через все возможные результаты переменной if_yes, чтобы я мог вычислить ИМТ

Вот код:

Question = input("Do you want to calculate your BMI?")
if_yes = ["Yes", "yes", "y", "Y"]

for i in if_yes:
   if Question == i:
       bmi_calculation()
   elif Question == "No" or Question == "N" or Question == "no" or Question == "n":
       print("Thank you.Hope you'll use this program in the future")
   else:
       print("Enter a valid response!")

Каждый раз, когда Я пишу Y, кажется, что оператор else выполняется 3 раза, а затем, похоже, выполняется функция bmi_calculation(). Как этого избежать?

Выход

Do you want to calculate your BMI?Y
Enter a valid response!
Enter a valid response!
Enter a valid response!
Please Enter your Name: 

Ответы [ 7 ]

1 голос
/ 08 июля 2020

Это будет работать:

import time

def bmi_calculation():
    height = float(input("What is your height (metres?) "))
    weight = float(input("What is your weight (kg?) "))
    print("Your BMI is ", weight / height**2)


answer = input("Do you want to calculate your BMI? ")
yes_answers = ["Yes", "yes", "y", "Y"]
no_answers = ["No", "N", "no", "n"]

if answer in yes_answers:
    bmi_calculation()

elif answer in no_answers:
    print("What are you afraid of?")
    while True:
        try:
            time.sleep(1)
            print("scaredy-cat")
        except KeyboardInterrupt:
            pass
else:
    print("Enter a valid response!")
1 голос
/ 08 июля 2020

Вы делаете это неправильно, попробуйте использовать while l oop, чтобы он продолжал повторяться до тех пор, пока не будет дан правильный ввод, вместо того, чтобы перебирать правильные вводы

question = input("Do you want to calculate your BMI?\n1. Yes\n2. No\n")
while True:
    if question == "1":
        bmi_calculation()
        break
    elif question == "2":
        print("Hope you use the program in the future")
        break
    else:
        question = input("Please enter a valid response\n")
1 голос
/ 08 июля 2020

Причина, по которой отображается «Введите правильный ответ!» 3 раза перед выполнением программы, потому что, когда она выполняет итерацию по списку, «Y» (введенное пользователем) не удовлетворяет условию, что «Y» равно i (которое принимает первые 3 значения из списка). Что вы можете попробовать, так это использовать операторы членства вместо повторения по списку, например:

Question = input("Do you want to calculate your BMI? ")
if_yes = ["Yes", "yes", "y", "Y"]

if Question in if_yes:
    bmi_calculation()
elif Question in ["no", "No", "n", "N"]:
    print("Thank you.Hope you'll use this program in the future")
else:
    print("Enter a valid response!")
1 голос
/ 08 июля 2020

Вы неправильно используете for l oop, в конце концов, что вам нужно сделать, это вычислить или не вычислить ИМТ на основе ввода, предоставленного пользователем:

question = input("Do you want to calculate your BMI?")
if_yes = ["Yes", "yes", "y", "Y"]

if question in if_yes:
    bmi_calculation()
elif question in ["No", "N", "no", "n"]:
    print("Thank you.Hope you'll use this program in the future")
else:
    print("Enter a valid response!")

I также добавили некоторые улучшения в ваш logi c. Следуйте, PEP-8 , чтобы стилизовать ваш код.

1 голос
/ 08 июля 2020

Причина, по которой он выполняется несколько раз, заключается в том, что вы перебираете if_yes, который имеет несколько значений. Я думаю, что вы хотите сделать следующее:

Question = None
if_yes = ["Yes", "yes", "y", "Y"]

while Question not in if_yes:
    Question = input("Do you want to calculate your BMI?")
    if Question == "No" or Question == "N" or Question == "no" or Question == "n":
        print("Thank you.Hope you'll use this program in the future")
        exit()
    else:
        print("Enter a valid response!")


bmi_calculation()

Это в основном заставит пользователя либо ввести что-то, что находится в is_yes, либо какой-то тип «нет», чтобы выйти из программы.

1 голос
/ 08 июля 2020

Причина, по которой он это делает, состоит в том, что первые три раза он сравнивает ваше «Y» с «Да», «да» и «y», которые не являются тем, что был ответ. Если вы настроены сохранить этот способ кодирования, как вы хотите это сделать, вместо этого попробуйте факторизовать свой код следующим образом (psuedocode, я не python программист)

Question = input("Do you want to calculate your BMI?")
if_yes = ["Yes", "yes", "y", "Y"]

yes_value = false

for i in if_yes:
   if Question == i:
       yes_value = true

if yes_value == true
   bmicalculation()
0 голосов
/ 08 июля 2020

Я бы сделал следующее

yes_answer = ['y', 'Y', 'Yes', 'yes', 'YES']
no_answer = ['n', 'N', 'No', 'no', 'NO']
valid_answer = yes_answer + no_answer
answer = ''

while answer not in valid_answer:
    answer = input("Do you want to calculate your BMI? ")
 
    if answer in yes_answer:
        print('We will calculate your BMI')
  
    elif answer in no_answer:
        print("Thank you.Hope you'll use this program in the future")

    else:
        print("Enter a valid response!")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...