2010-06-04 7 views
5

Ich mache ein Programm, das zum Teil vier Würfel würfelt und den niedrigsten Würfel vom Ergebnis abzieht. Der Code, den ich benutze, istGibt es eine effizientere Methode, zufällige Ergebnisse nach Größe in Python zu organisieren?

die1 = random.randrange(6) + 1 
die2 = random.randrange(6) + 1 
die3 = random.randrange(6) + 1 
die4 = random.randrange(6) + 1 
if die1 <= die2 and die1 <= die3 and die1 <= die4: 
    drop = die1 
elif die2 <= die1 and die2 <= die3 and die2 <= die4: 
    drop = die2 
elif die3 <= die1 and die3 <= die2 and die3 <= die4: 
    drop = die3 
else: 
    drop = die4 

cha = die1 + die2 + die3 + die4 - drop 

Das ist das Beste, das ich von meiner so-weit begrenzten Kodierungsfähigkeit kommen konnte. Gibt es einen besseren Weg, um die vier Würfel in der Reihenfolge ihrer Größe zu ordnen, dann addiere die drei höchsten, während du den Rest ignorierst? Oder verwende ich den Code, den ich dafür am besten verwende?

+1

nur ein Tipp, random.randrange akzeptiert einen Startparameter. Verwenden Sie 'random.randrange (1, 7)', um das Hinzufügen von 1 zum Ergebnis zu vermeiden. – Ponkadoodle

+0

Ich dachte, es war random.randint, die das getan hat, und randrange musste eine einzelne Zahl sein, die eine Zufallszahl von 0 bis zu dieser Zahl darstellt. Obwohl ich jetzt, nachdem ich den Code nochmal angeschaut habe, hätte ich 5 anstatt 6 – Mella

+0

verwenden sollen. Im Zweifelsfall siehe die Dokumentation. randrange: http://docs.python.org/library/random.html#random.randrange und randint: http://docs.python.org/library/random.html#random.randint –

Antwort

8

Setzen Sie die Würfel in einer Liste, sortieren Sie die Liste mit sorted und entfernen Sie das kleinste Element mit einer Scheibe:

>>> import random 
>>> dice = [random.randint(1, 6) for x in range(4)] 
>>> sum(sorted(dice)[1:]) 
13 

Oder eine Alternative, die einfacher ist und auch schneller sein, wenn Sie viele Würfel haben: verwenden min die minimale Form zu finden und subtrahieren sie sich aus der Summe von allen:

>>> sum(dice) - min(dice) 
13 
+0

so Würfel = [random.randint (1, 6) für x in Bereich (4)] Summe (Würfel) - min (Würfel) ersetzt, dass die gesamte Block ich gepostet? lol ich verschwendete viel Zeit, wie es aussieht. ist x eine Variable oder ist das nur ein Teil der Funktion? – Mella

+0

@Matt: Ja, das ist alles was Sie brauchen. Das 'x' ist eine unbenutzte Variable. –

+0

Fun Tipp: Sie können '_' als Platzhalter für eine nicht verwendete Variable verwenden. Zum Beispiel: '[random.randint (1, 6) für _ im Bereich (4)]' – jathanism

Verwandte Themen