Python как остановить добавление в список после достижения определенных критериев

#python #python-3.x #loops #if-statement #while-loop

#python #python-3.x #циклы #if-оператор #цикл while

Вопрос:

Я делаю проект, в котором пользователь должен ввести значение. Цикл должен завершиться, если пользователь вводит значение более 300 в течение 3 раз. Если значение пользовательского ключа меньше 300, должно быть выдано предупреждающее сообщение. И еще один критерий заключается в том, что мне нужно разрешить пользователю выйти из цикла, если пользователь не соответствует приведенному выше условию. На данный момент я пытался сделать это с помощью списка, но мой код, похоже, не учитывает количество входных данных.

 list1 = list()
counter = 1 
while counter <= 3: 
    ask = float(input("Please enter each of the value: ")) 
    while ask != "":
        list1.append(str(ask))
        ask = float(input("Please enter each of the value: "))
        if ask >= 50:
            counter  = 1 
        else:
            print("Value must be more than 300. If you do not meet the criteria, please press 'enter'. ")
print(list1)
  

Следующий код является моим исходным кодом, который не учитывает минимальное входное значение.

 counter = 1 
while counter <= 3:
    ask = float(input("Please enter each of the value: ")) 
    if ask >= 50:
        counter  = 1 
    else:
        print("Value must be more than 300 ")
  

Я был бы признателен, если кто-нибудь из вас сможет мне помочь.

Ответ №1:

Проблема в том, что ваш внутренний цикл while не может завершиться, поскольку ‘ «»‘ (ваш сигнал выхода) не может быть преобразован в float. Вместо этого это вызовет ValueError. Одним из возможных решений этого было бы попытаться преобразовать входные данные в float и исключить ValueError. Это может выглядеть примерно так.

 list1 = list()
counter = 1
while counter <= 3:
    try:
       ask = float(input("Please enter each of the value: "))
    except ValueError:
       break
    list1.append(str(ask))
    if ask >= 50:
        counter  = 1 
    else:
        print("Value must be more than 300. If you do not meet the criteria, please press 'enter'. ")

print(list1)
  

Ответ №2:

Я думаю, что программа работает не так, как вы хотите, потому что вы выполнили два цикла while: первое условие while — while counter<=3 , ok, но затем вы выполнили другое условие while, которое является ask !="" , поэтому программа будет выполняться внутри этого второго цикла while, пока условие не перестанет выполняться, и первое время не «увидит» изменения счетчика.

Кстати, я думаю, вы можете просто использовать только один цикл while (первый) и написать условие if, которое проверяет значение (> 300).

При попытке преобразовать элемент string в тип float он выдаст ошибку, если значение не может быть приведено к этому типу, вы могли бы использовать блок try-except.

 while counter < 3:
      try:
           ask = float(input("xxxxx")
           if ask >= 50:
               counter  = 1
           else:
               print("xxxxx")
      except ValueError:
           break
print(list1)