从字典中选择随机值,然后排序i

2024-09-26 22:53:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图为codww2做一个随机类生成器,我几乎完成了,但我有一个问题。我试图选择随机记分条(我成功),但当我的程序打印记分条,他们不是从最便宜的最昂贵的顺序。我明白,这通常也不是这样,但我想它不同。你知道吗

所以我一直在想,我认为字典是关键,但我是Python的初学者,我以前没有真正使用过字典。你知道吗

这是我的得分榜:

scorestreaks = ["Molotov Cocktail", "Recon Aircraft", "Counter Recon 
Aircraft", "Care Package", "Fighter Pilot", "Glide Bomb", "Flamethrower", 
"Mortar Strike", "Artillery Barrage", "Flak Guns", "Emergency Airdrop", 
"Fire Bombing Run", "Paratroopers", "Carpet Bombing", "Ball Turret Gunner"]

这是我随机选择的东西:

ss1 = random.choice(scorestreaks)
ss2 = random.choice(scorestreaks)
ss3 = random.choice(scorestreaks)
if ss1 == ss2 or ss1 == ss3:
    ss1 = random.choice(scorestreaks)
    if ss1 == ss2 or ss1 == ss3:
        ss1 = random.choice(scorestreaks)
elif ss2 == ss3:
    ss2 = random.choice(scorestreaks)
    if ss2 == ss3 or ss2 == ss1:
        ss2 = random.choice(scorestreaks)

print "Scorestreaks: %s, %s, %s" %(ss1, ss2, ss3)

所以理想的情况下,我想订购的分数线时,他们是从最便宜的打印到最昂贵的。谢谢你的回答。你知道吗

编辑:

我做了一本字典(我希望我做的是正确的方式),包含了分数线的价格:

scorestreaks_prices = {"Molotov Cocktail": 300, "Recon Aircraft": 500, "Counter Recon Aircraft": 525, "Care Package": 575, "Fighter Pilot": 625, "Glide Bomb": 650, "Flamethrower": 700, "Mortar Strike": 750, "Artillery Barrage": 850, "Flak Guns": 950, "Emergency Airdrop": 1000, "Fire Bombing Run": 1050, "Paratroopers": 1250, "Carpet Bombing": 1400, "Ball Turret Gunner": 1700}

所以要说清楚: 当我选择三个随机的分数线,它会打印出类似“燃烧弹鸡尾酒”,“反侦察机”,“侦察机”。而不是:“燃烧弹鸡尾酒”,“侦察机”,“反侦察机”,这已订购的价格。那我该怎么做呢?你知道吗


Tags: orif字典randomchoice记分recon侦察机
1条回答
网友
1楼 · 发布于 2024-09-26 22:53:50

有许多可能的方法可以做到这一点,但基本上你想:

  • 取一个随机的项目子集
  • 按项目价格对子集排序
  • 以元组形式获取项目名称,您可以在字符串中使用它 格式化表达式

这里有一个解决方案:

scorestreaks_prices = {"Molotov Cocktail": 300, "Recon Aircraft": 500, 
    "Counter Recon Aircraft": 525, "Care Package": 575, "Fighter Pilot": 625, 
    "Glide Bomb": 650, "Flamethrower": 700, "Mortar Strike": 750, "Artillery Barrage": 850, 
    "Flak Guns": 950, "Emergency Airdrop": 1000, "Fire Bombing Run": 1050, 
    "Paratroopers": 1250, "Carpet Bombing": 1400, "Ball Turret Gunner": 1700}

# Use a dict comprehension to create a random 3-item subset of the full dict
ssItems = {item:scorestreaks_prices[item] for item in random.sample(scorestreaks_prices.keys(), 3)}
# Sort the subset dict by the value (i.e. price); the result is a list of the keys (i.e. the item names)
ss = sorted(ssItems, key=lambda x:ssItems[x])
# Format the item list into a string
print("Scorestreaks: %s, %s, %s" %tuple(ss))

要了解这是如何工作的,请在Python提示符下尝试dict理解(以及稍微容易掌握的列表理解)。例如,试试{x:len(x) for x in ['foo', 'bar', 'hello', 'z']}:你得到了什么?为什么?你知道吗

对初学者来说,lambda x:ssItems[x]也有点晦涩难懂,但它的意思只是“一个函数,从dictssItems返回keyx的值”。通过使用该函数作为key排序依据,我们按照每个项目的给定价格进行排序。你知道吗

随机选择不同项目的方法可能仍然会返回同一项目两次。使用random.sample可以保证这三个项目是不同的。你知道吗

相关问题 更多 >

    热门问题