J'ai essayé de placer les turn = 0
dans la fonction play
j'ai lu plusieurs questions similaires sur Stackoverflow, et a tenté de mettre global turn
à l'intérieur et à l'extérieur de ma fonction. Ceux-ci n'ont pas jeté d'erreurs, mais n'ont pas non plus abouti à une limite de virage. Pourquoi? Des idées pour résoudre le problème?Iterated variable globale ne peut pas déclencher == état
Mon instinct dit que parce que je me suis fixé la variable turn
à global
je vais garder le référencement turn=0
pour sa valeur parce que c'est situé à l'extérieur de la fonction, mais comme il se déroulera le nombre d'itération que vous prenez tour à tour, je Je me trompe.
Voici mon code:
from random import randint
board = []
for x in range(5):
board.append(["O"] * 5)
def print_board(board):
for row in board:
print " ".join(row)
print "Incredibly Simple Battleship!"
print_board(board)
def random_row(board):
return randint(0, len(board) - 1)
def random_col(board):
return randint(0, len(board[0]) - 1)
ship_row = random_row(board)
ship_col = random_col(board)
print ship_row #erase after testing
print ship_col
global turn
def play(guess_row,guess_col):
global turn
if guess_row == ship_row and guess_col == ship_col:
print "Congratulations! You sunk my battleship!"
else:
if turn == 4:
print "Game Over"
if guess_row not in range(5) or guess_col not in range(5):
print "Oops, that's not even in the ocean."
elif(board[guess_row][guess_col] == "X"):
print "You guessed that one already."
else:
print "You missed my battleship!"
board[guess_row][guess_col] = "X"
print_board(board)
print "Guess again:"
print "Turn ",turn,":"
guess_row = int(raw_input("Guess Row:"))
guess_col = int(raw_input("Guess Col:"))
turn += 1
play(guess_row,guess_col)
turn=0
guess_row = int(raw_input("Guess Row:"))
guess_col = int(raw_input("Guess Col:"))
play(guess_row,guess_col)
Voici l'erreur d'origine quand je n'ai pas utilisé mondiale:
Traceback (most recent call last):
File "python", line 51, in <module>
File "python", line 30, in play
UnboundLocalError: local variable 'turn' referenced before assignment
NB Je veux prendre les conseils de ne pas utiliser global
mais n'ont pas compris une alternative encore.
Vous pouvez donc transmettre une variable via l'appel de fonction et l'itérer en lui passant +1 IN dans la fonction (re) appel? Brillant! – toonarmycaptain
Pourquoi était ce que j'essayais de ne pas travailler cependant? – toonarmycaptain
Doux, pas de problème. Votre méthode peut également fonctionner, mais vous définissez le tour global deux fois. Enlevez le premier «tour global» dans votre code et vous devriez être bon à aller (n'oubliez pas d'ajouter cette déclaration de retour après le jeu terminé). –