2013-11-30 5 views
1

Мне нужно распечатать элементы списка, чтобы, если элемент 100 или больше, за ним следует новая строка, а если нет, за ним следует пробел.Python-рекурсия с печатью

Это то, что я до сих пор:

def function(list): 
    if list == []: 
     return None 
    elif list[0] >= 100: 
     print(list[0], function(list[1:]), end = '\n') 
    else: 
     print(list[0], function(list[1:]), end = '') 
    return None 

Но когда я пытаюсь список = [2,3,103, 8, 10], Python печатает:

10 None8 None103 None

3 None2 ни

Любые предложения/не помочь?

+0

Проблема в том, что вы также печатаете результаты вызова функции. Поместите рекурсивные вызовы за пределы операторов печати. –

ответ

1

Вы на правильном пути. Это то, что вы хотите:

def function(lst): 
    if not lst: 
     return 
    elif lst[0] >= 100: 
     print(lst[0], end='\n') 
    else: 
     print(lst[0], end=' ') 
    function(lst[1:]) 

(я переименовал list в lst, потому что list является встроенным типом, который мы не хотим, чтобы перезаписать).

Пояснение: если у нас есть рекурсивный вызов внутри вызова print, мы печатаем возвращаемое значение функции, которое всегда будет None, так как оно никогда ничего не возвращает. Поэтому мы вынуждены вывозить его на улицу.

Кроме того, логическое значение пустого списка False, поэтому мы можем заменить lst == [] с not lst, в соответствии с рекомендациями PEP 8.

0

После того, как ваша функция существует, она возвращает None, поэтому в ваших заявлениях печати есть «Нет». Просто переместите рекурсивный вызов за пределы печати

elif list[0] >= 100: 
     function(my_list[1:]) 
     print(my_list[0], end='\n') 
    else: 
     function(my_list[1:]) 
     print(my_list[0], end='') 
1

Список - это зарезервированное слово.

myList = [2,3,103, 8, 10] 
for i in myList: 
    print(i, end = (i>=100) and '\n' or ' ') 
+0

'print' как функция настоятельно предлагает Python 3.x, поэтому вы можете использовать' '\ n", если i> = 100 else "" 'вместо изворотливой' и '' или' вещи. – rlms

+0

True - я больше привык к python 2.x –

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