【问题标题】:Why does my count is coming 1 instead calculating all the digits in the number in Python?为什么我的计数是 1 而不是计算 Python 中数字中的所有数字?
【发布时间】:2022-11-26 21:07:26
【问题描述】:
我正在尝试计算随机数中的位数,例如数字 5675,我期望计数值 4 作为输出,但它返回的不是那个,而是 1。我试图在 while 循环中编写逻辑直到条件满足。
下面是我的代码。
class Solution(object):
def calculate(self, num):
count_no = 0
while num > 0:
num = num / 10
count_no += 1
return count_no
if __name__ == "__main__":
p = Solution()
no = 5675
print(p.calculate(no))
【问题讨论】:
标签:
python
while-loop
division
【解决方案1】:
您的逻辑是正确的,但您将 return count_no 放在 while 循环中。
所以它会在第一次迭代中返回,并且不会继续到循环结束。
做这个:
def calculate(self, num):
count_no = 0
while num > 0:
num = num / 10
count_no += 1
return count_no
查看this link 了解 python 中的块。
【解决方案2】:
您的代码中有多个错误。
- Mehrdad Pedramfar 所说的。您在第一次循环迭代中返回,而您应该只在退出循环后返回。
- 查看每次迭代中 num 的值。如果将
print(num) 添加到循环中,您会看到类似
5675
567.5
56.75
5.675
.5675
不是你所期望的,对吧?那是因为您使用的是真正的除法运算符 (/) 而不是整数除法运算符 (//)
- 这堂课有什么意义?如果您不需要课程,请不要使用课程。此外,调用方法
calculate 也很糟糕。将其命名为number_of_digits。
因为这是一项学校作业,所以我把它们放在一起留给你。
【解决方案3】:
您的解决方案的问题是 while 循环内的返回,这样 counto_no 的值在第一次迭代时返回,该值始终为 1。
另一个解决方案可能是这样的:
def countDigit(self,num:int) -> int:
return len(str(num))