2010-06-04 19 views
5

Kısmen dört zar döndüren ve en düşük zarları çıktıdan çıkaracak bir program yapıyorum. Ben kullanıyorum kod benim so-far sınırlı kodlama yeteneğinden ile gelebilir en iyisiPython'da rastgele çıktıları organize etmenin daha verimli bir yolu var mı?

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 

olduğunu. Dört zarın büyüklük sırasına göre düzenlenmesi için daha iyi bir yol var mı? Yoksa bunu yapmanın en iyi yolunu kullandığım kod mu?

+1

sadece bir ipucu, random.randrange bir başlangıç ​​parametre kabul eder. Sonucu 1'e eklemekten kaçınmak için 'random.randrange (1, 7)' yi kullanın. – Ponkadoodle

+0

Bunu yapan random.randint olduğunu düşündüm ve randrange 0'dan o sayıya rastgele bir sayıyı temsil eden tek bir sayı olmalıydı. Her ne kadar şimdi tekrar kodlara baksam da, 6 – Mella

+0

yerine 5 kullanmalıydım. Şüpheniz varsa, belgelere bakın. randrange: http://docs.python.org/library/random.html#random.randrange ve randint: http://docs.python.org/library/random.html#random.randint –

cevap

8

sorted kullanarak listeyi sıralamak, bir listede zar koyun ve bir dilim kullanarak küçük elemanı kaldırın:

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

Veya daha basit olduğunu ve zar çok varsa da daha hızlı olacaktır alternatif: asgari kalıp bulmak ve hepsini toplamından onu çıkarmak için min kullanın:

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

toplamı (zar) [(4) aralığında x random.randint (6 1) ile], böylece zar = - dk (zar) Bu, tüm yerine Gönderilen blok? lol gibi görünüyor çok zaman harcadım. bir değişken mi yoksa işlevin sadece bir kısmı mı? – Mella

+0

@Matt: Evet, ihtiyacınız olan her şey bu. 'X' kullanılmayan bir değişkendir. –

+0

Eğlence ipucu: Kullanılmayan bir değişken için '_' yer tutucu olarak kullanabilirsiniz. Örneğin: '[range (4)] için 0 [random.randint (1, 6)]' – jathanism

İlgili konular