我正在尝试一些东西,但我遇到了一个问题( NameError: name 'pole_a_wid' is not defined )--这是我的代码:
import random
#Random Pole Height
list = [11, 21, 9, 23, 13, 19, 27, 7]
random_pole_wid = random.choice(list)
if random_pole_wid == "11":
pole_a_wid = 11
pole_b_wid = 21
elif random_pole_wid == "21":
pole_a_wid = 21
pole_b_wid = 11
elif random_pole_wid == "9":
pole_a_wid = 9
pole_b_wid = 23
elif random_pole_wid == "23":
pole_a_wid = 23
pole_b_wid = 9
elif random_pole_wid == "13":
pole_a_wid = 13
pole_b_wid = 19
elif random_pole_wid == "19":
pole_a_wid = 19
pole_b_wid = 13
elif random_pole_wid == "27":
pole_a_wid = 27
pole_b_wid = 7
elif random_pole_wid == "7":
pole_a_wid = 7
pole_b_wid = 27
print(pole_a_wid,pole_b_wid)这就是我得到的错误:
print(pole_a_wid,pole_b_wid) NameError: name 'pole_a_wid' is not defined 发布于 2022-03-05 18:01:16
你没有“其他”的案子。您所检查的只是一堆相互排除的if -子句,但是如果不满足任何一种情况,您的代码就不会为值分配任何内容。
在本例中,您有一个包含int类型元素的列表,但是比较检查string,因此所有条件都是错误的。
使用这样的检查:random_pole_wid == 11:,它将工作。
编辑:通常情况下,您的代码包含8种不独立的情况,因为它们的4种情况是“镜像的”。您可以使代码更短、更易读,如下所示:
import random
# Random Pole Height
lst = [11, 21, 9, 23, 13, 19, 27, 7] # generally you should avoid overwriting python builtins such as 'list' with your variable names as that can cause hard to debug behaviours!
pole_a_wid = random.choice(lst)
if pole_a_wid in [9, 23, 13, 19]:
pole_b_wid = 32 - pole_a_wid
elif pole_a_wid in [11, 21]:
pole_b_wid = 33 - pole_a_wid
elif pole_a_wid in [27, 7]:
pole_b_wid = 34 - pole_a_wid
print(pole_a_wid, pole_b_wid)发布于 2022-03-05 18:01:26
值列表包含整数。但你在检查字符串值。
因此,所有的if语句都不是真语句。
因此,这两个变量永远不会被定义。
发布于 2022-03-05 18:04:03
您的主要问题是,您的列表包含整数值,但您正在将它们与字符串进行比较。
另外,您要对7进行两次测试,而不是对11进行测试。当选择11时,您会得到相同的错误,因为您没有匹配任何内容,因此这些值仍未定义。您可能应该在条件之前将这两个值设置为“默认”值,或者添加一个最终的else子句来处理非匹配。即使您的代码不应该需要这种逻辑,您已经问过这个问题的事实表明,为什么显式地添加这样的logic...catching代码错误通常会使查找和诊断它们变得更容易。
下面是您的代码的一个修改版本,它说明了我前面说过的内容,并且应该按照您的意愿行事:
import random
# Random Pole Height
list = [11, 21, 9, 23, 13, 19, 27, 7]
random_pole_wid = random.choice(list)
if random_pole_wid == 11:
pole_a_wid = 11
pole_b_wid = 21
elif random_pole_wid == 21:
pole_a_wid = 21
pole_b_wid = 11
elif random_pole_wid == 9:
pole_a_wid = 9
pole_b_wid = 23
elif random_pole_wid == 23:
pole_a_wid = 23
pole_b_wid = 9
elif random_pole_wid == 13:
pole_a_wid = 13
pole_b_wid = 19
elif random_pole_wid == 19:
pole_a_wid = 19
pole_b_wid = 13
elif random_pole_wid == 27:
pole_a_wid = 27
pole_b_wid = 7
elif random_pole_wid == 7:
pole_a_wid = 7
pole_b_wid = 27
else:
print(f"The chosen value '{random_pole_wid}' does not match any of the values being tested for")
pole_a_wid = 0
pole_b_wid = 0
print(pole_a_wid, pole_b_wid)一个更为简洁、可读性和可维护性的解决方案是创建一个dict来描述数据值及其之间的关系。dict的键将是每个可以随机选择的数值,而dict的值将是与该选择相匹配的两个数字。就像这样:
import random
# Random Pole Height
list = [11, 21, 9, 23, 13, 19, 27, 7]
random_pole_wid = random.choice(list)
data = {
11: (11, 21),
21: (21, 11),
9: (9, 23),
23: (23, 9),
13: (13, 19),
19: (19, 13),
27: (27, 7),
7: (7, 27),
}
if random_pole_wid in data:
pole_a_wid, pole_b_wid = data[random_pole_wid]
else:
print("The chosen value is not one of the expected choices.")
pole_a_wid, pole_b_wid = 0, 0
print(pole_a_wid, pole_b_wid)https://stackoverflow.com/questions/71364547
复制相似问题