我不明白我犯的错误。我尝试将displayGrid和updateGrid隔离到另一个txt文件中,而不使用ValueError函数作为输入,这样就可以工作了。但现在我将它输入到我的实际文件中,并对输入进行值错误检查,它就不再工作了。 我不明白的是,在displayGrid的第一次迭代中,没有显示错误,但是当我再次尝试使用它进行更新时,第87行显示了一个错误。以下是我得到的完整错误:
File "C:/Users/Dust/Desktop/111/trial.py", line 87, in displayGrid print("|" + grid[row-1][col-1],end = "")
TypeError: can only concatenate str (not "int") to str
以下是我的代码(为了上下文,我正在制作一个connect4游戏):
def play():
grid,grid_height,grid_width,p1_name,p1_char,p2_name,p2_char=getGameSettings()
displayGrid(grid,grid_height,grid_width)
updateGrid(grid,grid_height,grid_width,p1_char,p2_char)
displayGrid(grid,grid_height,grid_width)
updateGrid(grid,grid_height,grid_width,p1_char,p2_char)
displayGrid(grid,grid_height,grid_width)
def getGameSettings():
#PLAYER 1 NAME
while True:
p1_name=input("Enter p1_name: ")
if len(p1_name) > 15 or p1_name == '': #Validation of input p1_name
print("Input a valid name. Max of 15 characters only.")
p1_name=input("Enter p1_name: ")
else:
break
#PLAYER 1 CHARACTER
while True:
p1_char=input("Enter p1_character: ")
if len(p1_char) != 1 or p1_char=='' : #Validation of input p1_character
print("1 character only.")
p1_char=input("Enter p1_character: ")
else:
break
#PLAYER 2 NAME
while True:
p2_name=input("Enter p2_name: ")
if len(p2_name) > 15 or p2_name == p1_name or p2_name == '': #Validation of input p2_name
print("Max of 15 characters only or choose a different name.")
p2_name=input("Enter p2_name: ")
else:
break
#PLAYER 2 CHARACTER
while True:
p2_char=input("Enter p2_character: ")
if len(p2_char) != 1 or p2_char == p1_char or p2_char == '': #Validation of input p2_char
print("1 character only or choose a different character from player 1")
p2_char=input("Enter p2_character: ")
else:
break
while True: #VALIDATION OF INPUT OF GRID_WIDTH
try:
global grid_height
grid_height=int(input("Enter grid_height(6-10): "))
except ValueError: #if input is not the right type()
print('Ivalid input type. Enter an integer')
continue
if grid_height > 10 or grid_height < 6: #to check if input is within accepted values
print('Height must be less than 11 and greater than 5.')
continue
break
while True: #VALIDATION OF INPUT OF GRID_WIDTH
try:
global grid_width
grid_width=int(input("Enter grid_width: "))
except ValueError: #if input is not the right type()
print('Ivalid input type. Enter an integer')
continue
if grid_width > 9 or grid_width < 7: #to check if input is within accepted values
print('Width must be less than 10 and greater than 6.')
continue
break
#SETTING UP THE GRID
grid=[]
for row in range(grid_height): # FOR ROW
z =[]
for col in range(grid_width): # FOR COLUMN
z.append(" ")
grid.append(z)
return grid,grid_width,grid_width,p1_name,p1_char,p2_name,p2_char
def displayGrid(grid,grid_height,grid_width):
for row in range(grid_height):
for col in range(grid_width+1):
print("|" + grid[row-1][col-1],end = "")
print()
print(" "+" ".join([str(i) for i in range(1, grid_width+1)]))
return grid
def updateGrid(grid,p1_char,p2_char,p1_name,p2_name):
while True:
try:
move= int(input('Enter your move: '))
except ValueError:
print('Plese enter a valid input.')
if move < 1:
print('Please enter a valid input.')
continue
break
for i in range(1,grid_height+1):
if grid[grid_height-i][move-2]== " ":
grid[grid_height-i][move-2]= p1_char
else:
if grid[0][move-2] != " ":
updateGrid(grid,grid_height,grid_width,p1_char,p2_char)
else:
continue
break
return grid
#def get_input(player, grids, )
#def isWin():
#def isDraw():
#def play():
#displayGrid()
#updateGrid(grid)
if __name__ == '__main__':
play()
你可以用多种方法解决这个问题。您可以通过以下方法将
grid[row-1][col-1]
转换为str
:如果使用的是Python 3.6+,则可以使用f-string:
^{pr2}$如果您的Python版本是<;3.6,那么使用
str.format
:相关问题 更多 >
编程相关推荐