首页 > 编程问答 >在Python中,为什么这个负浮点数能够通过非负while循环测试条件?

在Python中,为什么这个负浮点数能够通过非负while循环测试条件?

时间:2024-07-31 13:31:19浏览次数:9  
标签:python validation input while-loop

  • 在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 循环,并附加了无效输入。

任何帮助都是值得赞赏的。


问题在于你将负浮点数转换为整数的方式。让我们逐步分解一下你的代码发生了什么:

  1. 输入: 你输入 -0.8 作为 xyz_string
  2. 转换为浮点数: float(xyz_string) 正确地将其转换为 -0.8
  3. 转换为整数: 这里的问题就出现了。 int(-0.8) 并没有像你预期的那样返回 -1 ,而是返回了 0 。这是因为 int() 函数 通过向 0 取整 将浮点数转换为整数。
  4. 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 是否为负数。如果是,则循环继续。如果不是,则你知道它是一个非负数,可以安全地将其转换为整数并添加到你的列表中。

标签:python,validation,input,while-loop
From: 78814504

相关文章