#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.")