2017-07-19 80 views
0

首先,我很抱歉壞頭銜,但我不知道什麼是合適的。我正在爲以下塊尋找更好的語法,以便我不重複自己。if elif else construct and full DRY conform

  • self.rulerMajorTickLabel和self.rulerMinorTickLabel可以是真或假
  • self.rulerMajorTickWidth和self.rulerMinorTickWidth只能是正浮點數

    if self.rulerMajorTickLabel and self.rulerMinorTickLabel: 
        if self.rulerMajorTickWidth > self.rulerMinorTickWidth: 
         halfTickHeight = self.rulerMajorTickWidth/2 
        else: 
         halfTickHeight = self.rulerMinorTickWidth/2 
    elif self.rulerMajorTickLabel: 
        halfTickHeight = self.rulerMajorTickWidth/2 
    elif self.rulerMinorTickLabel: 
        halfTickHeight = self.rulerMinorTickWidth/2 
    else: 
        halfTickHeight = 0 
    

非常感謝您!

+0

這是一個非常普遍的問題,在這裏我們有真的沒有足夠的信息來幫助你符合DRY原則。我建議先考慮如何將主要想法和次要想法分解爲幾種方法並從那裏開始。 –

+0

另外,當它們不是「真」時,它們有什麼潛在價值?值可以是「無」?它們會被定義爲屬性嗎?他們能成爲'假'嗎?或者它只是「0」? –

+0

self.rulerMajorTickLabel和self.rulerMinorTickLabel可以是True或False self.rulerMajorTickWidth和self.rulerMinorTickWidth只能是一個積極的浮點數。對不起,我很困惑 – doom4

回答

0

假設這裏有幾件事情可以使它工作得很好,所以你可能想要確保代碼中的其他地方。我的假設:

  • self.rulerMajorTickWidthself.rulerMinorTickWidth都爲正數,或等於零
  • 他們都定義爲屬性的,並尋找他們會不會引發錯誤
  • 你想要的只是更大二至2

假設所有的分,你可以簡單地做:

halfTickHeight = max(self.rulerMajorTickWidth, self.rulerMinorTickWidth)/2 

但是,如果它們的「false」值是None或undefined,則它更復雜。這就是爲什麼我建議確保在代碼中的其他地方,它是0或整數/浮點數。通過這樣做,因爲我只注意到標籤比寬的部分不同,你仍然可以瓶坯所有的檢查更容易:

如果他們實際上是布爾 False可以 float()他們等於0

編輯

tmpMajor = self.rulerMajorTickWidth if self.rulerMajorTickLabel else 0 
tmpMinor = self.rulerMinorTickWidth if self.rulerMinorTickLabel else 0 
halfTickHeight = max(tmpMajor, tmpMinor)/2 

即相當於所有if...elif...else條款從之前

+0

非常感謝您的評論 – doom4