Ест такой код:
a=[]
b=[]
def create(func, n):
global a,i,j
for i in range(1,n):
for j in range(1,n):
a.append(func)
b.append(a)
a=[]
create((1*i+2*j),10)
NameError: global name 'i' is not defined
Ткните пожалуйсте в мою ошибку.
a=[]
b=[]
def create(func, n):
global a,i,j
for i in range(1,n):
for j in range(1,n):
a.append(func)
b.append(a)
a=[]
create((1*i+2*j),10)
NameError: global name 'i' is not defined
a=[]
b=[]
i = 0
j = 0
def create(func, n):
global a,i,j
for i in range(1,n):
for j in range(1,n):
a.append(func)
b.append(a)
a=[]
create((1*i+2*j),10)
ViperА вы не могли бы мне предложить возможность обойтись без них?
Да и в данном примере глобальные i и j не нужны.
#coding=utf-8
def create(n):
b = [] #главный список
for i in xrange(n): # кошернее вместо range использовать xrange
a = [] #список - строка
for j in xrange(n): #заполняем строку
a.append( 1*i+2*j )
b.append(a) #добавляем строку в главный список
return b #возвращаем результат
print create(10)
#coding=utf-8
def count_cell_1(i, j): #функция, подсчитывающая значение ячейки, в зависимости от координат по формуле 1*i+2*j
return 1*i+2*j
def create(count_cell, n):
# входные параметры:
# count_cell - функция, подсчитывающая значение ячейки
# n - размер матрицы
b = [] #главный список
for i in xrange(n): # кошернее вместо range использовать xrange
a = [] #список - строка
for j in xrange(n): #заполняем строку
a.append( count_cell(i, j) )
b.append(a) #добавляем строку в главный список
return b #возвращаем результат
print create(count_cell_1, 10)
#можно передавать не готовую функцию для подсчета ячейки, а создавать ее на лету с помощью конструкции lambda:
print create(lambda x, y: 1*x+2*y, 10)
f = lambda x, y: 1*x+2*y
create = lambda f, n: [ [ f(i,j) for j in xrange(n) ] for i in xrange(n) ]
print create(f, 10)
print [ [ 1*i+2*j for j in xrange(10) ] for i in xrange(10) ]