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)
我的代码没有通过测试,尽管一切都对我有效。告诉我,在哪里挖出来找出答案。
答案 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"))