2017-05-27 32 views
0

我应该编码的程序要求用户输入(可以是小数或不是),然后该函数应该忽略小数点后的任何数字并计数整数中有多少个数字是偶数。到目前为止,我所做的(我甚至不知道这是否是解决问题的最佳或正确方法)是让用户输入一个字符串,而不是一个整数或浮点数,然后找到小数点并分配这个新的数字到一个新的变量。 我遇到的麻烦是循环每个单独的数字,以确定它是否平均。它不会允许我在循环之前将其转换为整数,因为它表示整数不能被迭代,并且当我在循环内执行时,它也会给我一个错误。评估整数内的单个数字以确定偶数

digit_input=(input("Enter a number:")) 

def digit_count(digit_input): 
    i = 0 
    even_count = 0 
    start = digit_input.find(".", i) 
    new_num=(digit_input[:start]) 
    while i < len(new_num): 
     new=int(new_num[i]) 
     if new % 2 == 0: 
     even_count += 1 
     return even_count 
     else: 
     break 
     i+=1 

print(digit_count(digit_input)) 

我现在所告诉我的第一个整数是否是偶数。但是,例如,如果我输入222,它告诉我只有一个偶数整数

*****如果有更好的方法可以随意告诉我。我是python的新手,这是我能想到的唯一方法。

+0

难道你不能直接将输入转换为整数而不是处理小数点? – ForceBru

+0

部分提示要求程序只处理小数点前的数字。如果我立即将其转换为整数,我个人不知道该怎么做。如果你确实请告诉我,所以我可以学习,因为我是新的python – Nora

回答

2

除了确实有更快或更优雅的方法来做到这一点,以下更改将修复您的代码。第一偶数位后,不要返回,继续计数:

while i < len(new_num): 
    new = int(new_num[i]) 
    if new % 2 == 0: 
    even_count += 1 # do not return meaningless count now! 
    # do not break otherwise, keep counting 
    i += 1 
return even_count # but return count after finishing counting 

考虑,例如,这一个班轮:

def digit_count(digit_input): 
    return sum(1 for d in s.split('.', 1)[0] if not int(d) % 2) 
    # or with a little type coercing trickery and purely string ops: 
    # return sum(d in '02468' for d in s.split('.', 1)[0]) 
+0

我的意思是我确定有更好的方法,但我不知道如何去做。如果你能指出我的方向是正确的(或更好的),那将是非常棒的。 – Nora

+0

@NouraAsrar新增了一个较短的解决方案 – schwobaseggl

+0

谢谢!但是它怎么说int()与基数为10的无效文字:'a' – Nora

0

在一个班轮你可以这样做

n_even_before_decimal = len(list(x for x in digit_input.split('.')[0] if int(x)%2 == 0)) 

此代码假定您有用户输入的数字,在digit_input变量中有一个小数点作为字符串

说明

list函数中的代码只是遍历'。'之前的所有字符。 (表示为split函数的[0])将它们转换为ints并检查它们是否均匀。 它将它们全部保存到列表中并计算最后的长度。