Выполнение этого кода показывает: list index out of range
.
x= int(input("Enter the row number"))
y= int(input("Enter the column number"))
s= []
for i in range(1,x):
for j in range(1,y):
s[i][j]= i*j
print s
Учтите, что я полный любитель программирования, поэтому не могу помочь себе в основных задачах. Спасибо!
Вы использовали тег Python 3, но ваш код использует синтаксис Python 2 print
. Что он?
Я бы рекомендовал изучить раздел списков достойного учебника по Python (пример).
Это Python3. Спасибо, что указали на это @glibdud
Фактически, вы можете помочь себе в решении основных задач, если найдете учебное пособие и пройдетесь по нему. Мы не репетиторство.
@KenWhite Я прошел через учебные пособия, но они не помогают понять суть программы, особенно. когда человек совершенно не знаком с предметом.
Сложность, с которой вы столкнулись, заключается в том, что вы не можете расширить список, назначив несуществующий элемент.
Вы можете делать то, что хотите, используя словарь, например, потому что со словарем вы может изобретаете новые элементы, просто назначая их:
s= {}
for i in range(1,x):
for j in range(1,y):
s[i,j]= i*j
Но если вам действительно нужен список списков, вы должны создать каждый список с помощью append()
. С x,y == (4,5)
:
>>> s = []
>>> for i in range(1,x):
s.append([])
for j in range(1,y):
s[-1].append (i*j)
>>> s
[[1, 2, 3, 4], [2, 4, 6, 8], [3, 6, 9, 12]]
Это не совсем соответствует тому, что пытался сделать ваш исходный код, потому что списки Python начинаются с нуля, и вы хотели, чтобы ваш самый низкий индекс Икс и у был равен 1. Итак
>>> s[2][3]
12
С x,y == (4,5)
вы, возможно, ожидали, что эта матрица будет иметь 20 элементов вместо 12. Причина, по которой вы получите 12, состоит в том, что range(1,n)
создает последовательность элементов до, но не включаяn
.
И если вы действительно программируете на Python 3, вам нужно написать print(s)
, потому что в Python 3 print
- это функция, а не инструкция.
Вы инициализировали свой массив s
как пустой, поэтому любое присвоение приведет к ошибке вне допустимого диапазона. Для числовых массивов вы можете использовать следующий подход для его инициализации:
x = int(input("Enter the row number: "))
y = int(input("Enter the column number: "))
s = [[0] * y for _ in range(x)]
for i in range(x):
for j in range(y):
s[i][j] = i * j
print s
Например:
Enter the row number: 5
Enter the column number: 3
[[0, 0, 0], [0, 1, 2], [0, 2, 4], [0, 3, 6], [0, 4, 8]]
Примечание. Массивы в Python начинаются с [0][0]
, поэтому последняя позиция будет s[4][2]
, которая будет содержать 2 * 4
. Вы можете, например, добавить один к x
и y
, чтобы получить дополнительное измерение.
Это помогло. Большое спасибо.
потому что у вас пустой список
s=[]
sou. Вы не можете запросить i-й элемент, если он не существует.