【问题标题】:Accidentally changed a list to generator不小心将列表更改为生成器
【发布时间】:2017-04-30 17:48:52
【问题描述】:

我正在编写一款战舰游戏,但遇到了一些问题。我已经编写了几行代码,足以创建一个 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[] 列表更改为“生成器”,如何将其转回列表?

编辑:

感谢您的回答,他们对我帮助很大。现在我试图理解一个不同的东西 - 为什么代码

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)

【问题讨论】:

  • (str(n) for n in range(0, 11)) 是一个生成器。 [str(n) for n in range(0, 11)] 是一个列表。

标签: python list generator


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-09-07
    • 2017-10-21
    • 2022-01-10
    • 1970-01-01
    • 2012-03-24
    • 2020-12-06
    • 2011-11-22
    • 2016-04-21
    • 1970-01-01
    相关资源
    最近更新 更多