2017-05-06 14 views
0

turn = 0play関数内に配置しようとしました Stackoverflowでいくつかの同様の質問を読み、global turnを関数の内部と外部に配置しようとしました。これらはエラーを投げなかっただけでなく、ターン制限にも至らなかった。どうして?どのようにこれを修正するための任意のアイデア?私の腸は、私がglobalに変数turnを設定しているので、私はそれが機能外に設定ですので、それは価値ですが、あなたはターンを取るように、反復数字を実行するために、私は」のturn=0を参照し続けるつもりだと言っている反復グローバル変数がトリガされない==条件

間違っている。ここで

は私のコードです:私はグローバルを使用していないとき

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) 

ここでは、元のエラーがあります:私はglobalを使用しないようにアドバイスをしたいが、考え出していない

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まだ代替案を出している。

答えて

1

ここでは、再帰的なplay()関数で余分な変数によってターンを記録するバージョンがあります。ゲームがゲームオーバーで終わることができるように、あなたのためのリターンを追加しました。 :)

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 


def play(guess_row,guess_col, turn): 
    if guess_row == ship_row and guess_col == ship_col: 
    print "Congratulations! You sunk my battleship!" 
    else: 
    if turn == 4: 
     print "Game Over" 
     return 
    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:")) 
    play(guess_row,guess_col, turn + 1) 


guess_row = int(raw_input("Guess Row:")) 
guess_col = int(raw_input("Guess Col:")) 
play(guess_row,guess_col, 0) 
+0

したがって、関数呼び出しで変数を渡し、関数(再)呼び出しで+1を渡して反復できますか?ブリリアント! – toonarmycaptain

+0

なぜ私はうまくいっていないのですか? – toonarmycaptain

+0

甘い、問題ありません。あなたの方法も使えますが、グローバルターンを2回定義します。あなたのコードで最初の "グローバルターン"を取り出し、あなたは良い(ゲームオーバー後にそのreturnステートメントを追加することを覚えておいてください)。 –

関連する問題