arrays - 有没有办法用 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”并打印该数组。现在,当我尝试不同的事情时会出错。
解决方案
在您遇到“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”字符,您基本上是正确的。唯一需要注意的是,当您要求用户输入时,您的q1
and将被设置为字符串,因此您需要将它们转换为才能工作:q2
int
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!")
推荐阅读
- php - 为什么我的 Laravel 应用程序可以在我的本地主机上运行,但是当部署到 aws 时,它会错误地重定向?
- html - 如何重新排序 Bootstrap 4 中的列?
- linux - 如何根据片段长度对床文件进行子集化?
- pygments - How to use Dracula theme as a style in Pygments?
- google-calendar-api - 如何同步谷歌公共日历?
- oracle - Oracle为每位员工创建随机行数
- node.js - 注意插入新的子数组
- python - 如何通过pybind11在python中捕获C++的异常?
- python-3.x - 在将 Python 代码添加为 Kibana 插件时需要帮助
- html - 怎么修