だと思います。私は約1日前にcodeacademyを使ってPythonを学び始めました。私はすぐに進歩しました。戦艦部隊の最後に到達した後、私は自分ができることを見て自分に挑戦するように挑戦しました。だから、私はゲームを2人プレイにするために出発した。ただし、プログラムを終了すると、2番目のプレーヤーの船の列変数が定義されていないことがわかります。どうして?ここで変数は定義されていませんが、私はそれが
コードです:プレイヤー1は推測を作る直後
board1 = []
board2 = []
for i in range(5):
board1.append(["O"] * 5)
board2.append(["O"] * 5)
# Creates 2 boards, one for each player to view
def printboard(board):
for row in board:
print " ".join(row)
# Prints one of the boards, depending on which player is meant to see it
def boardset1():
print "Player 1, set your coordinates!"
ship_col1 = int(raw_input("X:"))
ship_row1 = int(raw_input("Y:"))
if ship_col1 not in range(1,6) or ship_row1 not in range(1,6):
print "Invalid coordinates!"
boardset1()
else:
ship_col1 = abs(ship_col1 - 5)
ship_row1 = abs(ship_row1 - 5)
for i in range(10):
print ""
print "Coordinates set!"
def boardset2():
print "Player 2, set your coordinates!"
ship_col2 = int(raw_input("X:"))
ship_row2 = int(raw_input("Y:"))
if ship_col2 not in range(1,6) or ship_row2 not in range(1,6): #< Issue is here, I think
print "Invalid coordinates!"
boardset2()
else:
ship_col2 = abs(ship_col2 - 5) #< Might be here
ship_row2 = abs(ship_row2 - 5)
for i in range(10):
print ""
print "Coordinates set!"
# 2 above functions set coordinates based on player input
def play1():
printboard(board1)
print "Player 1: Where is the opponent's ship?"
guess_col1 = int(raw_input("X:"))
guess_row1 = int(raw_input("X:"))
if guess_col1 not in range(1,6) or guess_row1 not in range(1,6):
print "Invalid coordinates!"
play1()
else:
guess_col1 = abs(guess_col1 - 5)
guess_row1 = abs(guess_row1 - 5)
if board1[guess_col1][guess_row1] == "X":
print "You already guessed here!"
play1()
elif guess_col1 == ship_col2 and guess_row1 == ship_row2:
win = True
print "You have won!"
else:
board1[guess_col1][guess_row1] = "X"
print "You have missed!"
def play2():
if win == False:
printboard(board2)
print "Player 2: Where is the opponent's ship?"
guess_col2 = int(raw_input("X:"))
guess_row2 = int(raw_input("X:"))
if guess_col2 not in range(1,6) or guess_row2 not in range(1,6):
print "Invalid coordinates!"
play2()
else:
guess_col2 = abs(guess_col2 - 5)
guess_row2 = abs(guess_row2 - 5)
if board2[guess_col2][guess_row2] == "X":
print "You already guessed here!"
play2()
elif guess_col2 == ship_col1 and guess_row2 == ship_row1:
win = True
print "You have won!"
else:
board2[guess_col2][guess_row2] = "X"
print "You have missed!"
# Play functions are for gameplay
win = False
boardset1()
boardset2()
for i in range(25):
if win == False:
play1()
play2()
else:
break
、このエラーが発生します。
Traceback (most recent call last):
File "python", line 97, in <module>
File "python", line 59, in play1
NameError: global name 'ship_col2' is not defined
何かアドバイスや解決策は大歓迎です。私がまだ学んでいるように、より詳細な、より良い。
ありがとうございます!
' ship_col2'が定義している:ここでは
は、あなたがよりよく理解するのに役立つかもしれないいくつかの更なる読書です。したがって、グローバルではなく、 'play1'関数の中では目に見えません。 – Evert'boardset1()'は最初に追加される 'global ship_col1、ship_col2'を必要とします。この関数内でのみ使用できるローカル変数を定義しています。それらをグローバルにすることは、他の関数がそれらを使用できることを意味します。 – zondo
アドバイス:グローバル変数を避け、変数を関数の引数として関数に渡し、関数の終わり(例えばタプルの内側)を関数を呼び出したコードに戻します。 – Evert