You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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库添加飞机图片辅助猜测,目前用打印语句查看目标飞机;变量为西班牙语,敬请谅解。


问题原因

  1. 核心错误:random.choice(lis_av)作用于字典时,默认选取的是字典的键(1-6的数字),而非对应的飞机名称。当valor_posicion_random=2时,第一个选项会打印数字而非飞机名,导致显示混乱、用户无法正确选择。
  2. 依赖全局变量:函数posicion_random未接收valor_avion和valor_posicion_random作为参数,直接使用外部变量,代码耦合性高且易出错。
  3. 参数传递无效:函数内对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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 11:54:32