Форум сайта python.su
UsCrи в функциях описанных в ней, они ведь тоже в ней находятся )
Только в ней, но не в функциях описанных в ней?
UsCr
У меня остался ещё вопрос: как в данном случае обойтись без global?
import random
rand = random.randint
randch = random.choice
arr = []
#generiruem massiv
def generate(KolSymb):
KolDvoetoch = 0 # !!!
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Третье сверху сообщение в теме. Я уже пробовал делать так. Не работает. Кстати, вообще код рабочий? Может у меня с софтом беда? Ставил IDLE из репозитоия. Под виндой аналогичная фигня выходит.import random
rand = random.randint
randch = random.choice
arr = []
#generiruem massiv
def generate(KolSymb):
KolDvoetoch = 0 # !!!
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
Офлайн
Что-то я тоже запутался. Получается, питон не совсем очевидно себя ведет в этом случае. Он смотрит вперед выполняемой строки. Вот пример:
b = "hello"
def a():
print b
b = "world"
a()
Отредактировано (Ноя. 5, 2009 00:32:59)
Офлайн
Нет. Все как раз очень очевидно.
Модули (а также классы и функции) - компилируются в байткод перед исполнением. Определение не совсем строгое - но сойдет.
>>> import dis
>>> b = "Hello"
>>> def a():
... print b
...
>>> dis.dis(a)
2 0 LOAD_GLOBAL 0 (b)
3 PRINT_ITEM
4 PRINT_NEWLINE
5 LOAD_CONST 0 (None)
8 RETURN_VALUE
>>> def a():
... global b
... print b
...
>>> dis.dis(a)
3 0 LOAD_GLOBAL 0 (b)
3 PRINT_ITEM
4 PRINT_NEWLINE
5 LOAD_CONST 0 (None)
8 RETURN_VALUE
>>> def a():
... print b
... b = 'world'
...
>>> dis.dis(a)
2 0 LOAD_FAST 0 (b)
3 PRINT_ITEM
4 PRINT_NEWLINE
3 5 LOAD_CONST 1 ('world')
8 STORE_FAST 0 (b)
11 LOAD_CONST 0 (None)
14 RETURN_VALUE
>>> def f():
... v = 'Hello'
... def g():
... print v
...
>>> dis.dis(f)
2 0 LOAD_CONST 1 ('Hello')
3 STORE_DEREF 0 (v)
3 6 LOAD_CLOSURE 0 (v)
9 BUILD_TUPLE 1
12 LOAD_CONST 2 (<code object g at 025802F0, file "<interactive input>", line 3>)
15 MAKE_CLOSURE 0
18 STORE_FAST 0 (g)
21 LOAD_CONST 0 (None)
24 RETURN_VALUE
>>>
>>> def f():
v = "Hello"
def g():
nonlocal v
print (v)
v = "world"
print (v)
return g
>>> dis.dis(f)
2 0 LOAD_CONST 1 ('Hello')
3 STORE_DEREF 0 (v)
3 6 LOAD_CLOSURE 0 (v)
9 BUILD_TUPLE 1
12 LOAD_CONST 2 (<code object g at 0x027BC698, file "<pyshell#14>", line 3>)
15 MAKE_CLOSURE 0
18 STORE_FAST 0 (g)
8 21 LOAD_FAST 0 (g)
24 RETURN_VALUE
>>> dis.dis(f())
5 0 LOAD_GLOBAL 0 (print)
3 LOAD_DEREF 0 (v)
6 CALL_FUNCTION 1
9 POP_TOP
6 10 LOAD_CONST 1 ('world')
13 STORE_DEREF 0 (v)
7 16 LOAD_GLOBAL 0 (print)
19 LOAD_DEREF 0 (v)
22 CALL_FUNCTION 1
25 POP_TOP
26 LOAD_CONST 0 (None)
29 RETURN_VALUE
Офлайн
Так… А при передаче глобольной переменной в функцию в качестве параметра он даст её изменить? Она при этом не перестанет быть глобальной?
Офлайн
Вот оно:
import random
rand = random.randint
randch = random.choice
arr = []
def generate(KolSymb):
def proced():
def GetDvoetoch(KolDvoetoch):
if KolDvoetoch>0:
KolDvoetoch = KolDvoetoch-1
symb = ":"
else: symb = randch("abcdefghigklmnopqrstuvwxyz")
return symb
j = rand(0,100)
if j%2==0: KolDvoetoch = 2
else: KolDvoetoch = 1
j = rand(0,1)
if j==0: k = GetDvoetoch(KolDvoetoch)#KolDvoetoch)
else: k = randch("abcdefghigklmnopqrstuvwxyz")
return k
for i in range(KolSymb+1):
arr.append(proced())
print arr
Офлайн
import random
from UserString import MutableString
alphabet = "abcdefghigklmnopqrstuvwxyz"
m = MutableString(''.join(random.choice(alphabit) for i in xrange(random.randint(10,20))))
m += ';' * random.randint(1,2)
random.shuffle(m)
Отредактировано (Ноя. 5, 2009 10:34:03)
Офлайн
UsCrПопробуйте решить задачу по частям:
Оно работает, но не так, как нужно.
Офлайн
Ох,да… Декомпозиция, мать наша…
Тема, я думаю закрыта. Остальное уже выходит за рамки.
Благодарю за помощь.
Офлайн
UsCrИнтересно было бы увидеть ваше решение.
Ох,да… Декомпозиция, мать наша…
Тема, я думаю закрыта. Остальное уже выходит за рамки.
Офлайн