integer = int(raw_input("Enter a ten-digit number please: "))
zero_count = 0
even_count = 0
odd_count = 0
def digit_count(x):
while x > 0:
if x % 10 == 0:
zero_count += 1
elif x % 2 == 0:
even_count += 1
else:
odd_count += 1
x / 10
print zero_count
print even_count
print odd_count
print digit_count(integer)
用户输入一个十位整数,然后输出应该是奇数,偶数和零数字的数字。当我运行它时,目前它只是让我输入一个整数,然后什么都不做。
答案 0 :(得分:1)
正如其他人提到的那样,它应该是x = x / 10
,但您还需要制作计数器变量global
。
此外,
print digit_count(integer)
将显示None
。由于在digit_count()
中执行零,奇数和偶数计数的打印,因此您不需要额外的print
。
另一种方法是将Counter
应用于映射输入:
from collections import Counter
s = raw_input("Enter a ten-digit number please: ")
c = Counter('zero' if d == '0' else ('odd' if int(d)%2 else 'even') for d in s)
print "zeros {}, odd {}, even {}".format(c['zero'], c['odd'], c['even'])
答案 1 :(得分:0)
您的代码存在一些缺陷:
integer = int(raw_input("Enter a ten-digit number please: "))
zero_count = 0
even_count = 0
odd_count = 0
def digit_count(x):
global zero_count,even_count,odd_count
while x > 0:
num = x%10 # store the last digit of x
if num % 10 == 0:
zero_count += 1
elif num % 2 == 0:
even_count += 1
else:
odd_count += 1
x /= 10
digit_count(integer) # you need to call the function 1st
print zero_count
print even_count
print odd_count
答案 2 :(得分:0)
这是因为在'while'的每次迭代后你没有重新分配x
值。
只需将x/10
(不做任何事情)更改为x = x/10
同时强>
您的声明:
zero_count = 0
even_count = 0
odd_count = 0
您的功能 之外。因此,除非您:
,否则您将收到“在分配前引用”错误nonlocal
函数中将它们声明为digit_count
。由nonlocal zero_count
nonlocal even_count
nonlocal odd_count
如果您使用的是Python 2,则需要使用“全局”而不是非本地。
或者
出于特定目的,我会说在函数中声明和初始化它们的第二个选项更有意义。您只需要在函数内部使用它们。
答案 3 :(得分:0)
您的代码中存在范围问题。零,偶数和奇数计数是全局变量,它们在函数内被修改。而且,你在x = x / 10声明中错过了一个作业。
我想强调一种替代方法,而不是通过除以10来处理大整数。首先将字符串转换为单个数字列表,然后通过digit_count函数处理列表:
def digit_count(digits):
""" Takes a list of single digits and returns the
count of zeros, evens and odds
"""
zero_count = 0
even_count = 0
odd_count = 0
for i in digits:
if i == 0:
zero_count += 1
elif i % 2 == 0:
even_count += 1
else:
odd_count += 1
return zero_count, even_count, odd_count
inp = raw_input("Enter a ten-digit number please: ")
digits = [int(i) for i in inp] # see comment at the bottom of the answer
zero_count, even_count, odd_count = digit_count(digits)
print('zero_count: %d' % zero_count)
print('even_count: %d' % even_count)
print('odd_count: %d' % odd_count)
我的代码告诫它会计算前导零。虽然你的方法不会计算前导零。 要将完全行为作为代码,请替换
行digits = [int(i) for i in inp]
带
digits = [int(i) for i in str(int(inp))]
答案 4 :(得分:0)
通过collections.Counter
代码:
from collections import Counter
digit_counter = Counter(map(lambda x: int(x), raw_input("Enter a ten-digit number please: ")))
print "Zero count", digit_counter[0]
print "Even count", digit_counter[2]+digit_counter[4]+digit_counter[6]+digit_counter[8]
print "Odd count", digit_counter[1]+digit_counter[3]+digit_counter[5]+digit_counter[7]+digit_counter[9]
输出:
python test.py
Enter a ten-digit number please: 0112203344
Zero count 2
Even count 4
Odd count 4
答案 5 :(得分:0)
使用Python 3,您可以做的更好。
from collections import Counter
#s = '03246'
s = str(input ("Enter number --> "))
c = Counter('zero' if d == '0' else ('odd' if int(d)%2 else 'even') for d in s)
print("Zero --> " ,c['zero'], "Odd--> ", c['odd'],"Even-->", c['even'])