Python嵌套随机选择中互斥变量定义失效问题求助
问题解决:嵌套随机选择中变量互斥失效的问题
问题原因
你写的嵌套代码里,z1和z2是在x、y变量的互斥校验(while循环)之前就完成赋值了。后面while循环重新生成互斥的x_choice1/x_choice2、y_choice1/y_choice2时,z1、z2并没有同步更新,依然保留最开始的旧值。最终final1、final2用的还是不符合互斥要求的旧组合,自然会出现重复问题。
修正方案
把z1、z2的赋值语句移到两个while循环之后,确保它们使用的是已经通过互斥校验的x、y选择值。
修正后的完整代码
import random x = ["x1", "x2", "x3", "x4"] y = ["y1", "y2", "y3", "y4"] # 初始随机赋值 x_choice1 = random.choice(x) y_choice1 = random.choice(y) x_choice2 = random.choice(x) y_choice2 = random.choice(y) # 互斥校验与重分配 while x_choice1 == x_choice2: print("reassigning x variables") x_choice1 = random.choice(x) x_choice2 = random.choice(x) while y_choice1 == y_choice2: print("reassigning y variables") y_choice1 = random.choice(y) y_choice2 = random.choice(y) # 生成z1、z2,确保用的是互斥后的变量 z1 = x_choice1 + " " + y_choice1 z2 = x_choice2 + " " + y_choice2 # 生成最终列表与选择 final1 = ["first: " + z1, "first: " + z1, "first: " + z1] final2 = ["second: " + z2, "second: " + z2, "second: " + z2] final_choice1 = str(random.choice(final1)) final_choice2 = str(random.choice(final2)) output = final_choice1 + " " + final_choice2 print(output)
额外优化建议
如果想避免重复生成再校验的低效逻辑,可以直接用random.sample一次性选出两个互斥元素,代码更简洁高效:
import random x = ["x1", "x2", "x3", "x4"] y = ["y1", "y2", "y3", "y4"] # 一次性获取两个不重复的x选择 x_choice1, x_choice2 = random.sample(x, 2) # 一次性获取两个不重复的y选择 y_choice1, y_choice2 = random.sample(y, 2) z1 = x_choice1 + " " + y_choice1 z2 = x_choice2 + " " + y_choice2 final1 = ["first: " + z1] * 3 final2 = ["second: " + z2] * 3 final_choice1 = random.choice(final1) final_choice2 = random.choice(final2) output = f"{final_choice1} {final_choice2}" print(output)
这个写法不需要while循环,直接通过random.sample从列表中抽取指定数量的不重复元素,逻辑更清晰,执行效率也更高。
内容的提问来源于stack exchange,提问作者Connor Davis
相关产品推荐
相关产品推荐

