我正试图为COD WW2做一个随机类生成器,我几乎完成了,但我有一个问题。我试图选择随机得分(在其中我成功),但当我的程序打印的分数,他们不是从最便宜到最昂贵的。我知道通常情况也不是这样,但我希望有不同的情况。
所以我一直在想,我认为字典是关键,但我是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}所以要说清楚:当我选择三个随机的记分记录时,它会打印一些类似“莫洛托夫鸡尾酒”,“反侦察飞机”,“侦察飞机”之类的东西。这不是:“莫洛托夫鸡尾酒”、“侦察飞机”、“反侦察飞机”,这是按价格订购的。那我该怎么做?
发布于 2018-01-19 15:35:45
有许多可能的方法可以这样做,但本质上您想:
这里有一个解决方案:
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]也有点模糊,但它仅仅意味着“一个从dict ssItems返回键x的值的函数”。通过使用这个函数作为key进行排序,我们根据每个项目的价格进行排序。
随机选择不同项的方法可能仍然会返回同一项两次。使用random.sample可以保证这三个项目是不同的。
https://stackoverflow.com/questions/48343525
复制相似问题