列出对象出现检查器python

时间:2014-10-11 00:49:03

标签: python list

我正在开发一个小项目,我在编程时遇到了一些错误。这是一个基本的战舰游戏,到目前为止我有两个“船”设置,并且当我在我身边或敌人身边都被击中时我会让游戏结束。

def enemy_board():
global enemy_grid
enemy_grid = []
for i in range (0,10):
    enemy_grid.append(["="] * 10)
def random_row_one(enemy_grid):
    return randint(0, len(enemy_grid) - 1)
def random_col_one(enemy_grid):
    return randint(0, len(enemy_grid) - 1)   
def random_row_two(enemy_grid):
    return randint(0, len(enemy_grid) - 1)
def random_col_two(enemy_grid):
    return randint(0, len(enemy_grid) - 1)
global x_one
x_one = random_row_one(enemy_grid)
global y_one
y_one = random_col_one(enemy_grid)
global x_two
x_two = random_row_two(enemy_grid)
global y_two
y_two = random_col_two(enemy_grid)
print(x_one)
print(y_one)
print(x_two)
print(y_two)

所以这是我列表的基础,但后来在代码中它给了我一点麻烦。

elif enemy_grid.count("H") == 2:
    print("\nYou got them all!\n")
    break

更新 对不起,我有点不清楚我的意思。

def my_board():
   global my_grid
    my_grid = []
    for i in range (0,10):
        my_grid.append(["O"] * 10)
        def my_row_one(my_grid):
        int(input("Where do you wish to position your first ship on the x-axis? "))
    def my_col_one(my_grid):
        int(input("Where do you wish to position your first ship on the y-axis? "))
    global x_mio
    x_mio = my_row_one(my_grid)
    global y_mio
    y_mio = my_col_one(my_grid)
    def my_row_two(my_grid):
        int(input("\nWhere do you wish to position your other ship on the x-axis? "))
    def my_col_two(my_grid):
    int(input("Where do you wish to position your other ship on the y-axis? "))
    global x_mit
    x_mit = my_row_two(my_grid)
    global y_mit
    y_mit = my_col_two(my_grid)   
def enemy_board():
    global enemy_grid
    enemy_grid = []
    for i in range (0,10):
        enemy_grid.append(["="] * 10)
    def random_row_one(enemy_grid):
        return randint(0, len(enemy_grid) - 1)
    def random_col_one(enemy_grid):
        return randint(0, len(enemy_grid) - 1)   
    def random_row_two(enemy_grid):
        return randint(0, len(enemy_grid) - 1)
    def random_col_two(enemy_grid):
        return randint(0, len(enemy_grid) - 1)
    global x_one
    x_one = random_row_one(enemy_grid)
    global y_one
    y_one = random_col_one(enemy_grid)
    global x_two
    x_two = random_row_two(enemy_grid)
    global y_two
    y_two = random_col_two(enemy_grid)
    print(x_one)
    print(y_one)
    print(x_two)
    print(y_two)
title()
my_board()
enemy_board()
m = 20
guesses = m
while guesses > 0:      
    def printmi_board(my_grid):
        for row in my_grid:
            print(" ".join(row))
    def printyu_board(enemy_grid):
        for row in enemy_grid:
            print (" ".join(row))
    print(printmi_board(my_grid))
    print(printyu_board(enemy_grid))
    try:
        guess_x = int(input("Take aim at the x-xalue: "))
    except ValueError:
        print("\nI SAID TAKE AIM!\n")
        guess_x = int(input("Take aim at the x-xalue: "))
    try:
        guess_y = int(input("Take aim at the y-value: "))
    except ValueError:
        print("\nDo you have wax in your ears?? AIM!\n")
        guess_y = int(input("Take aim at the y-value: "))
    comp_x = randint(0, len(my_grid) - 1)
    comp_y = randint(0, len(my_grid) - 1)
    if x_one == guess_x and y_one == guess_y:
        print("\nYou hit one! \n")
        enemy_grid[guess_x - 1][guess_y - 1] = "H"
        continue
    elif x_two == guess_x and y_two == guess_y:
        enemy_grid[guess_x - 1][guess_y - 1] = "H"
        print("\nYou hit one! \n")
        continue
    elif enemy_grid[guess_x - 1][guess_y - 1] == "O":
        print("\nYou've tried there before! Here's another round.\n")
        print("You have " + str(guesses) + " rounds left, cadet.\n\n")
        continue
    elif enemy_grid.count("H") == 2:
        print("\nYou got them all!\n")
        break
    else:
        if guess_x not in range(10) or guess_y not in range(10):
            print("\nThat's not even in the OCEAN!! Take another free round then.\n")
            print("You have " + str(guesses) + " rounds left, cadet.\n\n")
            continue
        elif enemy_grid[guess_x][guess_y] == "O":
            print("\nYou've tried there before! Here's another round.\n")
            print("You have " + str(guesses) + " rounds left, cadet.\n\n")
            continue
        else:
            print("\nYou missed, soldier!\n")
            guesses = guesses - 1
            print("You have " + str(guesses) + " rounds left, cadet.\n\n")
            enemy_grid[guess_x - 1][guess_y - 1] = "O"
            if comp_x == x_mio and comp_y == y_mio:
                my_grid[comp_x - 1][comp_y - 1] = "H"
                print("\nThe enemy hit you! \n")
                continue
            elif comp_x == x_mit and comp_y == y_mit:
                my_grid[comp_x - 1][comp_y - 1] = "H"
                print("\nThe enemy hit you! \n")
                continue
            elif my_grid.count("H") == 2:
                print("We have to retreat! They've sunken all of your ships...")
                break
            else:
                my_grid[comp_x - 1][comp_y - 1] = "="
                continue

如果有任何不同,我正在使用python 3。因此,如果玩家击中网格上的正确位置,那么它将显示为“H”而不是“=”或“O”。所以我只是想知道我是否可以将那些“H”用于结束IF循环。

1 个答案:

答案 0 :(得分:0)

你还没有真正解释过这个问题,而且很多代码都缺失了,很难告诉你哪些是错的,我会去猜它虽然。

我的猜测是你创造了一个' ='网格代表一个球员的牌,然后如果他们的船被击中'你替换了' ='在那个位置使用' H'。

您创建的结构(enemy_grid)似乎类似于:

[[====]
 [====]
 [====]
 [....]]

在这种情况下,你的测试enemy_grid.count("H")没有意义,因为enemy_grid是一个包含其他列表的列表(所以Hs的数量总是为0 - 他们会更深入到第二层清单。)

您可能希望进行更多测试:

[cell for row in enemy_grid for cell in row].count('H')