2017-04-26 194 views
-3

我正在尝试制作一个简单的Python代码,用罗马数字替换数字。为了做到这一点,我需要得到每个数字的位置,用罗马数字代替它。但是,我的代码似乎不工作。使用if语句

number = range(1,21) 
number = list(number) 
number = str(number) 
for i in number: 
    for x in i: 
     if i.index(x) == 0: 
      if x == "1": 
       x.replace(x, "X") 
      elif x == "2": 
       x.replace(x, "XX") 
     else: 
      if x == 1: 
       x.replace(x, "I") 
      elif x == 2: 
       x.replace(x, "II") 
      elif x == 3: 
       x.replace(x, "III") 
      elif x == 4: 
       x.replace(x, "IV") 
      elif x == "5": 
       x.replace(x, "V") 
      elif x == "6": 
       x.replace(x, "VI") 
      elif x == "7": 
       x.replace(x, "VII") 
      elif x == "8": 
       x.replace(x, "VIII") 
      elif x == "9": 
       x.replace(x, "IX") 
      else: 
       x.replace(x, "") 
print number 

我怀疑它与我的if语句的工作方式有关,但我不确定。任何意见,将不胜感激。

+2

'x.replace(x,“X”)'你认为这样做了什么? (然后阅读文档并重新评估你对该问题的回答) – njzk2

+1

除了@ njzk2所说的内容之外,前三行还会生成一个长字符串,而不是你想要的字符串列表。尝试在交互式Python提示符中键入'str(list(range(1,21)))'来查看。 –

回答

1

ifelif子句长序列通常是一个应该使用一种或多种类型的字典的标志。

numstrings = [str(i) for i in range(1, 100)] 

d0 = {'0':'', '1':'I', '2':'II', '3':'III', '4':'IV', 
     '5':'V', '6':'VI', '7':'VII', '8':'VIII', '9':'IX'} 
d10 = {'0':'', '1':'X', '2':'XX', '3':'XXX', '4':'XL', 
     '5':'L', '6':'LX', '7':'LXXX', '8':'LXXX', '9':'XC'} 
for s in numstrings: 
    if len(s) == 1: 
     r = d0[s] 
    elif len(s) == 2: 
     r = d10[s[0]] + d0[s[1]] 
    else: 
     r = '??' 
    print(r) 
+0

初学者需要注意的是:if和elif这两个子句的长序列并不是字典的标志,而是_definitely_是你不断地将一个变量映射到别的东西上。 – byxor

+0

感谢您改进建议。 –