2017-05-27 67 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並檢查它們是否均勻。 它將它們全部保存到列表中並計算最後的長度。