2014-09-30 2 views
0

Я должен отвечать на конкретные вопросы, учитывая два разных списка, список чисел и список слов, используя функции для ответа на указанные вопросы.Python: вызывающие функции внутри ForLoop

В настоящее время я сталкиваюсь с двумя проблемами. Что касается списка номеров, я должен найти длину списка, четные числа, числа которых больше 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() 

Моя проблема при запуске кода, я не» t получить организованный список, в котором указаны четные числа, затем цифры> 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 

Как именно я собираюсь сделать их в более организованном списке?

ответ

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) 
+0

Спасибо! Это очень помогло. Чтобы продемонстрировать несколько способов, я помещаю это в код, а также помещаю карту функций внутрь. Мой учитель любит видеть различные решения, которые мы придумали. –

+0

@ RyanRoss: Просто убедитесь, что вы действительно понимаете разные решения и можете делать то же самое самостоятельно. – abarnert

-1

Я бы не поставил никаких утверждений печати в ваши функции. Скорее всего, все ваши функции могут возвращать их номера, а затем иметь окончательную функцию, которая отвечает за всю печать. Затем вы можете настроить печать в этой последней функции, и это будет менее громоздким.

Можете ли вы подробнее рассказать о том, что вы подразумеваете под более организованным?

+0

Вроде бы печатать как: 'Если добавить 30 до 56, вы получите: 86 Если добавить 30 к 3, вы получите: 33 Если добавить 30 к 9, вы получите: 39 ... и т.д. 56 равно 1002 равно ... и т.д. 999 больше 100 1002 больше 100 ... и т. Д. Не все ответы скремблированы. –

+0

Это комментарий, а не ответ. – abarnert

0

Это, как вы итерацию свой номер, просто «исправить» ошибку:

for num in numbers: 
    numEven(num) 

for num in numbers: 
    moreThan100(num) 

for num in numbers: 
    adding30(num) 
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) 
+0

Спасибо! Помогли! –

Смежные вопросы