AttributeError:对象“ int”没有属性

时间:2020-05-23 07:02:31

标签: python

var obj = {
      "car": 2,
      "train": 8,
      "plane": 5
}

我打电话给class RomanNumerals(): def __init__(self,number): self.num = number def from_roman(self): int_num=0 rom = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000} i=0 while (i<len(self.num)): if(i+1==len(self.num)): int_num+=rom[self.num[i]] break else: if (rom[self.num[i]]<rom[self.num[i+1]]): int_num+=rom[self.num[i+1]]-rom[self.num[i]] i+=2 else: int_num+=rom[self.num[i]] i+=1 return int_num def to_roman(self): val = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1) syb = ('M', 'CM', 'D', 'CD','C', 'XC','L','XL','X','IX','V','IV','I') roman_num = "" for i in range(len(val)): count = int(self.num / val[i]) roman_num += syb[i]*int(count) self.num -= val[i] * count return roman_num -它给出了一个错误:

RomanNumerals.to_roman (1000)

我的代码没有通过测试,尽管一切都对我有效。告诉我,在哪里挖出来找出答案。

5 个答案:

答案 0 :(得分:0)

如果您致电RomanNumerals.to_roman (1000),那么您将以self的身份传递1000。但是self应该是您的类的实例。

to_roman是一个实例方法,您应该在您的类的实例上调用它。

r = RomanNumerals(1000)
print(r.to_roman())

(尽管我在from_roman中注意到,您似乎期望self.num是字符串或列表,这与您在to_roman中对待它的方式不一致。)< / p>

或者,如果仅将to_roman用作独立函数,则应删除该类并编写to_roman以将参数接受为纯整数。

答案 1 :(得分:0)

我对此非常了解,因此我检查了班级的表现。这是Codewar的任务,在测试中有这样的测试:

RomanNumerals.to_roman (1000)

答案 2 :(得分:0)

我知道为该任务编写函数会更容易,但是该任务指出您需要编写一个类,并且通过这样一个奇怪的请求进行测试。

答案 3 :(得分:0)

我知道了。这是我的问题的代码:

class RomanNumerals():

    def from_roman(num_rom):
        int_num=0
        rom = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
        i=0
        while (i<len(num_rom)):
            if(i+1==len(num_rom)):
                int_num+=rom[num_rom[i]]
                break
            else:
                if (rom[num_rom[i]]<rom[num_rom[i+1]]):
                    int_num+=rom[num_rom[i+1]]-rom[num_rom[i]]
                    i+=2
                else:
                    int_num+=rom[num_rom[i]]
                    i+=1
        return int_num

    def to_roman(num_ar):
        val = (1000, 900,  500, 400, 100,  90, 50,  40, 10,  9,   5,  4,   1)
        syb = ('M',  'CM', 'D', 'CD','C', 'XC','L','XL','X','IX','V','IV','I')
        roman_num = ""
        for i in range(len(val)):
            count = int(num_ar / val[i])
            roman_num += syb[i]*int(count)
            num_ar -= val[i] * count
        return roman_num

print(RomanNumerals.to_roman(1000))

我没想到他们会开始对我不利。这个网站的创建似乎是为了帮助和向不合格的人解释...

答案 4 :(得分:0)

更优雅的解决方法:

class Solution(object):
    def romanToInt(self, s):
        """
        :type s: str
        :rtype: int
        """
        roman = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000,'IV':4,'IX':9,'XL':40,'XC':90,'CD':400,'CM':900}
        i = 0
        num = 0
        while i < len(s):
            if i+1<len(s) and s[i:i+2] in roman:
                num+=roman[s[i:i+2]]
                i+=2
            else:
                #print(i)
                num+=roman[s[i]]
                i+=1
        return num
ob1 = Solution()
print(ob1.romanToInt("III"))
print(ob1.romanToInt("CDXLIII"))