Python属性错误if语句

Python属性错误if语句,python,attributes,attributeerror,Python,Attributes,Attributeerror,我已经为这个代码工作了大约一天了。在这一部分的几个小时里,它一直在说我在第26行有一个属性错误。不幸的是,这是我所有的信息。我尝试了无数种不同的方法来修复它,并搜索了许多网站/论坛。谢谢你的帮助。代码如下: import itertools def answer(x, y, z): monthdays = {31, 28, 31, 30, 31,

我已经为这个代码工作了大约一天了。在这一部分的几个小时里,它一直在说我在第26行有一个属性错误。不幸的是,这是我所有的信息。我尝试了无数种不同的方法来修复它,并搜索了许多网站/论坛。谢谢你的帮助。代码如下:

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()
导入itertools
def回答(x,y,z):
monthdays={31,
28,
31, 
30, 
31, 
30, 
31, 
31, 
30, 
31, 
30, 
31}
实际结果=集合()
月份=0
天=1
年份=2
#perms=[[x,y,z],[x,z,y],[y,z,x],[y,x,z],[z,x,y],[z,y,x]]
可能性=itertools.置换([x,y,z])
对于烫发的可能性:
月\测试=perm[月]
日\测试=烫发[日]
#我在下面的行中不断收到属性错误

*如果month_test,问题在于
monthdays
没有
get()
方法,这是因为
monthdays
是一个
set
,而不是您可能期望的
dict

查看您的代码,列表或元组似乎适合
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]:
set对象(在您的示例中为“monthdays”)没有属性“get”

您应该对其进行迭代或将其转换为列表,例如:


list(monthdays)[0]
将返回结果列表的第一项

只是一个简单的问题,为什么不是dict+1@PythonMaster:因为这是声明
集的语法。字典包含键和值,而不仅仅是值。我实际上只是将它改成了dict,它工作得非常完美!正如我所说,我对python有点陌生。我还将尝试使用您提供的代码的版本。我感谢你的帮助!我以为冒号会把它拼接起来而不是设置一个key@TrevorMurphy:您可以使用字典,但是,您只是通过使用列表索引作为字典键来模拟列表。话虽如此,字典可能更好,因为您可以将月份映射到基于1的键(您可能正在使用),从而产生更可读的代码。集合不能包含重复项,并且没有固有的顺序。因此,迭代或转换到列表将没有帮助。我的代码段与重复项和固有顺序有什么关系?我只是展示他如何从ittry运行你的代码中获取项目,你应该看到我提出的问题。问题是,@Bob,OP想要每个月的天数。但是,
monthdays
是一个集合,所以它实际上看起来是这样的:
set([28,30,31])
。将其转换为具有
list(monthdays)
的列表将给出
[28,30,31]
。OP将如何从中确定6月份的天数?类似地,迭代也没有帮助,因为它只会迭代集合中的3项。这就是为什么我建议你试试你的建议,这样你就可以自己看到问题所在了。而且,你的回答没有用,所以我也投了反对票。对不起,这就是为什么。而且,如果是你否决了我的答案,非常感谢;)
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