簡體   English   中英

理解Python類實例

[英]Understanding Python Class instances

我正在研究一個使用python類的問題,並且有一個構造函數來給出一個die的邊數和一個用於根據邊數返回的隨機數擲出die的函數。 我意識到代碼是非常基本的,但是我很難理解如何總結三個不同側面的擲骰子。 由於變量正在傳遞函數實例,因此獲取該值的最佳方法是什么? 這就是我所擁有的。

*澄清......我可以將roll1.roll_dice()的總數加起來,但我必須單獨顯示每個擲骰子,然后顯示三個骰子的總數。 我可以做其中任何一個但不是兩個。

class Die():

        def __init__(self, s = 6):
            self.sides = s
        def roll_die(self):
            x = random.randint(1,self.sides)
            return x

        roll1 = Die()   #Rolling die 1 with the default side of 6
        roll2 = Die(4)  #Rolling die 2 with 4 sides
        roll3 = Die(12) #Rolling die 3 with 12 sides

        print roll1.roll_die()  
        print roll2.roll_die()
        print roll3.roll_die()

您可以將結果存儲在列表中:

rolls = [Die(n).roll_die() for n in (6, 4, 12)]

然后你可以顯示個別結果

>>> print rolls
[5, 2, 6]

或者總結一下

>>> print sum(rolls)
13

或者,相反,您可以保持總計:

total = 0
for n in (6, 4, 12):
    value = Die(n).roll_die()
    print "Rolled a", value
    total += value
print "Total is", total

(編輯以反映對問題的更改/澄清)

我不確定你到底困惑的確切位置。 您需要做的最簡單的事情是將您要滾動的特定骰子(對象)的概念與動作(滾動它)分開。 我會從這里開始:

d6 = Die() #create die 1 with the default side of 6
d4 = Die(4) #create die 2 with 4 sides
d12 = Die(12) #create die 3 with 12 sides

roll1 = d6.roll_die()
roll2 = d4.roll_die()
roll3 = d12.roll_die()

print "%d\n%d\n%d\nsum = %d" % (roll1, roll2, roll3, roll1 + roll2 + roll3)

...然后用列表等獲得更多的愛好者

僅存儲最后一卷也可能很有用,這樣您就可以隨時獲取它。

def __init__(self, s = 6):
    self.sides = s
    self.last_roll = None

def roll_die(self):
    self.last_roll = random.randint(1,self.sides)
    return self.last_roll

由於roll_die返回一個值,您可以添加這些值。

嘗試這個。

roll1.roll_die() + roll2.roll_die()

怎么了?

你可以把數字加起來。 如果您想要總結n個卷的結果,請考慮將此函數添加到類中:

def sum_of_n_rolls(self, n)
    return sum(self.roll_die() for _ in range(n))

另外,考慮將roll_die重命名為roll 顯而易見的是,這不是關於滾動岩石,因為該方法是Die類的一部分。


編輯 :我現在讀到你需要打印中間卷。 考慮:

def n_rolls(self, n):
    return [self.roll_die() for _ in range(n)]

現在你可以滾動7面模具10次:

rolls = Die(7).n_rolls(10)
print(rolls, sum(rolls))

猜猜我會這樣做:

# Create dice
sides = [6,4,12]
dice = [Die(s) for s in sides]

# Roll dice
rolls = [die.roll_die() for die in dice]

# Print rolls
for roll in rolls:
    print roll

如果您願意,還可以結合以下幾個步驟:

for num_sides in [6,4,12]:
    print Die(num_sides).roll_die()

如果我理解正確你想要一個類屬性。

更新:添加了一種自動重置總數的方法

import random

class Die():
    _total = 0

    @classmethod
    def total(cls):
        t = cls._total
        cls._total = 0
        return t

    def __init__(self, s=6):
        self.sides = s

    def roll_die(self):
        x = random.randint(1,self.sides)
        self.__class__._total += x
        return x

roll1 = Die()   #Rolling die 1 with the default side of 6
roll2 = Die(4)  #Rolling die 2 with 4 sides
roll3 = Die(12) #Rolling die 3 with 12 sides

print roll1.roll_die()  
print roll2.roll_die()
print roll3.roll_die()
print Die.total()
print "--"
print roll1.roll_die()  
print roll2.roll_die()
print roll3.roll_die()
print Die.total()

讓我們變得瘋狂:)(結合我的上一個答案)

class Die():
    def __init__(self, s = 6):
        self.sides = s
        self.last_roll = None

    def roll_die(self):
        self.last_roll = random.randint(1,self.sides)
        return self.last_roll

dice = map(Die, (6, 4, 12))
rolls = map(Die.roll_die, dice)

print rolls
print sum(rolls)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM