【问题标题】:how to resolve this "inf" problem with python code如何用 python 代码解决这个 \"inf\" 问题
【发布时间】:2022-11-25 04:16:58
【问题描述】:

我对这个用于反转数字的 python 代码有疑问像 Nb = 358 ---> inv = 853不过最终我收到“inf”消息来自prog ,它在C语言中运行正常

def envers(Nb):
 inv = 0
 cond = True
 while cond:
    s = Nb % 10
    inv = (inv*10)+ s
    Nb = Nb/10
    if Nb == 0:
        cond = False
 return inv

data = int(input("give num"))
res = envers(data)
print(res)

【问题讨论】:

  • 这可能是由于浮点数 / 而不是您所期望的整数 // 除法

标签: python


【解决方案1】:

这很有可能很多通过字符串操作更容易做到,它具有友好和简单的语法(这是选择使用 Python 的主要原因)

>>> int(input("enter a number to reverse: ")[::-1])
enter a number to reverse: 1234
4321

这是如何工作的

  • input() 返回一个字符串
  • 字符串是可迭代的,[::-1]用于反转它
  • 最终转换为int

添加错误检查(例如,以确保您确实收到了一个号码)

【讨论】:

    【解决方案2】:

    当你设置

    Nb = Nb / 10

    Nb 变成了一个浮点数(比如说 1 -> 0.1)并且能够一直被分割直到达到一定的限度。

    到那时,您的 inv 值将达到 python 的限制并变为“inf”。

    将此行替换为

    Nb = Nb // 10

    使用 Python 的内置整数除法可以解决这个问题。

    【讨论】:

      【解决方案3】:

      这是一个简单的实现:

      def envers(Nb):
          out = 0
          while Nb>0:
              Nb, r = divmod(Nb, 10)
              out = 10*out + r
          return out
      
      
      envers(1234)
      # 4321
      
      envers(358)
      # 853
      
      envers(1020)
      # 201
      

      没有divmod

      def envers(Nb):
          out = 0
          while Nb>0:
              r = Nb % 10
              Nb //= 10
              out = 10*out + r
          return out
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-03
        • 1970-01-01
        相关资源
        最近更新 更多