- 在Python中工作
- 收集用户输入
- 输入需要非负
- 在程序的另一部分成功使用了While条件
- 但现在不明白为什么这个捕获有效输入的测试失败了。
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 循环,并附加了无效输入。
任何帮助都是值得赞赏的。
问题在于你将负浮点数转换为整数的方式。让我们逐步分解一下你的代码发生了什么:
-
输入:
你输入
-0.8
作为xyz_string
。 -
转换为浮点数:
float(xyz_string)
正确地将其转换为-0.8
。 -
转换为整数:
这里的问题就出现了。
int(-0.8)
并没有像你预期的那样返回-1
,而是返回了0
。这是因为int()
函数 通过向 0 取整 将浮点数转换为整数。 -
While 条件:
由于
xyz
现在是0
,而0
不小于0
,因此 while 循环的条件评估为False
,导致循环结束。
这就是为什么你的代码没有按预期捕获负输入的原因。
解决方案:
要解决此问题,你应该 在将输入转换为整数之前 检查该值是否为负数。以下是如何修改你的代码的方法:
print("需要多少克 xyz?")
xyz_string = input()
xyz = float(xyz_string)
while xyz < 0:
print("抱歉,该数量必须为非负数。请重试。")
print("需要多少克 xyz?")
xyz_string = input()
xyz = float(xyz_string)
xyz = int(xyz) # 仅当它是非负数时才转换为整数
all_xyz.append(xyz)
通过这种更改,你首先检查浮点数
xyz
是否为负数。如果是,则循环继续。如果不是,则你知道它是一个非负数,可以安全地将其转换为整数并添加到你的列表中。