Блок-схема усложняется с циклами while в Python

#python #loops #while-loop

Вопрос:

Я был бы признателен за некоторую помощь в этом:

Я пытаюсь составить форм-программу философии «Тогда зачем беспокоиться» :введите описание изображения здесь

Я написал этот код, но я не могу понять, как заставить цикл while повторяться каждый раз, когда пользователь не вводит «да» или «нет» в обоих вопросах.

 problem = str(input("Do you have a problem in life? ")) problem = problem.replace(" ", "").lower() #nevermind caps or spaces while problem:  if problem not in ("yes","no"):  print("Please enter YES or NO")  if problem == "no":  break  if problem == "yes":   something = str(input("Do you have something to do about it? "))  something = something.replace(" ","").lower()  while something:  if something not in ("yes","no"):  print("Please enter YES or NO")  elif:   break print("Then why worry?")  

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

1. if else: Я думаю, вам не удалось скопировать и вставить код

Ответ №1:

Ваш алгоритм линейный, в нем нет циклов. Таким образом, единственное место, где вам нужен цикл, — это когда вы пытаетесь получить правильный ответ от пользователя. Итак, я бы предложил вам перенести это в функцию, а затем ваш пример превратится в это:

 def get_user_input(prompt):  while True:  reply = input(prompt).replace(" ", "").lower()  if reply in ['yes', 'no']:  return reply  print("Please enter YES or NO")  problem_exists = get_user_input("Do you have a problem in life? ") if problem_exists == 'yes':  action_possible = get_user_input("Do you have something to do about it? ") print("Then why worry?")  

Ответ №2:

Я бы предложил использовать while True циклы, чтобы вы могли поместить input код один раз, затем с правильным условием и разбить, все в порядке

 while True:  problem = input("Do you have a problem in life? ").lower().strip()   if problem not in ("yes", "no"):  print("Please enter YES or NO")  continue   if problem == "no":  break   while True:  something = input("Do you have something to do about it? ").lower().strip()  if something not in ("yes", "no"):  print("Please enter YES or NO")  continue  break  break  print("Then why worry?")  

Используя оператор моржа ( pygt;=3.8 ), это можно было бы сделать проще

 while (problem := input("Do you have a problem in life? ").lower().strip()) not in ("yes", "no"):  pass if problem == "yes":  while (something := input("Do you have something to do about it? ").lower().strip()) not in ("yes", "no"):  pass  print("Then why worry?")