为什么这个程序没有正确找到数字频率?
Why is this program not finding the digit frequency correctly?
a = int(input())
digit = 0
count=0
temp = 0
for i in range(0,10):
temp=a
count = 0
while(temp>0):
digit = temp%10
if digit == i:
count+=1
temp=temp/10
if count>0:
print(f'{i}\t{count}')
此程序的输出始终显示为最后一位数字的频率为 1,不给出其他数字的频率。
就像我的输入是 1991,
它的输出将是
1 1
我用更好的版本重写了你的代码。
在我的代码中,我创建了一个字典来存储每个数字的出现次数: 1. 查找该数字是否存在。是的,然后创建一个计数为 1 的字典;否则向现有字典添加 1 个值
a = input("Enter your number:")
str1 = str(a)
unique_number = {}
for each in str1:
if(each not in unique_number):
unique_number[each] = 1;
else:
unique_number[each] += 1;
for each in unique_number:
print(unique_number[each])
您只有一个计数器,但可能有很多值,而且您为每个数字重置了它。最后,双循环如果不需要且效率低下。
这是一个基于相同逻辑的简单工作代码。我在这里使用 collections.Counter
来保存计数,并使用 divmod
的单个循环来计算带余数的整数除法。
a=1991
from collections import Counter
c = Counter()
while a>0:
a,r = divmod(a, 10)
print(a,r)
c[r]+=1
print(c)
输出:
Counter({1: 2, 9: 2})
是因为temp = temp/10
.
行
举个例子,1991
。这个数字除以 10 等于 199.1
。在下一次迭代中取mod(%
),结果是9.099999999999994
,不等于任何数字。
要修复它,您可以 (i) 将除法解析为 int 为 temp = int(temp/10)
,(ii) 解析将数字转换为 digit = int(temp % 10)
或 (iii) 甚至更好,执行整数除法 temp//10
,如 @mozway 所述。
然后,您将获得预期的输出:
1 2
9 2
您的代码中的问题是 temp = temp/10
,在 Python 中除法导致浮点值,其中值始终 > 0。使用 temp = int(temp/10)
这将修复您的代码并检查提到的其他方法以上。
a = int(input())
digit = 0
count=0
temp = 0
for i in range(0,10):
temp=a
count = 0
while(temp>0):
digit = temp%10
if digit == i:
count+=1
temp=temp/10
if count>0:
print(f'{i}\t{count}')
此程序的输出始终显示为最后一位数字的频率为 1,不给出其他数字的频率。 就像我的输入是 1991, 它的输出将是
1 1
我用更好的版本重写了你的代码。
在我的代码中,我创建了一个字典来存储每个数字的出现次数: 1. 查找该数字是否存在。是的,然后创建一个计数为 1 的字典;否则向现有字典添加 1 个值
a = input("Enter your number:")
str1 = str(a)
unique_number = {}
for each in str1:
if(each not in unique_number):
unique_number[each] = 1;
else:
unique_number[each] += 1;
for each in unique_number:
print(unique_number[each])
您只有一个计数器,但可能有很多值,而且您为每个数字重置了它。最后,双循环如果不需要且效率低下。
这是一个基于相同逻辑的简单工作代码。我在这里使用 collections.Counter
来保存计数,并使用 divmod
的单个循环来计算带余数的整数除法。
a=1991
from collections import Counter
c = Counter()
while a>0:
a,r = divmod(a, 10)
print(a,r)
c[r]+=1
print(c)
输出:
Counter({1: 2, 9: 2})
是因为temp = temp/10
.
举个例子,1991
。这个数字除以 10 等于 199.1
。在下一次迭代中取mod(%
),结果是9.099999999999994
,不等于任何数字。
要修复它,您可以 (i) 将除法解析为 int 为 temp = int(temp/10)
,(ii) 解析将数字转换为 digit = int(temp % 10)
或 (iii) 甚至更好,执行整数除法 temp//10
,如 @mozway 所述。
然后,您将获得预期的输出:
1 2
9 2
您的代码中的问题是 temp = temp/10
,在 Python 中除法导致浮点值,其中值始终 > 0。使用 temp = int(temp/10)
这将修复您的代码并检查提到的其他方法以上。