在 Python 中计算 10 位数字中零、奇数和偶数的数量?
Counting the number of zeroes, odds, and evens in a 10-digit number in Python?
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)
用户输入一个十位整数,然后输出应该是其中的奇数、偶数和零的个数。当我运行它时,目前它只让我输入一个整数,然后什么都不做。
您的代码中存在一些缺陷:
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
那是因为您没有在 'while' 的每次迭代后重新分配 x
值。
只需将无任何作用的 x/10
更改为 x = x/10
还有
您的声明:
zero_count = 0
even_count = 0
odd_count = 0
在您的函数之外。因此,您将收到 'referenced before assignment' 错误,除非您:
- 在您的
digit_count
函数中将它们声明为 nonlocal
。通过
nonlocal zero_count
nonlocal even_count
nonlocal odd_count
如果您正在使用 Python 2,是否需要使用 'global' 而不是非本地。
或
- 在您的函数中初始化它们。
为了您的特定目的,我认为在您的函数中声明和初始化它们的第二种选择更有意义。你只需要在函数内部使用它们。
正如其他人提到的,它应该是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'])
您的代码中存在范围界定问题。零、偶数和奇数是全局变量,它们在函数内被修改。而且,您在语句 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)
我的代码需要注意的是它将计算前导零。虽然您的方法不会计算前导零。
要获得 exact 行为作为您的代码,请替换行
digits = [int(i) for i in inp]
和
digits = [int(i) for i in str(int(inp))]
来自 collections.Counter
- 根据用户输入创建了计数器字典。
- 我们知道2,4,6,8是偶数,3,5,7,9是奇数。因此,将所有偶数位的值相加得到偶数,所有奇数位相加得到奇数。
代码:
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
使用 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'])
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)
用户输入一个十位整数,然后输出应该是其中的奇数、偶数和零的个数。当我运行它时,目前它只让我输入一个整数,然后什么都不做。
您的代码中存在一些缺陷:
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
那是因为您没有在 'while' 的每次迭代后重新分配 x
值。
只需将无任何作用的 x/10
更改为 x = x/10
还有
您的声明:
zero_count = 0
even_count = 0
odd_count = 0
在您的函数之外。因此,您将收到 'referenced before assignment' 错误,除非您:
- 在您的
digit_count
函数中将它们声明为nonlocal
。通过
nonlocal zero_count
nonlocal even_count
nonlocal odd_count
如果您正在使用 Python 2,是否需要使用 'global' 而不是非本地。
或
- 在您的函数中初始化它们。
为了您的特定目的,我认为在您的函数中声明和初始化它们的第二种选择更有意义。你只需要在函数内部使用它们。
正如其他人提到的,它应该是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'])
您的代码中存在范围界定问题。零、偶数和奇数是全局变量,它们在函数内被修改。而且,您在语句 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)
我的代码需要注意的是它将计算前导零。虽然您的方法不会计算前导零。 要获得 exact 行为作为您的代码,请替换行
digits = [int(i) for i in inp]
和
digits = [int(i) for i in str(int(inp))]
来自 collections.Counter
- 根据用户输入创建了计数器字典。
- 我们知道2,4,6,8是偶数,3,5,7,9是奇数。因此,将所有偶数位的值相加得到偶数,所有奇数位相加得到奇数。
代码:
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
使用 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'])