在Python中计算10位数字中的零,赔率和平均数?

时间:2015-01-02 04:33:58

标签: python python-2.7

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)

用户输入一个十位整数,然后输出应该是奇数,偶数和零数字的数字。当我运行它时,目前它只是让我输入一个整数,然后什么都不做。

6 个答案:

答案 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

您的功能 之外。因此,除非您:

,否则您将收到“在分配前引用”错误
  1. nonlocal函数中将它们声明为digit_count。由
  2. nonlocal zero_count
    nonlocal even_count
    nonlocal odd_count
    

    如果您使用的是Python 2,则需要使用“全局”而不是非本地。

    或者

    1. 初始化内部您的功能。
    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

  1. 从用户输入创建Counter字典。
  2. 我们知道2,4,6,8是偶数,3,5,7,9是奇数。因此,添加所有偶数的值以获得偶数和所有奇数位以获得奇数。
  3. 代码:

    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'])