2017-07-04 2 views
1

Ich versuche, die globalen Variablen cows und bulls in einer Schleife zu bearbeiten, aber immer diese Fehlermeldung "SyntaxError: name 'cows' is assigned to before global declaration"Syntaxerror: name ‚Kühe‘ zugeordnet sind, bevor globale Deklaration in Python3.6

import random 

random_no = random.sample(range(0, 10), 4) 
cows = 0 
bulls = 0 
#random_num = ','.join(map(str, random_no)) 
print(random_no) 
user_input = input("Guess the no: ") 
for index, num in enumerate(random_no): 
    global cows, bulls 
    print(index, num) 
    if user_input[index] == num: 
     cows += 1 
    elif user_input[index] in random_no: 
     bulls += 1 

print(f'{cows} cows and {bulls} bulls') 
+2

Außerhalb einer Funktion, brauchen Sie nicht um 'global' zu verwenden. Innerhalb einer Funktion, setze deine 'globale' Deklaration * zuerst *. –

Antwort

2

Python hat kein Block-Scoping, nur Funktionen und Klassen führen einen neuen Bereich ein.

Weil du hier keine Funktion haben, gibt es keine Notwendigkeit, eine global Anweisung zu verwenden, cows und bulls sind bereits Globals.

Sie haben auch andere Probleme:

  • input() gibt einen String zurück, immer.

  • Indizierung funktioniert auf Strings (Sie erhalten individuelle Zeichen), sind Sie sicher, dass Sie das wollten?

  • user_input[index] == num wird immer falsch sein; '1' == 1 testet, ob zwei verschiedene Arten von Objekten gleich sind; Sie sind nicht.

  • user_input[index] in random_no wird auch immer falsch sein, Ihre random_no Liste enthält nur ganze Zahlen, keine Zeichenfolgen.

Wenn der Benutzer eine Zufallszahl einzugeben ist, wandeln die input() auf eine ganze Zahl, und nicht die Mühe mit enumerate():

user_input = int(input("Guess the no: ")) 
for num in random_no: 
    if user_input == num: 
     cows += 1 
    elif user_input in random_no: 
     bulls += 1 
+0

Danke für deine Werteingabe und korrigiere meine Fehler im Skript. Das Programm funktioniert wie erwartet. –

0

Sie geben Kühen Wert bevor Sie es als global deklarieren. Sie sollten zuerst Ihren globalen Gültigkeitsbereich angeben

Btw Sie brauchen nicht die globalen Deklarationen. Entferne einfach diese Zeile.

Verwandte Themen