为何调用int()后变量仍为string类型?求修复方案
问题:类型转换未生效,输出类型不符合预期
以下是主代码片段:
Tile = SelectTile() int(Tile) TileY = Tile TileX = 0 #Temporary debug: print("type of tile is: ", type(Tile), "type of TileY is: ", type(TileY))
预期输出:
type of tile is: <class 'int'> type of TileY is: <class 'int'>
实际输出:
type of tile is: <class 'str'> type of TileY is: <class 'str'>
附SelectTile函数代码:
def SelectTile(): print("Select Tile to put \"O\" in:") print("") print(" 1 ॥ 2 ॥ 3 ") print("===॥===॥===") print(" 4 ॥ 5 ॥ 6 ") print("===॥===॥===") print(" 7 ॥ 8 ॥ 9 ") Tile = input() int(Tile) #if Tile != 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8 or 9: # print("Invalid Tile! Try again") # SelectTile() return Tile
原因分析
Python 的 int() 函数不会直接修改原变量,它会返回一个新的整数对象。你在两处都调用了 int(Tile) 但没有把返回值重新赋值给 Tile,所以 Tile 始终是 input() 返回的字符串类型,后续赋值给 TileY 自然也是字符串类型。
修复方案
只需要在调用 int() 时,把转换后的结果重新赋值给 Tile 即可,最佳修复位置是在 SelectTile 函数内部,这样函数直接返回整数,外部代码无需再处理:
修改后的 SelectTile 函数:
def SelectTile(): print("Select Tile to put \"O\" in:") print("") print(" 1 ॥ 2 ॥ 3 ") print("===॥===॥===") print(" 4 ॥ 5 ॥ 6 ") print("===॥===॥===") print(" 7 ॥ 8 ॥ 9 ") Tile = input() # 将转换后的整数重新赋值给 Tile Tile = int(Tile) # 可以取消注释下面的校验逻辑(注意原逻辑有问题,需修正为正确判断方式) # if Tile not in (1,2,3,4,5,6,7,8,9): # print("Invalid Tile! Try again") # return SelectTile() return Tile
同时主代码里多余的 int(Tile) 可以删除,简化为:
Tile = SelectTile() TileY = Tile TileX = 0 print("type of tile is: ", type(Tile), "type of TileY is: ", type(TileY))
这样运行后,输出就会符合预期,Tile 和 TileY 都会是整数类型。
内容的提问来源于stack exchange,提问作者fozzy
相关产品推荐
相关产品推荐

