私はランダムな文字ジェネレータを作ろうとしていますD&Dのために。これまでのところ、2つの最大の統計に基づいてどのクラスを選択するかを決めることができましたが、何らかの理由で毎回何の答えも得られません。私のコードは、私が知る限りは問題ありませんが、私はPythonの初心者です。私はなぜそれがいつも答えを返さないようにし、それを修正する方法を知りたいと思う。
data = [str,int,dex,con,wis,cha]
largest = None
second_largest = None
for a in data:
if not largest or a > largest:
if largest:
second_largest = largest
largest = a
if largest == wis and second_largest == cha or largest == cha and second_largest == str or largest == str and second_largest == cha or largest == str and second_largest == int:
print ("PALADIN")
elif largest == str and second_largest == dex or largest == str and second_largest == con or largest == con and second_largest == str:
print ("BARBARIAN")
elif largest == str and second_largest == wis or largest == con and second_largest == wis or largest == wis and second_largest == str or largest == wis and second_largest == con:
print ("CLERIC")
elif largest == int and second_largest == str or largest == int and second_largest == con or largest == con and second_largest == int or largest == wis and second_largest == int:
print ("WIZARD")
elif largest == int and second_largest == dex or largest == dex and second_largest == int or largest == cha and second_largest == wis:
print ("ROGUE")
elif largest == int and second_largest == wis:
print ("DRUID")
elif largest == int and second_largest == cha or largest == con and second_largest == cha or largest == cha and second_largest == int:
print ("SORCERER")
elif largest == dex and second_largest == str:
print ("MONK")
elif largest == dex and second_largest == con or largest == con and second_largest == dex:
print ("FIGHTER")
elif largest == dex and second_largest == wis or largest == wis and second_largest == dex:
print ("RANGER")
elif largest == dex and second_largest == cha:
print ("BARD")
elif largest == cha and second_largest == dex or largest == cha and second_largest == con:
print ("WARLOCK")
回答:
回答№1は2最大と2番目に大きいコードを取得するためのコードは正しくありません:
largest = None
second_largest = None
for a in data:
if not largest or a > largest:
if largest:
second_largest = largest
largest = a
2番目に大きい属性の前に最大の属性が表示される場合、 second_largest
簡単で読みやすい方法では、効率はそれほど懸念されていないと仮定して並べ替えを使用するだけです。
largest, second_largest = sorted(data, reverse=True)[:2]
回答№2の場合は1
あなたの最大の要素が最初の要素であれば、second_largestが割り当てられることは決してありません。 次のように変更することができます。
entlargest = -float("inf")
second_largest = -float("inf")
for a in data:
if a > second_largest:
second_largest = a
if second_largest > largest:
largest, second_largest = second_largest, largest