2013-02-23 1 views
-3

Так это то, что я получил:Привет, Как сделать конечный результат этой случайной сгенерированной локальной переменной в глобальную переменную? Python

x = ['a', 'b', 'c'] 

y = ['a', 'b', 'c'] 


def stuff(this, that): 
    this = x[randint(0, 2)] 
    that = y[randint(0, 2)] 
    while this != 'c' or that != 'c' 
    print "some %r stuff here etc..." % (this, that) 
    this = x[randint(0, 2)] 
    that = y[randint(0, 2)] 

stuff(x[randint(0, 2)], x[randint(0, 2)]) 

это просто «суть» программы курса.

Так что все работает нормально, как будто я хочу, чтобы это было после этой части. проблема у меня есть, когда я пытаюсь распечатать или использовать конечный результат успешного while-loop глобально, я, очевидно, получаю NameError, и когда я пытаюсь добавить глобальное значение в переменную внутри функции, я получаю SyntaxError: имя «бла» является глобальным и локальным. Если я создаю случайную переменную вне функции, то то, что я распечатываю, является переменной THAT, а не той, которая удовлетворяла оператору while-loop.

Теперь я знаю, что могу просто поместить печать в функцию, но это только часть более крупной программы , которая повторяет основные шаги выше. Я хочу, чтобы напечатать общий результат вместе поскольку так:

print "blah blah is %r, and %r %r %r etc.. blah blah.." % (x, y, z, a, b, etc) 

Как это исправить, так что я могу точно собирать переменные, которые удовлетворяют While-цикл и использовать их в других частях всей программы? PS: Извините за беспорядок, я все еще на стадии обучения.

+0

Используйте 'random.choice (х)' вместо 'х [random.randint (0 , 2)] '. –

+0

Просто объявите их 'global' в верхней части функции. – martineau

+0

RTFM! Переменные 'global' будут вашими друзьями. – Mic

ответ

3

Используйте оператор return, чтобы вернуть результат вызывающему абоненту. Это предпочтительный способ передачи переменных вокруг (global не идеален, так как он загромождает глобальное пространство имен и может впоследствии создавать проблемы с конфликтом имен).

def pick_random(x, y): 
    return random.choice(x), random.choice(y) 

this, that = pick_random(x, y) 

Если вы хотите сохранить производство значений из функции, вы можете использовать yield:

def pick_random(x, y): 
    while True: 
     this, that = random.choice(x), random.choice(y) 
     if this == 'c' and that == 'c': 
      return 
     yield this, that 

for this, that in pick_random(x, y): 
    print this, that 
Смежные вопросы