python - 为什么这个反转数字的代码会给出“inf”作为输出?
问题描述
def reverse(num):
b = 0
while num > 0:
b = b * 10 + num % 10
num = num / 10
return b
n = int(input("num: "))
print(reverse(n))
当一个数字作为参数传递时,为什么输出为“inf”?
解决方案
首先看看你可以在浮点变量中“存储”的最大数量是多少。
>>> sys.float_info.max
1.7976931348623157e+308
当你在 while 循环中迭代时,你增加b
和减少num
.
b
越来越大(见底部,b
循环打印)。同时也在num
下降,并在某个点达到 0,这导致 while 循环(num 不 > 0)中断。
num is2
b=2, num=0.2
b=20.2, num=0.02
b=202.02, num=0.002
...
b=2.0202020202020194e+306, num=2.000000000000004e-307
b=2.0202020202020194e+307, num=2.0000000000000043e-308
b=inf, num=2.000000000000004e-309
b=inf, num=2e-310
...
b=inf, num=2e-322
b=inf, num=2e-323
b=inf, num=0.0
当它达到最大浮点值时 -1.7976931348623157e+308
它变成inf
. 之后,将发生更多的 while 循环迭代。当num
变小(< 2e-323)以至于 Python 解释为 0 时,循环将结束,因为不满足 while 条件。
推荐阅读
- regex - 正则表达式不匹配字符串中的确切单词
- java - 我在构建应用程序时在 android studio 中遇到了 Android 资源链接失败错误。我不知道如何解决这个问题。我是 Android Studio 的新手
- javascript - 仅当屏幕宽度> 1250px时如何执行脚本
- flutter - DropdownButtonFormField 导致 RenderFlex 溢出
- flutter - 如何在颤振中集成 facebook 登录?
- powershell - 即使加载程序集,SMO Powershell 也会损坏
- r - 如何在 R 中读取 SharePoint 列表(本地)
- python - 用户输入以使用 python 在字典中显示某些值
- haskell - Haskell async:在 withAsync 中使用不同类型的 Monad
- fastapi - 在 GET 请求中使用 pydantic 验证器