Python 编解码器18/19战列舰

Python 编解码器18/19战列舰,python,Python,关于此代码,我有一些问题: 当我在板上输入数字1、2、3等时,它相应地显示为2、3、4。我希望它从1开始计数,而不是从0开始;我该怎么做? 如果我只是按回车键,它显示一个错误;我该如何改变这一点? 你能告诉我是否有一些错误,或者这个代码是否可以更容易地完成? 1:board[guess\u row][guess\u col]=X应该是board[guess\u row-1][guess\u col-1]=X 2:见下文: from random import randint board = [

关于此代码,我有一些问题:

当我在板上输入数字1、2、3等时,它相应地显示为2、3、4。我希望它从1开始计数,而不是从0开始;我该怎么做? 如果我只是按回车键,它显示一个错误;我该如何改变这一点? 你能告诉我是否有一些错误,或者这个代码是否可以更容易地完成? 1:board[guess\u row][guess\u col]=X应该是board[guess\u row-1][guess\u col-1]=X

2:见下文:

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 "Let's play Battleship!"
print_board(board)

def random_row(board):
    return randint(0, len(board) - 1)

def random_col(board):
    return randint(0, len(board) - 1)

ship_row = random_row(board)
ship_col = random_col(board)
print ship_row
print ship_col

# Everything from here on should go in your for loop!
# Be sure to indent four spaces!
for turn in range(4):
    print "Turn", turn + 1# Print (turn + 1) here!
    guess_row = int(raw_input("Guess Row:"))
    guess_col = int(raw_input("Guess Col:"))
    if guess_row == ship_row and guess_col == ship_col:
        print "Congratulations! You sunk my battleship!"
        break
    else:
        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)
    if turn == 3:
        print "Game Over"
3:而不是这个:

try:
    guess_row = int(raw_input("Guess Row:"))
    guess_col = int(raw_input("Guess Col:"))
except ValueError:
    print "Your gunners were asleep on the job!"
    if turn == 3:
        print "Game Over"
    continue
使用列表理解:

board = []

for x in range(5):
    board.append(["O"] * 5)
在Python2中,通常最好使用xrange而不是range。在Python3中使用range

除此之外,您的代码非常好而且简单明了

这是程序的完整代码。我没有安装Python2,所以我在中测试了它,它工作得非常好

board = [['O' for i in range(5)] for j in range(5)]

它向我展示了:File python,第32行ValueError除外:^SyntaxError:当我尝试执行您在2中所做的操作时,语法无效上一行是否有所有必要的右括号?语法错误通常需要更多的上下文。你能把数字3放在一个代码中吗?是的,我检查了所有的缩进,它仍然给我一个错误。我已经在我的答案中添加了程序的完整代码。请仔细地将其与代码进行比较,以确定错误在哪里。令人毛骨悚然的是,我已将第3点从您的问题列表中删除。这可以说超出了堆栈溢出的范围。一旦你让这段代码正常工作,我会邀请你发布一个工作版本,以获得一些关于如何使它尽可能好的指针。
from random import randint

board = [['O' for i in range(5)] for j in range(5)]

def print_board(board):
    for row in board:
        print " ".join(row)

print "Let's play Battleship!"
print_board(board)

def random_row(board):
    return randint(0, len(board) - 1)

def random_col(board):
    return randint(0, len(board) - 1)

ship_row = random_row(board)
ship_col = random_col(board)
print ship_row
print ship_col

# Everything from here on should go in your for loop!
# Be sure to indent four spaces!
for turn in range(4):
    print "Turn", turn + 1# Print (turn + 1) here!
    try:
        guess_row = int(raw_input("Guess Row:"))
        guess_col = int(raw_input("Guess Col:"))
    except ValueError:
        print "Your gunners were asleep on the job!"
        if turn == 3:
            print "Game Over"
        continue
    if guess_row == ship_row and guess_col == ship_col:
        print "Congratulations! You sunk my battleship!"
        break
    else:
        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-1][guess_col-1] = "X"
            print_board(board)
    if turn == 3:
        print "Game Over"