Как сделать программу цикла python после того, как пользователь введет неверное значение?

#python #loops #thonny

Вопрос:

Выполняя задание для класса, мне нужно, чтобы пользователь ввел значение от 1 до 500, и если пользователь вводит неправильное значение более трех раз, программа должна закрыться. У меня также возникают проблемы с выполнением цикла программы, если пользователю нужно повторить попытку

Вот что у меня есть на данный момент.

 flour = 2.75  baking_soda = 1  baking_powder = 0.5  butter = 1  sugar = 1.5  egg = 1  vanilla = 1  makes = 48    cookies = float(input('Enter number of cookies: '))    count = 0    flour = (cookies * flour) / makes  baking_soda = (cookies * baking_soda) / makes  baking_powder = (cookies * baking_powder) / makes  butter = (cookies * butter) / makes  sugar = (cookies * sugar) / makes  egg = (cookies * egg) / makes  vanilla = (cookies * vanilla) / makes    while (cookies gt;=1 and cookies lt;=500):  print("You need "   str(round(flour,2))    " cups of flour, "   str(round(baking_soda,2))    " teaspoons of baking soda, "   str(round(baking_powder,2))    " teaspoons of baking powder, "   str(round(butter,2))    " cups of butter, "  str(round(sugar,2))    " cups of sugar, "   str(round(egg,2))    " eggs and "   str(round(vanilla,2))    " teaspoons of vanilla.")  break count=0  while (cookies lt;1 or cookies gt;500):  count =1  cookies = float(input('Enter valid number: '))  if (countgt;=3):  print("I will now close.")  exit()  

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

1. Что-то не так с вашими отступами, но я бы предложил несколько вещей. Сначала запишите логику того, как вы хотите решить проблему, и начните использовать ее в качестве своего алгоритма, а затем подумайте о реорганизации своего кода. Одна из вещей, которую я бы сделал, — это включить count lt; 3 в ваш первый while цикл, а затем выполнить расчеты ингредиентов после того, как вы узнаете, что у вас есть приемлемое количество файлов cookie в качестве входных данных. Кроме того, вам , вероятно, сойдет с рук создание cookies int «а», а не float «а», если вы не заинтересованы в создании 32,4 файлов cookie.

2. Можете ли вы обновить свой вопрос, чтобы показать, как сейчас выглядит ваш код?

3. спасибо викикикитики, я перенес вычисления на второй цикл while, и он начал работать!

Ответ №1:

Вот как это выглядит сейчас, я думаю, что это ответ, так как он больше не доставляет мне проблем.

 flour = 2.75 baking_soda = 1 baking_powder = 0.5 butter = 1 sugar = 1.5 egg = 1 vanilla = 1 makes = 48  cookies = int(input('Enter number of cookies from 1 to 500: ')) count=0 while (cookies lt;1 or cookies gt;500):  count =1  cookies = int(input('Enter valid number: '))  if (countgt;=3):  print("I will now close.")  exit() while (cookies gt;=1 and cookies lt;=500):  flour = (cookies * flour) / makes  baking_soda = (cookies * baking_soda) / makes  baking_powder = (cookies * baking_powder) / makes  butter = (cookies * butter) / makes  sugar = (cookies * sugar) / makes  egg = (cookies * egg) / makes  vanilla = (cookies * vanilla) / makes    print("You need "   str(round(flour,2))    " cups of flour, "   str(round(baking_soda,2))    " teaspoons of baking soda, "   str(round(baking_powder,2))    " teaspoons of baking powder, "   str(round(butter,2))    " cups of butter, "  str(round(sugar,2))    " cups of sugar, "   str(round(egg,2))    " eggs and "   str(round(vanilla,2))    " teaspoons of vanilla.")  break  

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

1. Ваш второй while цикл также может быть if оператором без break конца. На самом деле, поскольку вы выходите из первого while цикла, если ваши условия не выполнены, я не думаю, что вам нужны какие-либо условия для второй части.

Ответ №2:

У вас есть правильные идеи, но вам нужно думать в терминах потока вашего цикла. Запрашивать ввод для пользователя всегда сложно, вы всегда хотите попытаться проверить ввод, прежде чем выполнять какие-либо вычисления или работу.

Есть несколько вещей, которые вы, кажется, поняли, о которых вам нужно спросить хотя бы один раз. Вы можете сделать все это в одном цикле, как показано ниже.

Я в основном создаю бесконечный цикл, который остановится только тогда, когда вы ошибетесь 5 раз. Обратите внимание, что, если пользователь не сделает это правильно хотя бы один раз, цикл не перейдет к вычислению. Обратите внимание, что в реальном мире вы предоставили бы пользователю возможность уйти по своему желанию. Попробуйте реализовать это таким образом , чтобы, если пользователь введет письмо q , программа завершилась.

Имейте в виду, что я оставил вам небольшую ошибку для исправления. Если вы сможете решить эту проблему, вы получите ручку циклов. Попробуйте ввести 2 файла cookie, а затем 48 файлов cookie. Посмотрите, как число не имеет смысла, есть несколько способов решить эту проблему, но главное-понять, почему оно становится неправильным.

 flour = 2.75 baking_soda = 1 baking_powder = 0.5 butter = 1 sugar = 1.5 egg = 1 vanilla = 1 makes = 48  count = 0  while (True):  cookies = float(input('Enter number of cookies: '))    if (cookies lt; 1 or cookies gt; 500):  print('Invalid response, the number must be between 1 and 500')  count  = 1    if count gt; 4:  print("I will now close.")  break   continue    flour = (cookies * flour) / makes  baking_soda = (cookies * baking_soda) / makes  baking_powder = (cookies * baking_powder) / makes  butter = (cookies * butter) / makes  sugar = (cookies * sugar) / makes  egg = (cookies * egg) / makes  vanilla = (cookies * vanilla) / makes    print("You need "   str(round(flour,2))    " cups of flour, "   str(round(baking_soda,2))    " teaspoons of baking soda, "   str(round(baking_powder,2))    " teaspoons of baking powder, "   str(round(butter,2))    " cups of butter, "  str(round(sugar,2))    " cups of sugar, "   str(round(egg,2))    " eggs and "   str(round(vanilla,2))    " teaspoons of vanilla.")