Python UnboundLocalError:表示变量isn';t在使用前定义

Python UnboundLocalError:表示变量isn';t在使用前定义,python,Python,当我运行我的游戏功能时,我得到以下错误: Traceback (most recent call last): File "<stdin>", line 2, in <module> File "hog.py", line 162, in play if is_swap(score0,score1)== True and who == 0: File "hog.py", line 121, in is_swap elif swap1 =

当我运行我的游戏功能时,我得到以下错误:

    Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "hog.py", line 162, in play
    if is_swap(score0,score1)== True and who == 0:
  File "hog.py", line 121, in is_swap
    elif swap1 == score0:
UnboundLocalError: local variable 'swap1' referenced before assignment
回溯(最近一次呼叫最后一次):
文件“”,第2行,在
文件“hog.py”,第162行,正在播放中
如果是_swap(score0,score1)=True,而who==0:
文件“hog.py”,第121行,在is_交换中
elif swap1==0分:
UnboundLocalError:赋值前引用了局部变量“swap1”
以下是错误中引用的两个函数(首先是父函数,然后是子函数):

def play(战略0,战略1,得分0=0,得分1=0,目标=goal_分数):
“”“模拟一场游戏,返回两名玩家的最终分数
球员0的得分第一,球员1的得分第二。
策略是将两个总分作为参数的函数
(当前玩家的分数和对手的分数),并返回
当前玩家本回合将掷骰子的数量。
strategy0:玩家0的策略函数,谁先玩
策略1:第二名玩家1的策略功能
得分0:球员0的起始得分
分数1:球员1的起始分数
"""
谁=0#哪位玩家将要进行回合,0(第一)或1(第二)
#开始问题5
得分为0 100分:
s0String=str(分数0)
x=S0字符串[0]
y=S0字符串[1]
z=S0字符串[2]
swap0=int(z+y)
#翻转记分1
如果分数1>=10且分数1<100:
s1String=str(分数1)
i=s1字符串[0]
j=s1字符串[1]
swap1=int(j+i)
elif评分1<10分:
i='0'
j=str(分数1)
swap1=int(j+i)
elif评分1>100:
s1String=str(分数1)
i=s1字符串[0]
j=s1字符串[1]
f=s1字符串[2]
swap1=int(f+j)
#交换分数基于翻转相等
如果swap0==得分1:
返回真值
elif swap1==0分:
返回真值
其他:
返回错误

我不知道它想要什么。目前,swap0在is swap函数中使用之前已被定义,并且在游戏中被正确调用。

如果
/
elif
逻辑的任何分支都不能处理
score1
正好为100的情况。这使得
swap1
未定义,从而导致您描述的错误

为了避免这种情况,请确保您的不同条件覆盖所有分支。通常,如果您将最后一个分支保留为常规的
else
而不是
elif
,这是最简单的。您还可以通过更改签入条件的顺序来简化条件,如下所示:

if score1 < 10:
    i = '0'
    j = str(score1)
    swap1 = int(j+i) 
elif score1 < 100:
    s1String = str(score1)
    i = s1String[0]
    j = s1String[1]
    swap1 = int(j+i) 
else: # score1 >= 100
    s1String = str(score1)
    i = s1String[0]
    j = s1String[1]
    f = s1String[2]
    swap1 = int(f+j)   
如果分数1<10:
i='0'
j=str(分数1)
swap1=int(j+i)
elif评分1<100分:
s1String=str(分数1)
i=s1字符串[0]
j=s1字符串[1]
swap1=int(j+i)
其他:#得分1>=100
s1String=str(分数1)
i=s1字符串[0]
j=s1字符串[1]
f=s1字符串[2]
swap1=int(f+j)

因为您设置为初始分配的任何条件都不会发生。因此,当它到达抛出错误的行时:
swap1==score0
swap1
从未被声明和赋值。你需要修改你的条件陈述,以确保它们的行为符合预期。谢谢你,我现在对自己非常失望,但谢谢你
if score1 < 10:
    i = '0'
    j = str(score1)
    swap1 = int(j+i) 
elif score1 < 100:
    s1String = str(score1)
    i = s1String[0]
    j = s1String[1]
    swap1 = int(j+i) 
else: # score1 >= 100
    s1String = str(score1)
    i = s1String[0]
    j = s1String[1]
    f = s1String[2]
    swap1 = int(f+j)