Python:在ForLoop中调用函数

Python:在ForLoop中调用函数,python,function,loops,for-loop,Python,Function,Loops,For Loop,我应该回答特定的问题,给出两个不同的列表,一个数字列表和一个单词列表,使用函数回答上述问题 我目前遇到两个问题。关于数字列表,我必须找到列表的长度,偶数,大于100的数字,然后在列表中的每个数字上加30,然后打印出答案 首先,我有以下功能来回答这些问题: def print_list(*args): for item in args: print item def lenList(listName): return len(listName) def numE

我应该回答特定的问题,给出两个不同的列表,一个数字列表和一个单词列表,使用函数回答上述问题

我目前遇到两个问题。关于数字列表,我必须找到列表的长度,偶数,大于100的数字,然后在列表中的每个数字上加30,然后打印出答案

首先,我有以下功能来回答这些问题:

def print_list(*args):
    for item in args:
        print item

def lenList(listName):
    return len(listName)

def numEven(num):
    if num%2==0:
        print "%d is even." % num

def moreThan100(num):
    if num>100:
        print "%d is greater than 100." % num

def adding30(num):
    print "If you add 30 to %d, you get: %d" % (num,num+30)
然后我将这些函数嵌套在一个函数中:

def leWork():
    numbers=[56,3,9,1002,33,66,789,9001,999,222,82,71,5,3]

    numLength=lenList(numbers)
    print "The length of the numbers[] is %d" % numLength

    for num in numbers:
        numEven(num), 
        moreThan100(num), 
        adding30(num)
leWork()
我的问题是,在运行代码时,我没有得到一个有组织的列表,先列出偶数,然后列出大于100的数,然后再列出加上30后返回的数。它们就像这样散落着:

The length of the numbers[] is 14
56 is even.
If you add 30 to 56, you get: 86
If you add 30 to 3, you get: 33
If you add 30 to 9, you get: 39
1002 is even.
1002 is greater than 100.
If you add 30 to 1002, you get: 1032
If you add 30 to 33, you get: 63
66 is even.
If you add 30 to 66, you get: 96
789 is greater than 100.
If you add 30 to 789, you get: 819
9001 is greater than 100.
If you add 30 to 9001, you get: 9031
999 is greater than 100.
If you add 30 to 999, you get: 1029
222 is even.
222 is greater than 100.
If you add 30 to 222, you get: 252
82 is even.
If you add 30 to 82, you get: 112
If you add 30 to 71, you get: 101
If you add 30 to 5, you get: 35
If you add 30 to 3, you get: 33

我该如何把它们放在一个更有条理的列表中?

如果您想先陈述所有偶数,然后陈述所有大于100的数字,等等,最简单的解决方案是先循环并找到所有偶数,然后循环并找到大数字,等等。如下所示:

for num in numbers:
    numEven(num), 
for num in numbers:
    moreThan100(num), 
for num in numbers:
    adding30(num)
然而,一个更好的解决方案是将函数更改为返回值,而不是仅仅打印一些内容,并存储这些返回值,然后您就可以按任何方式打印它们,比如说,通过使用专门编写的print_list函数。例如:

def numEven(num):
    return num%2==0

def moreThan100(num):
    return num>100

def adding30(num):
    return num+30

evens, bigs, plus30s = [], [], []
for num in numbers:
    if numEven(num):
        evens.append("%d is even." % num)
    if moreThan100(num):
        bigs.append("%d is greater than 100." % num)
    plus30 = adding30(num)
    plus30s.append("If you add 30 to %d, you get: %d" % (num,plus30))

print_list(*events)
print_list(*bigs)
print_list(*plus30s)

我不会在你的函数中添加任何打印语句。相反,您的所有函数都可以返回它们的数字,然后有一个负责所有打印的最终函数。然后,您可以在最后一个功能中自定义所有打印,这样就不那么麻烦了


你能详细解释一下你所说的更有条理是什么意思吗?

这是你如何迭代你的号码,以纠正错误:

for num in numbers:
    numEven(num)

for num in numbers:
    moreThan100(num)

for num in numbers:
    adding30(num)

您正在迭代数字列表,对于每个数字,您都在调用所有函数。为了获得你想要的,你可以考虑做< /P>
numbers=[56,3,9,1002,33,66,789,9001,999,222,82,71,5,3]
func_list = [numEven,moreThan100, adding30]

for f in func_list:
    map(f,numbers)

如果你把30加到56,你会得到:86如果你把30加到3,你会得到:33如果你把30加到9,你会得到:39…等等56是偶数1002是偶数…等等999大于100 1002大于100…等等,不要把所有答案都置乱。这是评论,不是答案。谢谢!这帮了大忙。为了演示多种方法,我将其放在代码中,并将函数映射也放在其中。我的老师喜欢看到我们提出的不同的解决方案。@RyanRoss:只要确保你真正理解不同的解决方案,并且自己也能做同样的事情。谢谢!帮了很多忙!