Python猜飞机游戏问题求助:valor_posicion_random为2时出错
猜飞机游戏代码问题排查与修复
我是Python新手,正在制作一款猜飞机的小游戏。使用random库编写代码时,发现当变量valor_posicion_random的值为2时程序出现问题,不清楚原因。以下是我的代码:
import random x=0 res=0 lis_av = { 1:"Airbus A380" , 2:"Airbus A340" , 3:"Airbus A330" , 4:"Boeing 777" , 5:"Boeing 787" , 6:"Boeing 747"} def posicion_random(lis_av, res): print(lis_av[valor_avion]) if valor_posicion_random == 1: print("\n 1.",lis_av[valor_avion],"\n 2.",random.choice(lis_av)) elif valor_posicion_random == 2: print("\n 1." , random.choice(lis_av), "\n 2.",lis_av[valor_avion]) res=int(input("What plane is it?")) print(lis_av) while x==0: valor_avion = random.randint(1,6) valor_posicion_random = random.randint(1,2) posicion_random(lis_av, res) x=int(input("Try again? (1=No//0=Yes)"))
备注:后续我会使用PIL库添加飞机图片辅助猜测,目前用打印语句查看目标飞机;变量为西班牙语,敬请谅解。
问题原因
- 核心错误:
random.choice(lis_av)作用于字典时,默认选取的是字典的键(1-6的数字),而非对应的飞机名称。当valor_posicion_random=2时,第一个选项会打印数字而非飞机名,导致显示混乱、用户无法正确选择。 - 依赖全局变量:函数
posicion_random未接收valor_avion和valor_posicion_random作为参数,直接使用外部变量,代码耦合性高且易出错。 - 参数传递无效:函数内对
res的赋值无法影响外部变量,因为Python的整数是传值传递。
修正后的代码
import random x = 0 lis_av = { 1: "Airbus A380", 2: "Airbus A340", 3: "Airbus A330", 4: "Boeing 777", 5: "Boeing 787", 6: "Boeing 747" } def posicion_random(lis_av, valor_avion, valor_posicion_random): # 打印目标飞机(测试用,后续可替换为PIL图片) print(lis_av[valor_avion]) # 随机获取一个不同的飞机名称 random_plane = random.choice([v for v in lis_av.values() if v != lis_av[valor_avion]]) if valor_posicion_random == 1: print(f"\n 1. {lis_av[valor_avion]} \n 2. {random_plane}") elif valor_posicion_random == 2: print(f"\n 1. {random_plane} \n 2. {lis_av[valor_avion]}") # 返回用户选择 return int(input("What plane is it?")) print(lis_av) while x == 0: valor_avion = random.randint(1, 6) valor_posicion_random = random.randint(1, 2) # 接收用户选择结果 res = posicion_random(lis_av, valor_avion, valor_posicion_random) x = int(input("Try again? (1=No//0=Yes)"))
关键修改说明
- 用
random.choice([v for v in lis_av.values() if v != lis_av[valor_avion]])随机选取不同于目标飞机的名称,避免出现两个选项相同的情况。 - 将
valor_avion和valor_posicion_random作为参数传入函数,消除对全局变量的依赖。 - 让函数返回用户的选择结果,确保外部能获取到输入值。
- 使用f-string优化打印语句的可读性。
内容的提问来源于stack exchange,提问作者Burritodeltodo
相关产品推荐
相关产品推荐

