2015-09-17 68 views
1

我想製作一個腳本,要求用戶輸入任意數量的數字,用逗號分隔,然後返回哪些數字是偶數。 我已經設法創建一個腳本,它只是用一個數字。但現在我試圖讓它做數字無限量並打印甚至是那些我想製作一個腳本來識別偶數

這裏是我到目前爲止有:

y = raw_input ('please enter a list of numbers separated by commas\n').split(',') 
z = [int(x.strip()) for x in y] 
len(z) 
for i in len(z): 
    if i%2 == 0: 
     print i,'is even' 
     i == i+1 
    else: 
     i == i+1 

我知道它的循環這就是問題所在。我不知道如何讓循環遍歷我的列表並對列表中的每個數字執行模運算符。

+0

您如何看待聲明'LEN(Z)'是完成? – TigerhawkT3

+0

@ReblochonMasque這個問題與這個問題有什麼關係?那裏沒有'for'循環。 – Barmar

回答

0

您可以隨時使用位運算符來測試,如果最後一位是0或不

>>> 2 & 1 
0 
>>> 3 & 1 
1 
>>> 5&1 
1 
>>> 6&1 
0 

,你可以做這樣的事情

# suppose your list is this 
lis1 = [1,2,3,4,5,6,7,8] 
filter(lambda x: x&1 == 0, lis1) 
# output -- [2,4,6,8] 
0

您正在初始化您的for循環不正確。請嘗試以下

for i in z: 
    if i % 2 == 0: 
    print i,'is even'  

不知道你的意圖是用遞增i,但我離開它爲簡單起見...

0

您正試圖遍歷一個整數,這是無效的。試試這個:

y = raw_input ('please enter a list of numbers separated by commas\n').split(',') 
z = [int(x.strip()) for x in y] 
for i in z: 
    if i%2 == 0: 
     print i,'is even' 

for循環已經結束了元素列表中的迭代,而不是試圖遍歷其長度。這是遍歷序列中元素的最多Pythonic方式。爲了進行比較,您可以使用如下索引:

for i in range(len(z)): 
    if z[i]%2 == 0: 
     print i,'is even' 

但前者是首選,也更有效。

2

z是你的列表;只是迭代它。

y = raw_input('...').split(',') 
z = [int(x) for x in y] # int() is smart enough to deal with extra whitespace 
for i in z: 
    if i % 2 == 0: 
     print i, 'is even' 

有沒有需要增加i(也i = i + 1,不i == i + 1),爲i通過每次循環設置爲一個新值從z

+0

謝謝大家的幫助,它的工作!我現在明白我做錯了什麼。 :) – Rooney

1

所以,更好的方法來做到這一點是:

z = [int(x) for x in y if int(x)%2 == 0] 

現在你的列表只有偶數。

0

我會考慮使用生成器函數。這是一個例子。從你的代碼看來,你似乎在使用Python2.x。如果不是這種情況,並且使用的是Python3.x,您可以使用內置的map功能,而不是itertools.imap

from itertools import imap 

def even_from_str(s): 
    for even in imap(lambda x: x%2 == 0, imap(int, s.split(',')): 
     yield even 

nums = raw_input('please enter a list of numbers separated by commas\n') 
print list(even_from_str(nums)) 
相關問題