簡體   English   中英

不小心將列表更改為生成器

[英]Accidentally changed a list to generator

我正在寫《戰艦》游戲,但遇到了一些問題。我已經寫了一些代碼行,足以創建10x10的地圖,隨機確定了船只的位置,並讓玩家有10個回合的猜測。現在,我嘗試放置第一行和第一列中的數字1-10使地圖更加清晰。不幸的是,看起來在添加數字后,我將列表更改為其他內容:

from random import randint

board = []

board.append((str(n) for n in(range(0, 11))))
liczba_kolumn = 10

for x in range(9):
    board.append([str(x + 1)] +["O"] * liczba_kolumn)

board.append(["10O"] + ["O"] * (liczba_kolumn - 1))

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(1, len(board))

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

ship_row = random_row(board)
ship_col = random_col(board) `
for turn in range(10):

    print ("Turn " + str(liczba_prob)) 
    guess_row = input("Guess Row:") 
    guess_col = input("Guess Col:")
    liczba_prob = liczba_prob - 1
    if guess_row == "" or guess_col == "":
        print ("guess the location")
    else:

        guess_row = int(guess_row) - 1
        guess_col = int(guess_col) - 1
        if guess_row == ship_row and guess_col == ship_col:
            print ("Congratulations! You sunk my battleship!")
            break
        else:
            if (guess_row < 0 or guess_row > 9) or (guess_col < 0 or             guess_col > 9):
                print ("Wrong localisation")
            elif(board[guess_row][guess_col] == "X"):
                print ("You already guessed that one.")

第一個錯誤是

return randint(1, len(board[0]))
TypeError: object of type 'generator' has no len()

我將兩個random_functions從len()都更改為“ 11”。 但是下一個錯誤是

elif(board[guess_row][guess_col] == "X"):
TypeError: 'generator' object is not subscriptable.

我的問題是-我在哪一刻將board []列表更改為“ generator”,如何將其重新變成列表?

編輯:

謝謝您的回答,他們對我有很大幫助。 現在,我試圖理解另一件事-為什么代碼

board = []
board.append(["10O"] + ["O"] * (10))
print(" ".join(board))

返回錯誤:序列項0:預期的str實例,找到列表? 第一和第二項都放在括號中。 看起來差不多的代碼不會返回錯誤:

board = []
board.append(["10O"] + ["O"] * 10)
def print_board(board):
    for row in board:
        print(" ".join(row))
print_board(board)

board.append((str(n) for n in(range(0, 11))))將生成器附加到board 您可能想要.extend().insert([str(n) ... ]) (觀看[]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM