2012-03-02 2 views
0

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

Когда я делаю целочисленный массив и передаю его функции, которая затем использует цикл for для печати отдельных значений списка, числа, следующие за первым в каждом int усечены.

Например, следующий вход и выход:

Please enter a number: 101 
Please enter a number: 202 
Please enter a number: 303 
Please enter a number: . 
1 
2 
3 

Это происходит независимо от того, входной сигнал, если его 10, 101 или 13453 - такое же поведение происходит.

Я знаю, что, вероятно, я пропустил что-то простое, но ради меня никакое количество поисковых запросов не дает мне решения этой проблемы. Ниже приведен код, который я использую для его выполнения. Интересно отметить: при печати всего списка за пределами цикла for в любой точке он возвращает полный и правильный список (например, ['101', '202', '303'])

Спасибо!

temp = list() 

def sum(list): 
    print list 
    for i in range(1, len(list)+1): 
     print i 
    return temp 

L = list() 
while True: 
    input = raw_input("Please enter a number: "); 
    if input.strip() == ".": 
     break 
    L.append(input); 

print L 

L2 = sum(L) 
print L2 
+0

Ваш отступ неправильный, вероятно, ошибка копирования/вставки. –

+2

Вы не должны использовать 'list' и' input' в качестве имен переменных, потому что они будут затенять их соответствующие встроенные функции. –

+0

Знаете ли вы, что значения, которые вы добавляете в 'L', являются строками, а не целыми числами? –

ответ

5

Цикл

for i in range(1, len(my_list)+1): 
    print i 

перебирает чисел от 1 до len(my_list), не более пунктов списка. Для последнего, используйте

for x in my_list: 
    print x 

(я переименовал list в my_list, чтобы спасти вас еще одна головная боль.)

+0

Спасибо! Теперь мне нужно знать, что: используя метод for x в my_list, который вы описали, есть простой способ суммировать числа в методе, подобном Java. Например, используя i + 1/i/i-1, добавляя в список все соседи списка, такие, что если L1 = [1, 2, 3], то L2 = [3, 6, 5] [1 + 2 , 1 + 2 + 3, 2 + 3], где обычно я делал бы число = i-1 + i + i + 1 (с соответствующей проверкой ошибок в) – Suki

+0

@Suki: вы не просите разъяснений, вы задавая совершенно новый вопрос. Пожалуйста, используйте кнопку «Задать вопрос» в верхней части страницы, чтобы другие люди, кроме меня, могли видеть новый вопрос. –

2

Вы печатаете счетчик, а не пункт списка. Это то, что вы хотите:

for i in list: 
    print i 

список сам по себе итератор, и вам не нужен счетчик для его петли.

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