print("How many grams of xyz are required?")
xyz_string = input()
xyz = int(float(xyz_string))
while xyz < 0:
print("Sorry, the amount must be a non-negative number. Please try again.")
print("How many grams of xyz are required")
xyz_string = input()
xyz = int(float(xyz_string))
all_xyz.append(xyz)
При тестировании я ввел:
-0,8
Я ожидал, что это не выдержит неотрицательный тест. Но этого не произошло, и недопустимый ввод вышел из цикла While и добавил недопустимый ввод.
Любая помощь приветствуется.
Привет @SuramuthuR all_xyz объявляется в начале программы как all_xyz = []. xyz_string был объявлен дважды для захвата ввода сразу после последнего запроса. Может ли какая-либо из этих проблем быть причиной проблемы?
@SuramuthuR Еще одна вещь, о которой вы, возможно, имеете в виду. Как новичок, я просто пытаюсь заставить программу работать на данном этапе. Когда я смогу заставить его работать, я потрачу больше времени на то, чтобы повысить эффективность своего кода и объединить то, что сейчас делается в нескольких строках, в одну строку.
Такая структура программы, как правило, не рекомендуется, несмотря на то, что она обычно используется в качестве первой попытки решения такого рода проблем — это руководство может помочь вам понять лучшие практики.
@Kojrey, пожалуйста, не думай в другом смысле. Я никогда не отговариваю людей. Просто используйте float(xyz_string)
и попробуйте. Если вы хотите использовать all_xyz.append(xyz)
, вам следует объявить пустой dict. вместо этого используйте print(xyz)
.
Проблема в выражении int(float(xyz_string))
. При этом все ваши числа округляются в сторону нуля, поэтому, если введенное вами число находится в диапазоне от 0 до -1, оно будет округлено до нуля и пройдет проверку.
Чтобы это исправить, просто отложите звонки int
до тех пор, пока не закончите вводить данные:
print("How many grams of xyz are required?")
xyz_string = input()
xyz = float(xyz_string)
while xyz < 0:
print("Sorry, the amount must be a non-negative number. Please try again.")
print("How many grams of xyz are required")
xyz_string = input()
xyz = float(xyz_string)
all_xyz.append(int(xyz))
Спасибо, Андрей, это исправили, и я понимаю здесь логику. Спасибо. Сейчас у меня будет небольшой перерыв, но по возвращении я прочитаю руководство, на которое вы указали, чтобы улучшить понимание структуры программы.
Я точно не знаю, что не так в вашем коде, он беспорядочный и сложный, поэтому лучший вариант — упростить его вот так:
carbs_str = "How many grams of carbohydrates are required?"
carbs = float(input(carbs_str))
while carbs < 0:
print("Sorry, the amount must be a non-negative number.
Please try again.")
carbs = float(input(carbs_str))
Если в исходном коде явно определена переменная с именем whatever_string
, вероятно, им понадобится использовать эту строку позже. Кажется, они также хотят в какой-то момент преобразовать входные данные в int
.
@IgnatiusReilly это популярная задача для начинающих программистов. Если полный код не был опубликован, мы должны предположить обратное.
print("Sorry, the amount must be a non-negative number. ^ SyntaxError: unterminated string literal (detected at line 4)
— обратите внимание, что в ответе от вас ожидается указание действующего кода.
Также обратите внимание, что SO не одобряет просьбу о голосовании и тому подобное.
где all_xyz? Почему xyz_string объявлен дважды?