Я достаточно новый с синтаксисом Пайтона в особенности, как создавать глобально, 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()
Хорошо, я думаю, что я начну тем, что буду рекомендовать тебе давать ему быстрый взгляд на 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
Ты не нуждаешься в слове глобальных , когда ты объявляешь ее, потому что после того, как - вне ее definiciГіn одной funciГіn автоматически, он становится глобальным, но если ты нуждаешься в идентификаторе глобальных в функциях, которые будут изменять ее, но признавая ее первой таково:
if userChoice == {1,2,3}:
global noChoice
noChoice = False;
print "Oops! That was no valid number. Try again..."