我想创建一个脚本,要求用户输入任意数量的数字,用逗号分隔,然后返回哪些是偶数。 我设法创建了一个只用一个数字来完成它的脚本。但现在我试图让它做无限数量的数字,只打印偶数
这是我到目前为止所做的:
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 :(得分: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
)。通过循环。
答案 1 :(得分:1)
因此,更好的方法是:
z = [int(x) for x in y if int(x)%2 == 0]
现在你的清单只有偶数。
答案 2 :(得分:0)
您正在错误地初始化for循环。请尝试以下
imageView.image = [info objectForKey:UIImagePickerControllerEditedImage];
imageView.contentMode = UIViewContentModeScaleAspectFit;
不确定你递增for i in z:
if i % 2 == 0:
print i,'is even'
的目的是什么,但为了简单起见,我把它留了出来......
答案 3 :(得分: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'
但前者是首选,也更有效。
答案 4 :(得分:0)
将您的for语句更改为for i in z
答案 5 :(得分: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))
答案 6 :(得分: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]