【问题标题】:Counting number of digits of input using python使用python计算输入的位数
【发布时间】:2018-05-22 03:25:55
【问题描述】:

我正在尝试计算输入的位数。但是,每当我输入1011 或任何两位数时,输出都是325。为什么它不起作用?

inputnumber = int(input())
countnumber = inputnumber
digitcount = 0
while countnumber > 0:
    digitcount += 1
    countnumber = countnumber/10

print(digitcount) 
# result is 325 when input is 10 or 11

【问题讨论】:

  • 是python 2还是3?
  • 你可以通过其他方式来做到这一点..请参考stackoverflow.com/questions/2189800/…
  • @pstatix 您无需转换为int,然后再转换为strinput() 已经是一个字符串。只需len(input()) 即可。要处理负数,请使用len(str(abs(int(input()))))
  • @Elisha 它是 Python3。看到这个问题来证明它:stackoverflow.com/questions/21316968/…

标签: python python-3.x decimal division digits


【解决方案1】:

你的错误主要发生在这里:

countnumber=countnumber/10

请注意,您打算进行整数除法。 Python 3 中的单斜线除法始终是“浮点”或“实数”除法,必要时会产生浮点值和小数部分。

将其替换为双斜线除法,即整数除法:countnumber = countnumber // 10。在这种情况下,每次进行整数除法时,最右边的数字都会被切掉。

您还必须注意您的输入是否为 0。数字 0 被认为是一位数,而不是零。

【讨论】:

  • 这大部分是正确的,但是用一个斜杠进行整数除法会产生一个浮点数。
  • @chrisz 完成。它现在是一个“浮动”部门。此外,您可以使用len(),但这可能会导致非数字或非整数输出的风险。
  • 如果您想将 0 视为一个数字,请添加 if 语句。
【解决方案2】:

说实话,我不会将那个漂亮的输入转换为 int。

print(len(input())

就足够了。

一个没有人可以抱怨的易于理解的单班轮。

  • 当然,如果负号打扰你喜欢 Wisty said

    len(str(abs(int (v))))
    

    肯定会更安全。

  • 同样,如果您担心像 mulliganaceous said 这样的非数字输入,您最好覆盖这种情况。

    str = input()
    if str.isnumeric():
        print(len(str(abs(v))))
    else:
        print("bad input")
    

【讨论】:

    【解决方案3】:

    原因是在 python 3 中,两个整数相除会产生一个浮点数。可以使用// 运算符修复它:

    number = int(input())
    digits_count = 0
    while number > 0:
        digits_count += 1
        number = number // 10
    

    【讨论】:

      【解决方案4】:

      您必须使用 Python3,逻辑上您的功能是正确的。你只需要改变

      countnumber = countnumber // 10

      因为Python3,//是楼除法,同时/是真除法。

      >>>print(1 / 10)
      0.1
      >>>print(1 // 10)
      0
      

      顺便说一句,正如@chrisz 上面所说,您可以简单地使用 len() 函数来获取输入的位数

      >>>print(len(input())
      

      【讨论】:

      • len(input()) 不会给出负数的正确结果。也不能保证输入是一个数字。
      【解决方案5】:
      num = int(input())
      count = 0
      while num > 0:
        count += 1
        num = num // 10
      print(count)
      

      【讨论】:

      • 虽然此代码块可能会回答 OP 的问题,但如果您解释此代码与问题中的代码有何不同、您已更改的内容、您为什么更改了它以及为什么在不引入其他人的情况下解决了问题。
      猜你喜欢
      • 2014-11-13
      • 1970-01-01
      • 1970-01-01
      • 2018-09-17
      • 2010-11-10
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      相关资源
      最近更新 更多