/ /ランダムな文字ジェネレータを作成しようとするが、常に答えを得るわけではない - python

ランダムな文字ジェネレータを作成しようとするが、常に答えは得られない - python

私はランダムな文字ジェネレータを作ろうとしています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