Python:在For循环中调用函数

时间:2014-09-30 23:33:59

标签: python function loops for-loop

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

我目前遇到两个问题。关于数字列表,我必须找到列表的长度,偶数,数字大于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

我将如何在更有条理的名单中制作它们?

4 个答案:

答案 0 :(得分:1)

如果您想首先说明所有偶数,请说明所有数字> 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)

答案 1 :(得分:0)

这就是你如何迭代你的号码,只是“修复”错误:

for num in numbers:
    numEven(num)

for num in numbers:
    moreThan100(num)

for num in numbers:
    adding30(num)

答案 2 :(得分:0)

您正在遍历数字列表,并为您调用所有函数的每个数字。要获得你想要的东西你可能需要考虑做

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)

答案 3 :(得分:-1)

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

你能详细说明你的意思更有条理吗?