2015-11-20 2 views
-1

Я делаю некоторые примеры программирования для практики для предстоящего соревнования, и я оказался в тупике по довольно простой проблеме.Обработка индекса списка как целого

В принципе, пользователь должен ввести х количество цифр, и я должен вернуть сумму чисел. Условие состоит в том, что каждый раз, когда они вводят 0, это означает, что я должен игнорировать последний номер, который они ввели, поэтому он больше не будет больше от суммы.

Вот мой код:

numbers = [] 
index = 0 
total = 0 

k = input("How many numbers would you like to enter? (1- 100000)" + "\n").strip() 

for x in range (int(k)): 
    number = input("Enter a number." + "\n").strip() 
    numbers.append(number) 
    if number == '0': 
     index = numbers.index(number) 
     numbers.pop([index - 1]) 
     numbers.pop([index]) 

for y in range (len(numbers)): 
    for item in numbers: 
     total += int(item) 


print(total) 

ошибка в этой строке:

numbers.pop([index - 1]) 

Он говорит мне, что «список» объект не может быть истолкован как целое. Я изначально пытался сделать его int (index), надеясь, что он преобразует его в int, поэтому я могу выполнить вычитание, чтобы получить индекс числа перед ним, чтобы я мог выскочить из списка, но я получил то же самое сообщение об ошибке.

Можно ли использовать это значение как целое число, чтобы я мог выполнить вычитание. Или существует другой способ, чтобы получить индекс числа раньше?

ответ

1

Что как вы думаете [index - 1] есть? Это, очевидно, list. И это не целое число. index - 1, без квадратных скобок, будет целым числом. Кроме того, вы должны проверить, является ли номер пользователя 0до, добавив его, или последнее значение в list будет таким, что 0, а не значение, которое нужно удалить, что просто делает для дополнительной работы.

Там также много возможностей для улучшения вашего кода, по аналогии правильное использование встроенных функций и устранения ненужных счетчиков:

k = int(input("How many numbers would you like to enter? (1- 100000)\n")) 
result = [] 
for i in range(k): 
    num = int(input("Enter a number.\n")) 
    if num: 
     result.append(num) 
    elif result: 
     result.pop(-1) 

print(sum(result)) 
+0

Ничего себе, этот способ выглядит намного чище. Хотя мне хотелось бы получить разъяснения по этому поводу. в вашем заявлении результата elif, как это перевести, если число, которое они ввели, равно 0, сделайте следующее: –

+0

Подождите, не подумайте, я подумал об этом немного, и я понимаю, спасибо за это! –

+0

'if num:' проходит с правдой 'num', что является любым числом, кроме' 0'. В 'elif result:', мы знаем, что число было '0', поэтому мы проверяем, есть ли в нем элементы' result', убедившись, что это правда. Затем мы можем безопасно удалить элемент из него. – TigerhawkT3

0

Это должно быть numbers.pop(index - 1)

То, что вы должны сделать, это передать целое значение индекса, который должен быть очищен, а не передавая список.

0

Попробуйте

numbers = [] 
index = 0 
total = 0 

k = input("How many numbers would you like to enter? (1- 100000)" + "\n").strip() 

for x in range (int(k)): 
    number = input("Enter a number." + "\n").strip() 
    numbers.append(number) 
    if number == '0': 
     index = numbers.index(number) 
     numbers.pop(index - 1) 
     numbers.pop(index) 

for y in range (len(numbers)): 
    for item in numbers: 
     total += int(item) 


print(total) 
2

хорошо, в питона, можно обратиться к элементам на конце списка с отрицательными числами:

>>> l = range(10, 100, 5) 
>>> l 
[10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95] 
>>> l[-1] 
95 
>>> l[-2] 
90 

и поп будет принимать эти отрицательные числа, поэтому для удаления второго по последний элемент в списке является только:

>>> l.pop(-2) 
90 
>>> l 
[10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 95] 
0

Вы передаете список, когда вы должны пройти Int

numbers.pop(index-1) 

код:

numbers = [] 
index = 0 
total = 0 

k = input("How many numbers would you like to enter? (1- 100000)" + "\n").strip() 

for x in range (int(k)): 
    number = input("Enter a number." + "\n").strip() 
    numbers.append(number) 
    if number == '0': 
     index = numbers.index(number) 
     numbers.pop(index) 
     numbers.pop(index-1) 
for y in range (len(numbers)): 
    for item in numbers: 
     total += int(item) 


print(total) 

И если я могу, это простой способ сделать это

total = 0 
last = 0 
k = input("How many numbers would you like to enter? (1- 100000)" + "\n").strip() 

for x in range (int(k)): 
    print("Enter Number") 
    temp = int(input()) 
    total += temp 
    if temp == 0: 
     total -= last 
    else: 
     last = temp 
print(total) 
+1

Спасибо за предложение! Однако у вашей версии проблемы. Пользователь может ввести 2 последовательных 0s, если захочет. Поэтому мне нужно найти способ иметь еще одну временную переменную, которая сохраняет новый окончательный номер после удаления предыдущего, поэтому я решил попробовать использовать список и перейти через индекс списка. –

+0

Я предположил, что пользователь не будет вводить более одного нуля за один раз –

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