2017-02-20 3 views
0

Ich versuche, einen zufälligen Zeichengenerator für D & D zu machen. Bis jetzt bin ich in der Lage, eine Entscheidung darüber zu treffen, welche Klasse basierend auf dem zu wählen zwei größte Statistiken, aber aus irgendeinem Grund bekomme ich hin und wieder keine Antwort. Mein Code ist soweit in Ordnung, aber ich bin ein Anfänger in Python. Ich würde gerne wissen, warum es Antworten nicht immer zurückgibt und wie man es repariert.Versuch, einen zufälligen Zeichengenerator zu machen, wird aber nicht immer eine Antwort bekommen

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

Es ist schwer zu sagen. Ihr Code weist mehrere Fehler auf. Können Sie ein bestimmtes Beispiel für eine fehlgeschlagene Eingabe identifizieren? Versuchen Sie, ein Beispiel mit Eingabe, erhaltener Eingabe (falls vorhanden) und erwarteter Ausgabe anzugeben. Geben Sie außerdem ein konkretes Beispiel für Werte für die Liste "Daten" an. – iled

+1

1st: Keine andere Aussage. 2.: um 2 Elemente von 6 zu wählen, gibt es 15 mögliche Ergebnisse. Respektieren der Bestellung macht 30 verschiedene Kombinationen (größte und zweitgrößte nicht gleich) – Quickbeam2k1

+0

Falls jemand sich fragte, ob alle Möglichkeiten abgedeckt waren (sie sind): https://gist.github.com/minitech/97723bb4ae8d19b3b6b320a4995afb91 – Ryan

Antwort

2

Ihr Code für die größte bekommen und zweitgrößte ist nicht richtig:

largest = None 
second_largest = None 

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

Wenn das größte Attribut erscheint vor dem zweitgrößten, second_largest nicht ausgefüllt werden, um eine kurze und lesbar. Weg wäre nur eine Art zu verwenden, die Effizienz der Annahme ist nicht so viel von einer Besorgnis:

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

Danke. Ich werde das jetzt versuchen. –

+0

Danke das hat sofort funktioniert. –

1

Wenn Ihr größtes Element das erste ist, werden Sie nie die zweite bekommen _largest zugewiesen. Sie können es ändern 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 
Verwandte Themen