我正在尝试创建一个函数,该函数将一个值输入var
并输出一个值var2
,但是它不起作用。
我尝试使代码使用return函数返回值,但没有任何改变。
def translate_num(var, var2):
if var == 0:
var2 = ""
return var2
if var == 1:
var2 = "x"
return var2
if var == 2:
var2 = "o"
return var2
在这里仅是我使用代码#的一部分上下文,而不是整个上下文
top_lef = game[0][0]
top_mid = game[0][1]
top_rig = game[0][2]
mid_lef = game[1][0]
mid_mid = game[1][1]
mid_rig = game[1][2]
bot_lef = game[2][0]
bot_mid = game[2][1]
bot_rig = game[2][2]
translate_num(top_lef, var1)
translate_num(top_mid, var2)
translate_num(top_rig, var3)
translate_num(mid_lef, var4)
translate_num(mid_mid, var5)
translate_num(mid_rig, var6)
translate_num(bot_lef, var7)
translate_num(bot_mid, var8)
translate_num(bot_rig, var9)
print(" --- --- --- \n| ", var1, " || ", var2, " || ", var3, " | \n --- --- --- \n --- --- --- "
"\n| ", var4, " || ", var5, " || ", var6,
" |\n --- --- --- \n --- --- ---"
" \n| ", var7, " || ", var8, " || ", var9, " |\n --- --- ---")
Pycharm出现错误,表明未使用参数var2
,并且该函数从外部作用域遮盖了var2
。
我希望var2
,var3
,var4
等可以打印到translate_num将它们转换成的内容,但是它们按照我在代码前面所定义的那样打印。
答案 0 :(得分:2)
我希望
var2
,var3
,var4
等可以打印到translate_num将它们转换成的内容,但是它们按照我在代码前面所定义的那样打印。
您不能设置参数值。因此,var2 = ""
语句没有任何意义。您所做的是设置 local 变量。但是 caller 端的变量将不会更新。想象一下,您使用translate_num(0, 5)
调用了函数,那么您期望代码做什么?是否为5
文字分配一个字符串?如果用translate_num(0, 1+2)
调用它,然后将其分配给函数调用该怎么办?因此,这将导致很多奇怪的行为。某些编程语言允许这种“按引用传递”,例如C ++和C#(带有ref
和out
参数)。
因此,我们应该在此处使用返回值将结果传回并分配给变量:
def translate_num(i):
return 'xo'[i-1:i]
然后您可以设置变量,例如:
var1 = translate_num(top_lef)
var2 = translate_num(top_mid)
var3 = translate_num(top_rig)
# ...