Создавать глобальные переменные в Пайтоне

Я достаточно новый с синтаксисом Пайтона в особенности, как создавать глобально, nonlocal и помещение переменные и как объявление их без ошибок синтаксиса.

Например в следующем programo, я имею

# Estamos creando el juego de Piedra, papel o tijera

import random

userScore = 0;
cpuScore = 0;
global noChoice = True;



# result viene de que los jugadores han elegido, no muestro esta parte
# porque no es necesario por el tema de errores de sintaxis por las variables
def result(userChoice, cpuChoice):



# Traimos de saber lo que el usuario quiere elegir como estrategia
def start():
    while (noChoice):
        try:
            userChoice = int(raw_input("Make a move: Rock = 1, Paper = 2, Scissors = 3"));
        except ValueError: "That's definitely not a number"
        if userChoice == {1,2,3}:
            global noChoice = False;
            print "Oops!  That was no valid number.  Try again..."

    cpuChoice = random.getInt();

start()

Этот дает следующий результат:

:~$ python pFC.py
  File "pFC.py", line 7
    global noChoice = True;
                    ^
SyntaxError: invalid syntax

Я использовал global а он говорит, что я существую, я объявляю переменную слишком скоро.

UnboundLocalError: local variable 'noChoice' referenced before assignment

Я использовал то, что они советовали мне, но ошибка пребывает

# Estamos creando el juego de Piedra, papel o tijera

import random

user_score = 0
cpu_score = 0
global no_choice = True



# result viene de que los jugadores han elegido, no muestro esta parte
# porque no es necesario por el tema de errores de sintaxis por las variables
def result(user_choice, cpu_choice):


# Traimos de saber lo que el usuario quiere elegir como estrategia
def start():
    #Hey Python! Vamos a utilizar una variable global!
    global no_choice
    while (no_choice):
        try:
            user_choice = int(raw_input("Make a move: Rock = 1, Paper = 2, Scissors = 3"))
        except ValueError: "That's definitely not a number"
        if user_choice == {1,2,3}:
            global no_choice = False
            print "Oops!  That was no valid number.  Try again..."

    cpuChoice = random.getInt();

start()
6
задан 19.07.2019, 04:45
2 ответа

Хорошо, я думаю, что я начну тем, что буду рекомендовать тебе давать ему быстрый взгляд на PEP 8 - Стиле Гиде for Пайтона Коуд, который является путеводителем стилей, которые ты, должно быть, имеешь в виду, когда Пайтон использует.

Например, для определения переменных не используется CamelCase и также не необходимо использовать ; закончив каждое решение:

userScore = 0;
cpuScore = 0;

Было бы нужно конвертировать в:

user_score = 0
cpu_score = 0

Имей в виду, что PEP 8 одинокий путеводитель, если ты предпочитаешь продолжать делать это в твой способ, он хорошо.


Сейчас да, относительно глобальных переменных в твоем коде. Проблема состоит в том, что ты делаешь это неправильным способом.

Считай этот рукописный шрифт, который мы будем создавать в прогрессивной форме:

# -*- coding: utf-8 -*-

# Es una variable global disponible para cualquier función definida dentro de
# este script
no_choice = True

def start():
    # No es necesario indicar que quieres usar la variable global
    print "El valor de no_choice es:", no_choice

if __name__ == '__main__':
    start()

Результат был бы:

El valor de no_choice es: True

Наблюдай, что я не использую global так как использование global это не, чтобы определять глобальную переменную (несмотря на то, что ты будешь чувствовать себя склоненным это делать по Вашему имени).

Сейчас, представь, что ты хочешь изменить переменную no_choice:

# -*- coding: utf-8 -*-

# Es una variable global disponible para cualquier función definida dentro de
# este script
no_choice = True

def start():
    # No es necesario indicar que quieres usar la variable global
    print "El valor de no_choice es:", no_choice
    # Quiero negar el valor de no_choice (cambiarla a False)
    no_choice = not no_choice

if __name__ == '__main__':
    start()

Это будет производить ошибку:

El valor de no_choice es:
Traceback (most recent call last):
  File "test.py", line 14, in <module>
    start()
  File "test.py", line 9, in start
    print "El valor de no_choice es:", no_choice
UnboundLocalError: local variable 'no_choice' referenced before assignment

Пайтон не знает, в который переменная no_choice ты относишься и пойми, что она должна быть одной внутри достижения функции start, но он не находит ее и бросает ошибку UnboundLocalError (что происходит, когда ты стараешься использовать переменную, которая не была определена).

Сейчас, чтобы мочь изменять ее, мы должны показывать его Пайтону, что мы queriendo использовать глобальную переменную, в этом случае да мы должны использовать global:

# -*- coding: utf-8 -*-

# Es una variable global disponible para cualquier función definida dentro de
# este script
no_choice = True

def start():
    # Hey Python, voy a usar una variable global
    global no_choice
    print "El valor de no_choice es:", no_choice
    # Quiero negar el valor de no_choice (cambiarla a False)
    no_choice = not no_choice
    print "Ahora el valor de no_choice es:", no_choice

if __name__ == '__main__':
    start()

Результат был бы:

El valor de no_choice es: True
Ahora el valor de no_choice es: False
8
ответ дан 03.12.2019, 22:15
  • 1
    Большое спасибо для Вашего ответа очень did и # 225; ctica! Однако изменив, ошибка пребывает... – IggyPass 24.05.2016, 12:52
  • 2
    Привет @Marine1 обнови ты c и # 243; я говорю в вопросе, чтобы это проверять – César 24.05.2016, 15:07

Ты не нуждаешься в слове глобальных , когда ты объявляешь ее, потому что после того, как - вне ее definiciГіn одной funciГіn автоматически, он становится глобальным, но если ты нуждаешься в идентификаторе глобальных в функциях, которые будут изменять ее, но признавая ее первой таково:

  if userChoice == {1,2,3}:
        global noChoice
        noChoice = False;
        print "Oops!  That was no valid number.  Try again..."
6
ответ дан 03.12.2019, 22:15

Теги

Похожие вопросы