/ / Tentando criar um gerador de caracteres aleatórios, mas nem sempre obtém uma resposta - python

Tentando fazer um gerador de caracteres aleatórios, mas nem sempre terá uma resposta - python

Estou tentando criar um gerador de caracteres aleatóriospara D&D. Até agora, sou capaz de tomar uma decisão sobre qual classe escolher com base nas duas maiores estatísticas, mas por algum motivo de vez em quando não recebo resposta. Meu código é bom, tanto quanto eu posso dizer, mas eu sou iniciante em python. Gostaria muito de saber por que ele nem sempre retorna respostas e como corrigi-lo.

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")

Respostas:

2 para resposta № 1

Seu código para obter o maior e o segundo maior não é correto:

largest = None
second_largest = None

for a in data:
if not largest or a > largest:
if largest:
second_largest = largest
largest = a

Se o atributo maior aparecer antes do segundo maior, second_largest não será preenchido. Uma maneira curta e legível seria usar apenas uma espécie, supondo que a eficiência não seja uma grande preocupação:

largest, second_largest = sorted(data, reverse=True)[:2]

1 para resposta № 2

Se o seu maior elemento for o primeiro, você nunca receberá o segundo maior atribuído. Você pode alterá-lo para:

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