Форум сайта python.su
Задача:
сгенерировать список из произвольного количества символов, содержащий одно или два двоеточия, находящиеся на случайных местах в списке.
import random
rand = random.randint
randch = random.choice
arr = []
#skolko tut budet dvoetochii:
def HowMuch():
j = rand(0,100)
if j%2==0: KolDvoetoch = 2
else: KolDvoetoch = 1
#generiruem massiv
def generate(KolSymb):
k = ""
def GetDvoetoch():
if KolDvoetoch>0:
KolDvoetoch = KolDvoetoch-1
k = ":"
else: k = randch("abc")
for i in range(KolSymb+1):
j = rand(0,10)
if j==0: GetDvoetoch() #esli ravno 0, vstavit' dvoetochie
else: k = randch("abc")
arr.append(k)
def go(n):
HowMuch()
generate(n)
print arr
Traceback (most recent call last):
File "<pyshell#38>", line 1, in <module>
studmod.go(10)
File "/home/nazarovd/python/studmod.py", line 28, in go
generate(n)
File "/home/nazarovd/python/studmod.py", line 23, in generate
else: GetDvoetoch()
File "/home/nazarovd/python/studmod.py", line 15, in GetDvoetoch
if KolDvoetoch>0:
UnboundLocalError: local variable 'KolDvoetoch' referenced before assignment
Офлайн
Переменную KolDvoetoch нужно инициализировать до того как что-то с ней делать.
Офлайн
FerromanРазве строка if j%2==0: KolDvoetoch = 2 не инициализирует KolDvoetoch?
Переменную KolDvoetoch нужно инициализировать до того как что-то с ней делать.
Отредактировано (Ноя. 4, 2009 13:04:29)
Офлайн
UsCrТолько в рамках данной функции.
Разве строка if j%2==0: KolDvoetoch = 2 не инициализирует KolDvoetoch?
Офлайн
Сделал вот так:
import random
rand = random.randint
randch = random.choice
arr = []
#generiruem massiv
def generate(KolSymb):
def HowMuch():
j = rand(0,100)
if j%2==0: KolDvoetoch = 2
else: KolDvoetoch = 1
def GetDvoetoch():
if KolDvoetoch>0:
KolDvoetoch = KolDvoetoch-1
k = ":"
else: k = randch("abc")
k = ""
HowMuch()
for i in range(KolSymb+1):
j = rand(0,10)
if j==0: k = randch("abc")
else: GetDvoetoch()
arr.append(k)
print arr
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
studmod.generate(10)
File "/home/nazarovd/python/studmod.py", line 27, in generate
else: GetDvoetoch()
File "/home/nazarovd/python/studmod.py", line 15, in GetDvoetoch
if KolDvoetoch>0:
UnboundLocalError: local variable 'KolDvoetoch' referenced before assignment
Отредактировано (Ноя. 4, 2009 14:41:47)
Офлайн
Функция ведь может оперировать переменными, которые инициализированы “выше” неё и на “её уровне”.
Тоесть такой код:
a = "a"
def one(text):
b = str(text)
def two():
a = b
two()
print a
one('Gerasim")
Отредактировано (Ноя. 4, 2009 14:55:09)
Офлайн
Смотри…
a=5
def b():
a=10
print a
b()
print a
a=5
def b():
global a
a=10
print a
b()
print a
a=5
def b(t):
t+=5
return t
print a
a=b(a)
print a
Отредактировано (Ноя. 4, 2009 16:42:00)
Офлайн
Хм…Я теперь порядком запутался…
def GetDvoetoch():
global KolDvoetoch
if KolDvoetoch>0:
KolDvoetoch = KolDvoetoch-1
k = ":"
else: k = randch("abc")
import random
rand = random.randint
randch = random.choice
arr = []
global KolDvoetoch
#generiruem massiv
def generate(KolSymb):
def HowMuch():
j = rand(0,100)
if j%2==0: KolDvoetoch = 2
else: KolDvoetoch = 1
def GetDvoetoch():
if KolDvoetoch>0:
KolDvoetoch = KolDvoetoch-1
k = ":"
else: k = randch("abcdefghigklmnopqrstuvwxyz")
k = ""
HowMuch()
for i in range(KolSymb+1):
j = rand(0,10)
if j==0: k = randch("abcdefghigklmnopqrstuvwxyz")
else: GetDvoetoch()
arr.append(k)
print arr
Офлайн
Если ты создаешь переменную внутри функции, то она будет существовать только внутри этой функции.
Офлайн
pasaranaxТолько в ней, но не в функциях описанных в ней?
Если ты создаешь переменную внутри функции, то она будет существовать только внутри этой функции.
Офлайн