【问题标题】:Why isn't the 'k' increasing in it's value?为什么“k”的值没有增加?
【发布时间】:2021-04-06 13:57:38
【问题描述】:

我正在尝试使用 python 将 ROMAN 数字转换为整数,但在编写此 for 循环时遇到了麻烦。我的CODE如下:

def romanToInt(s: str) -> int:
        sarr = [x for x in s]
        symbolBank = {
            'I' : 1,
            'V' : 5,
            'X' : 10,
            'L' : 50,
            'C' : 100,
            'D' : 500,
            'M' : 1000
        }
        prefixBank = {
            'I' : 1,
            'X' : 10,
            'C' : 100,
        }
        suffixBank = {
            'V' : 5,
            'X' : 10,
            'L' : 50,
            'C' : 100,
            'D' : 500,
            'M' : 1000
        }
        result = 0

        for k in range(len(sarr) - 1):
            print(k)
            if (sarr[k] in prefixBank) and (sarr[k+1] in suffixBank):
                value = suffixBank[sarr[k + 1]] - prefixBank[sarr[k]]
                literal = sarr[k] + sarr[k + 1]
                k += 1
            else:
                value = symbolBank[sarr[k]]
                literal = sarr[k]
            print('literal:', literal, 'value:', value)
            result += value

        if len(literal) < 2:
            value = prefixBank[sarr[len(sarr) - 1]]
            result += value
            
        return result

上述程序的OUTPUT如下:

0
literal: M value: 1000
1
literal: CM value: 900
2
literal: M value: 1000
3
literal: XC value: 90
4
literal: C value: 100
5
literal: IV value: 4
3094

我想知道为什么k += 1if 语句中不起作用。 我的意思是问-为什么在CMXC之后不跳过“文字”MC

【问题讨论】:

  • 你有一个前面的for语句for k in range(len(sarr) - 1):,k的值是根据它之前的值更新的,for循环中的语句k += 1会更新K但它会立即返回到for 循环中的值 + 1,在下一次执行 for 语句时。
  • K 增加了,但是在循环的下一次迭代中,K 将再次设置为 range 中的下一个值。

标签: python arrays python-3.x algorithm


【解决方案1】:

k 是一个迭代器。你的k += 1 注定要失败。当循环开始下一次迭代时,k += 1 将不计算在内。

【讨论】:

  • 知道了!改用while循环。谢谢
猜你喜欢
  • 2016-06-19
  • 1970-01-01
  • 2017-04-03
  • 1970-01-01
  • 2023-04-08
  • 2020-01-13
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多