/ / Cercare di creare un generatore di caratteri casuali ma non sempre ottenere una risposta: Python

Cercando di creare un generatore di caratteri casuali ma non sempre otterrà una risposta - python

Sto cercando di creare un generatore di caratteri casualiper D&D. Finora sono in grado di decidere quale classe scegliere in base alle due statistiche più grandi, ma per qualche motivo ogni tanto non ricevo risposta. Il mio codice va bene per quanto posso dire ma sono un principiante in Python. Mi piacerebbe sapere perché non restituirà sempre risposte e come risolverlo.

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

risposte:

2 per risposta № 1

Il tuo codice per ottenere il più grande e il secondo più grande non è corretto:

largest = None
second_largest = None

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

Se l'attributo più grande appare prima del secondo più grande, second_largest non verrà compilato. Un modo breve e leggibile sarebbe solo quello di utilizzare una sorta, supponendo che l'efficienza non sia così importante:

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

1 per risposta № 2

Se il tuo elemento più grande è il primo, non otterrai mai il second_largest assegnato. Puoi cambiarlo in:

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