2017-02-21 2 views
0

У меня есть потребность в коде, который запрашивает ввод из 5 pos номеров, а затем выводит эти числа назад. Я хотел бы использовать цикл while. Это то, что я до сих пор придумал, но второй цикл while не работает.Список Python, который выводит числа, введенные в обратном направлении

positiveNum = 0 
SIZE = 5 
numberList= [] 
ARRAY_LIMIT = SIZE -1 

while len(numberList) < SIZE : 
    positiveNum = input("Enter a positive number:") 
    numberList.append(positiveNum) 
while int(positiveNum) >= 0: 
    print(numberList[positiveNum]) 
    positiveNum -= 1 
+0

обращают внимание, вы используете positiveNum как в качестве индекса в списке, который должен быть доступы и оба, как фактическое число заданное Пользователь. То есть, если пользователь дает вам «100», вы попытаетесь получить доступ к numberList [100], в то время как numberList может содержать только одно число внутри, а – deathyr

+0

в идиоматическом питоне. While цикл не является подходящей конструкцией для использования. Даже на других языках вы обычно используете цикл while, когда вы не знаете, сколько предметов вы будете перебирать. Для обоих циклов вы знаете, сколько. В качестве учебной вещи это прекрасно, но не думайте, что это правильный способ сделать это. –

ответ

0

Вы должны выполнять итерацию по длине numberList и не положительное число. В основном изменить второй цикл while.

i = SIZE; 
while i>0: 
     print(numberList[i-1]) 
     i=i-1 
0

На втором цикле, вы используете ту же переменную positiveNum без переустановки его размера массива, попробуйте:

SIZE = 5 
numberList= [] 
ARRAY_LIMIT = SIZE -1 

while len(numberList) < SIZE : 
    positiveNum = input("Enter a positive number:") 
    numberList.append(positiveNum) 
index = SIZE - 1 
while index >= 0: 
    print(numberList[index]) 
    index -= 1 
0

Вашего первый вопрос в том, что input возвращает string так что вам нужно чтобы отправить его на int, если вы хотите индексировать его. Вероятно, вы получите следующую ошибку.

TypeError: list indices must be integers or slices, not str

# Won't work with string 
numberList[positiveNum] 
positiveNum -= 1 
# Need to cast to int first 
positiveNum = int(input("Enter a positive number:")) 

Преобразование его в состоянии в то время как петля будет работать только при условии, что не изменяет это значение в переменной к int, это еще string

# Works only once 
while int(positiveNum) >= 0: 

сейчас следующая проблема заключается в том, что вы используете positiveNum в качестве номера индекса. Это приведет к IndexError, если последний введенный номер больше, чем SIZE, скажем, 100.

SIZE = 5 
number_lst = [] 

while len(number_lst) < SIZE: 
    # Should perform error checking if you must have positive numbers 
    num = int(input("Enter a positive number: ")) 
    number_lst.append(num) 

# Output backwards using while 
i = len(number_lst) - 1 
while i >= 0: 
    print(number_lst[i]) 
    i -= 1 

Здесь также несколько альтернатив цикла

# Output backwards using for 
for item in number_lst[::-1]: 
    print(item) 

for item in reversed(number_lst): 
    print(item) 

for i in range(len(number_lst) - 1, -1): 
    print(number_lst[i]) 

for i in reversed(range(len(number_lst))): 
    print(number_lst[i]) 
0

Использование в то время как петли:

size = 5 
number_list = [] 

while len(number_list) < size: 
    number_list.append(int(input("Enter a positive number: "))) 
i = 1 
while i <= size: 
    print(number_list[size - i]) 
    i += 1 

Использование петли для петли для второго контура:

size = 5 
number_list = [] 

while len(number_list) < size: 
    number_list.append(int(input("Enter a positive number: "))) 
for i in number_list[::-1]: 
    print(i) 

Используя два для петель, которое было бы более разумным в данном случае:

size = 5 
number_list = [] 

for _ in range(size): 
    number_list.append(int(input("Enter a positive number: "))) 
for i in number_list[::-1]: 
    print(i) 
Смежные вопросы