2015-04-05 3 views
0

Это только второй раз, когда я публикую этот сайт, и у меня есть еще одна небольшая проблема. Вот мой код:простых строк в python

results = ["2^0 = 1", "2^1 = 2", "2^2 = 4", "2^3 = 8", "2^4 = 16", "2^5 = 32", "2^6 = 64", 
"2^7 = 128", "2^8 = 256", "2^9 = 512", "2^10 = 1024", "2^11 = 2048", "2^12 = 4096", 
"2^13 = 8192", "2^14 = 16384", "2^15 = 32768", "2^16 = 65536", "2^17 = 131072", 
"2^18 = 262144", "2^19 = 524288", "2^20 = 1048576"] 
num = 0 
usr = input("This is a program to show you the powers from 0 to 20. You pick a number between 0 and 20 and the program will show you all the powers within that range. type a number 1 - 20: ") 
print(results[0:usr]) 

Проблема заключается в том, что я не могу показаться, чтобы получить программу, чтобы вытащить из строки результатов: 0 вплоть до числа, что пользователь и печать занесен что.

Это ошибка я получаю:

Traceback (most recent call last): 
    File "C:\Users\Justin\Desktop\spring 2015 classes\cosc 250\homework 4\question 1.py", line 15, in <module> 
    main() 
    File "C:\Users\Justin\Desktop\spring 2015 classes\cosc 250\homework 4\question 1.py", line 13, in main 
    print(results[0:usr]) 
TypeError: slice indices must be integers or None or have an __index__ method 

Я никогда не сталкивался с этой ошибкой прежде. Я все еще новичок в программировании. Любая помощь будет оценена по достоинству.

спасибо.

+0

Вы уверены, что «предварительная компиляция» ваших ответов (как в личном списке строк) является допустимым решением для вашей проблемы? Я думаю, было бы намного лучше вычислить вывод в цикле. – Alfe

+0

Единственная причина, по которой я предварительно вычислил свои ответы, состоял в том, что мое задание состояло в том, чтобы убедиться, что результат был таким, каким он должен был быть. Однако я считаю, что ваше решение лучше. извините за новый код. – jjflyV7

ответ

0

usr - это строка. Вам нужно преобразовать его в целое число, чтобы использовать его как индекс или срез. Попробуйте следующее:

print(results[0:int(usr)]) 
+0

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

+0

Рад, что это помогает. Удачи вам в вашем классе, надеюсь, вы продолжаете учиться! Программирование отличное! – brenns10

0

Попробуйте это. input возвращает объект str.Также применяется int для нарезки list.

print(results[:int(usr)]) 
+0

Это сработало отлично, и мне не пришлось использовать цикл for. Все, что я должен был сделать, это добавить + 1 после usr, потому что он не показывал последний номер ввода пользователя. Спасибо вам за программирование :) – jjflyV7

0

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

for i in range(int(usr)): 
    print "2^%d = %d" % (i, 2 ** i) 

«Предвычисление» ответы не очень много о том, что делать с компьютерами ;-)

+0

Используйте формат списка в одной строке: '[" 2 ^% d =% d "% (i, 2 ** i) для i в диапазоне (int (usr))]' –

+0

@MalikBrahimi Рассмотрите отображаемые знания об азбуке и переосмыслите свое предложение ;-) – Alfe

+0

Он печатает нарезанный список. –

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