Python функции не имеют доступа к глобальной переменной? - PullRequest
0 голосов
/ 12 апреля 2020

Я знаком с другими языками, такими как Java и JS и только что выучил Python, и что меня смущает, так это здесь:

upper_case = 0
lower_case = 0

s = "Hello"

def upper_lower(s):
    for c in s:
        if c.islower():
            lower_case += 1
        elif c.isupper():
            upper_case += 1
    print(upper_case, lower_case)

Но я всегда получаю ошибку UnboundLocalError: local variable 'upper_case' referenced before assignment Что означает «ссылки перед назначением»? Но я уже объявляю эту переменную перед глобальной ??

Ответы [ 4 ]

2 голосов
/ 12 апреля 2020

Вы можете сделать это

s = "Hello"

def upper_lower(s):
    upper_case = 0
    lower_case = 0
    for c in s:
        if c.islower():
            lower_case += 1
        elif c.isupper():
            upper_case += 1
    print(upper_case, lower_case)

или как уже упоминалось с global ключевое слово

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

Вы должны добавить глобальные

upper_case = 0
lower_case = 0

s = "Hello"

def upper_lower(s):

    global upper_case
    global  lower_case

    for c in s:
        if c.islower():
            lower_case += 1
        elif c.isupper():
            upper_case += 1
    print(upper_case, lower_case)


upper_lower(s)

Результат

1 4
0 голосов
/ 12 апреля 2020

Эта ошибка связана с тем, что вы пытаетесь выполнить следующую операцию: lower_case += 1, что совпадает с lower_case = lower_case +1. Поскольку lower_case не имеет начального значения, эта операция не может быть выполнена. Чтобы решить эту проблему, добавьте следующие две строки:

    upper_case = 0
    lower_case = 0

Вам нужно сделать:

upper_case = 0
lower_case = 0

s = "Hello"

def upper_lower(s):
    upper_case = 0
    lower_case = 0
    for c in s:
        if c.islower():
            lower_case += 1
        elif c.isupper():
            upper_case += 1
    print(upper_case, lower_case)

upper_lower(s)
0 голосов
/ 12 апреля 2020

Внутри функции вам нужно использовать ключевое слово global.

upper_case = 0
lower_case = 0

s = "Hello"

def upper_lower(s):
    global upper_case
    global lower_case
    for c in s:
        if c.islower():
            lower_case += 1
        elif c.isupper():
            upper_case += 1
    print(upper_case, lower_case)
...