【问题标题】:I'm receiving a TypeError: can only concatenate str (not "int") to str我收到一个 TypeError: can only concatenate str (not "int") to str
【发布时间】:2019-09-25 02:02:23
【问题描述】:

我不明白我遇到的错误。我试图将 displayGrid 和 updateGrid 隔离到另一个没有 ValueError 输入函数的 txt 文件中,它可以工作。但是现在我使用 ValueError 检查输入将它输入到我的真实文件中,它不再起作用。 我不明白的是在 displayGrid 的第一次迭代期间,错误没有显示,但是当我尝试再次使用它进行更新时,第 87 行显示错误。这是我得到的完整错误:

文件“C:/Users/Dust/Desktop/111/trial.py”,第 87 行,在 displayGrid 中 print("|" + grid[row-1][col-1],end = "")

TypeError: 只能将 str(不是“int”)连接到 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]intfloat
  • @lmiguelvargasf 我该如何解决?
  • 我刚刚添加了一个答案
  • 您可能还想返回正确的东西:return grid,grid_width,grid_width, …?
  • 它已修复!谢谢大家!

标签: python python-3.x list matrix


【解决方案1】:

您可以通过多种方式解决此问题。您可以通过以下方式将grid[row-1][col-1] 转换为str

print("|" + str(grid[row-1][col-1]), end="")

如果您使用的是 Python 3.6+,则可以使用 f-string:

print(f"|{grid[row-1][col-1]}", end="")

如果您的 Python 版本 str.format:

print("|{}".format(grid[row-1][col-1]), end="")

【讨论】:

  • @Imiguelvargasf 是的,是的!它修复了错误,谢谢!
  • @Imiguelvargasf 哦,当然,我会的!谢谢!
猜你喜欢
  • 2022-11-01
  • 2020-08-29
  • 2020-11-21
  • 2021-08-18
  • 1970-01-01
  • 2021-08-31
  • 2019-02-02
  • 2020-02-29
  • 2020-09-18
相关资源
最近更新 更多