2016-07-24 24 views
0

私はこのコードを約1日作業しています。この1つの部分だけで数時間、私は26行目に属性エラーが残っていると言い続けています。残念ながらそれは私が持っているすべての情報です。私はそれを修正する無数の異なった方法を試して、多くのウェブサイト/フォーラムを検索しました。私はどんな助けにも感謝します。ここでは、コードは次のとおりです。Pythonの属性エラーif文

import itertools 
def answer(x, y, z): 
    monthdays = {31, 
       28, 
       31, 
       30, 
       31, 
       30, 
       31, 
       31, 
       30, 
       31, 
       30, 
       31} 
    real_outcomes = set() 
    MONTH = 0 
    DAY = 1 
    YEAR = 2 

    #perms = [[x, y, z],[x, z, y],[y, z, x],[y, x, z],[z, x, y],[z, y, x]] 
    possibilities = itertools.permutations([x, y, z]) 
    for perm in possibilities: 
     month_test = perm[MONTH] 
     day_test = perm[DAY] 
     #I keep receiving an attribute error on the line below 
*  if month_test <= 12 and day_test <= monthdays.get(month_test): 
      real_outcomes.add(perm) 

    if len(realOutcomes) > 1: 
     return "Ambiguous" 
    else: 
     return "%02d/%02d/%02d" % realOutcomes.pop() 

答えて

0

問題はmonthdaysget()メソッドを持っていないということです、そしてmonthdaysは、おそらく期待しないdictとして、setあるので、それはです。

コードを見ると、リストまたはタプルがmonthdaysに適しているようです。その後、

monthdays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 

と::

if month_test < len(monthdays) and day_test <= monthdays[month_test]: 

あなたのコードは、あなたが最終的に年を処理することになるでしょうことを示唆している、それが注文されていないとの重複を含めることはできませんので、セットは有用ではありません。その場合はcalendarモジュールを見てください。与えられた年と月の日数を与える関数monthrange()を提供し、うるう年を処理します。

from calendar import monthrange 

try: 
    if 1 <= perm[DAY] <= monthrange(perms[YEAR], perm[MONTH])[1]: 
     real_outcomes.add(perm) 
except ValueError as exc: 
    print(exc) # or pass if don't care 
+0

ただの簡単な質問です。 +1 –

+0

@PythonMaster:これは 'set'を宣言するための構文です。辞書には、値だけでなく、キー_と_の値も含まれています。 – mhawke

+0

私は実際にはそれをdictに変更して、それは完全に動作します!私が言ったように、私は少しPythonの新しいです。私はあなたが与えたコードでバージョンを試してみるつもりです。私は助けに感謝します!私はコロンがキーを設定するのではなくスプライスしたと思った。 –

-2

セットオブジェクト(あなたのケースの「monthdays」)は、属性を持っていない例えば、あなたはそれを反復するか、リストに変換する必要があります

「を取得」:

list(monthdays)[0]が返されます結果リストの最初の項目

+0

セットに重複を含めることはできず、固有の順序はありません。したがって、繰り返しやリストへの変換は役に立ちません。 – mhawke

+0

私のスニペットは重複や固有の順序と何が関係していますか?私はちょうど彼がそれから項目を得る方法を示しています – Bob

+0

あなたのコードを実行しようとすると、あなたは私が上げる問題を参照する必要があります。 – mhawke

関連する問題