首页 > 解决方案 > 有没有办法用 Python 3 替换数组中的变量?为我的硬件制作战舰游戏

问题描述

我正在制作战舰游戏,当用户没有正确猜测时,我需要用 X 替换数组中的变量(波浪号 ~ )。之后我还需要打印数组。 编辑:我正在使用 Python 3.7.2。

我尝试使用 "X" = myArray[x,y] 其中 x 和 y 是数组中需要替换的变量。我也尝试过删除和替换,但我不知道该怎么做。

import random


def setupArray():
    arr = []
    for i in range(7):
        row = []
        for j in range(7):
            row.append("  "+'~')
    arr.append(row)
    return arr


def printArray(arr): 
    for val in range(1):
        line2 = ("   "+"1"+"\t"+"  "+"2"+"\t"+"  "+"3"+"\t"+"  "+"4"+"\t"+"  "+"5"+"\t"+"  "+"6"+"\t"+"  "+"7")
        line3 = "1"
        line4 = "2"
        line5 = "3"
        line6 = "4"
        line7 = "5"
        line8 = "6"
        line9 = "7" 
        for val2 in range(7):
            line3 += (str(arr[val][val2])+"\t")
            line4 += (str(arr[val][val2])+"\t") 
            line5 += (str(arr[val][val2])+"\t")
            line6 += (str(arr[val][val2])+"\t")
            line7 += (str(arr[val][val2])+"\t")
            line8 += (str(arr[val][val2])+"\t")
            line9 += (str(arr[val][val2])+"\t")
        print(line2)
        print(line3)
        print(line4)
        print(line5)
        print(line6)
        print(line7)
        print(line8)
        print(line9)

initBoard = setupArray()

printArray(initBoard)

row = random.randint(1,7)
column = random.randint(1,7)

def shiplocation(initBoard):
    ship = ((row),(column))

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

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

print("Welcome to Battleship! You have 7 guesses!")

q1 = (input("Row?")).title()
q2 = (input("Column?")).title()

y = 0

while q1 != row and q2 != column:
    print("Try Again.")

此行是我要插入代码以标记 X 的区域。

    printArray(initBoard) #prints the array
    q1 = (input("Row?")).title()
    q2 = (input("Column?")).title() 
    y += 1
    print("incorrect guesses: " + str(y))
    if y == 7:
        print("You ran out of guesses!")
        exit()
"""
if q1 == q1 and q2 == q2:
    print("Repeated Value")
"""


if q1 == row and q2 == column:
    print("You won!")

预期的输出是当用户输入行和列并且错误时,该数组的变量被标记为“X”并打印该数组。现在,当我尝试不同的事情时会出错。

标签: arrayspython-3.x

解决方案


在您遇到“X”问题之前,我发现代码有两个问题。首先,由于循环的缩进,您的 setupArray() 函数已关闭。您希望 位于循环arr.append(row)内,for以便它在行中添加 7 次(否则,如果它在循环外,它只会执行一次)。

def setupArray():
    arr = []
    for i in range( 7 ):
        row = []
        for j in range( 7 ):
            row.append( "  " + '~' )
        arr.append( row )
    return arr

在调试期间,检查每个输出变量以确保它在运行函数后看起来正确是很有用的。在这种情况下,打印出initBoard变量会显示它只有一行。

其次,该printArray()函数不是查看每一行(它只查看第 1 行)。原因是您正在阅读arr[val][val2]whenval始终设置为 1 ( range(1)),而val2正确设置为 1-7 ( range(7))。它应该看起来如何的轮廓:

def printArray( arr ):
    line2 = ...
    line3 = ...
    for val in range( 7 ):
        for val2 in range( 7 ):
            line2 += str( arr[0][val2] ) + "\t"
            ...
    print( line2 )
    ...

最后,关于如何将数组设置为“X”字符,您基本上是正确的。唯一需要注意的是,当您要求用户输入时,您的q1and将被设置为字符串,因此您需要将它们转换为才能工作:q2int

initBoard[ int(q1)-1 ][ int(q2)-1 ] = '  X'

我唯一的一般提示是在脚本运行时打印出每个变量,以确保一切正常。另外,请注意,如果用户在要求输入时没有输入数字,则程序当前会中断。你应该做一些异常处理(例如通过try/except语法)来捕捉潜在的输入问题。

编辑:因为 OP 仍然存在问题,我将在下面粘贴整个更新的代码(更新最少)供 OP 审查。

import random

def setupArray():
    arr = []
    for i in range(7):
        row = []
        for j in range(7):
            row.append("  "+'~')
        arr.append(row)
    return arr 

def printArray(arr): 
    line2 = ("   "+"1"+"\t"+"  "+"2"+"\t"+"  "+"3"+"\t"+"  "+"4"+"\t"+"  "+"5"+"\t"+"  "+"6"+"\t"+"  "+"7")
    line3 = "1" 
    line4 = "2" 
    line5 = "3" 
    line6 = "4" 
    line7 = "5" 
    line8 = "6" 
    line9 = "7" 
    for val2 in range(7):
        line3 += (str(arr[0][val2])+"\t")
        line4 += (str(arr[1][val2])+"\t") 
        line5 += (str(arr[2][val2])+"\t")
        line6 += (str(arr[3][val2])+"\t")
        line7 += (str(arr[4][val2])+"\t")
        line8 += (str(arr[5][val2])+"\t")
        line9 += (str(arr[6][val2])+"\t")
    print(line2)
    print(line3)
    print(line4)
    print(line5)
    print(line6)
    print(line7)
    print(line8)
    print(line9)
initBoard = setupArray()

printArray(initBoard)

row = random.randint(1,7)
column = random.randint(1,7)

def shiplocation(initBoard):
    ship = ((row),(column))

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

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

print("Welcome to Battleship! You have 7 guesses!")

q1 = (input("Row?")).title()
q2 = (input("Column?")).title()

y = 0

while q1 != row and q2 != column:
    print("Try Again.")

    initBoard[ int(q1) - 1 ][ int( q2 ) - 1 ] = '  X'

    printArray(initBoard) #prints the array
    q1 = (input("Row?")).title()
    q2 = (input("Column?")).title()
    y += 1
    print("incorrect guesses: " + str(y))
    if y == 7:
        print("You ran out of guesses!")
        exit()
"""
if q1 == q1 and q2 == q2:
    print("Repeated Value")
"""

if q1 == row and q2 == column:
    print("You won!")

推荐阅读