Попытка передать переменные за пределы входных функций Python - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь заставить col_number и user_input быть распознанными вне функции ввода.

Единственный способ, которым я могу использовать col_number вне функции ввода, это если Я определяю глобальную переменную внутри - которая кажется неправильной. Я попытался поместить оператор над def get_input, но перед присвоением можно ссылаться на 'col_number.

Мне нужно использовать user_input в качестве строки txt для заголовка на графике, но не понять, как передать это. Последняя строка кода в выражении print дает мне неразрешенную ссылку.

Любые предложения, пожалуйста.

 col_number = int
def get_input(prompt):
        #global col_number
        #locals col_number
        global col_number
        while True:
            user_input = input(prompt).lower()
            if user_input in ('apples', 'pears', 'oranges', 'quit'):
    # the user = int(0),int(1), int(2) values just assign a different column numnber
                if user_input == 'apples':
                    col_number = 0
                if user_input == 'pears':
                    col_number = 1
                if user_input == 'oranges':
                    col_number = 2
            return col_number, user_input

print(get_input(prompt='Enter apples, pears, oranges or q to quit'))
print(user_input)

Ответы [ 4 ]

4 голосов
/ 07 апреля 2020

Вы не определяете глобальную переменную внутри. global оператор говорит интерпретатору Python использовать объект col_number, созданный в global scope вместо создания нового локального объекта области с именем col_number .

Лучшим способом решения этой проблемы было бы назначение возвращаемых объектов из вашей функции вместо их предварительного определения:

def get_input(prompt):
   while True:
        user_input = input(prompt).lower()
        if user_input in ('apples', 'pears', 'oranges', 'quit'):
            if user_input == 'apples':
                col_number = 0
            if user_input == 'pears':
                col_number = 1
            if user_input == 'oranges':
                col_number = 2
        # I think this next line should be indented?
        # I left it here as is to reference your code but it'll error out
        # if the input is not valid since col_number will not be created.
        return col_number, user_input

# Assign and make use of your returned objects!
my_col, my_input = get_input('Enter apples, pears, oranges or q to quit')
print(my_col)
print(my_input)

Лучше избегать обращения к глобальным переменным внутри функций, так как чем сложнее становится ваш код, тем сложнее.

1 голос
/ 07 апреля 2020

Чтобы получить user_input из get_input, у вас есть пара опций:

Объявление переменной из функции:

col_num, usr_inpt = get_input(prompt='Enter apples, pears, oranges or q to quit')
print(usr_inpt)

Сделайте user_input глобальной переменной.

col_number = 0
user_input = None
def get_input(prompt):
    global col_number
    global user_input
    while True:
        user_input = input(prompt).lower()
        if user_input in ('apples', 'pears', 'oranges', 'quit'):
            # the user = int(0),int(1), int(2) values just assign a different column numnber
            if user_input == 'apples':
                col_number = 0
            if user_input == 'pears':
                col_number = 1
            if user_input == 'oranges':
                col_number = 2
        return col_number, user_input

print(get_input(prompt='Enter apples, pears, oranges or q to quit'))
print(user_input)

Но, как указывал @r.ook, обычно плохая идея использовать глобальные переменные.

1 голос
/ 07 апреля 2020

Вы никогда не объявите user_input как глобальную переменную. Вы можете решить эту проблему, добавив user_input="" перед функцией и добавив global user_input после другого глобального оператора, но это не Pythoni c способ вернуть значения из функции. Вместо этого вы должны присвоить результат функции переменным, например: col_number, user_input = get_input(prompt='Enter apples, pears, oranges or q to quit'). Делая это, вы можете получить доступ к этим значениям, а также удалить col_number = int и global col_number, поскольку они больше не нужны.

0 голосов
/ 07 апреля 2020

Спасибо за это - я смотрел на это весь день1, чтобы он работал, сейчас я пытаюсь включить строку 'break', чтобы выйти из финальной части. Это работает, но вылетает вместо этого. Я скучаю по чему-то еще.

def get_input(prompt):

    while True:
        user_input = input(prompt).lower()
        if user_input in ('apples', 'pears', 'oranges', 'quit'):
            # the user = int(0),int(1), int(2) values just assign a different column numnber
            if user_input == 'apples':
                col_number = 0
            if user_input == 'pears':
                col_number = 1
            if user_input == 'oranges':
                col_number = 2
            if user_input == 'quit':
                break
            return col_number, user_input


my_col, my_input = get_input(prompt='Enter apples, pears, oranges or q to quit')
print(my_input)
...