-2

我正在尝试检测字符串中的值并基于它创建一个新值。我制作了一个简单的模型来向您展示我的代码。问题是为什么我一运行它就崩溃了?

objekt = raw_input("Write a binary string: ")

nyfil = ""


count = 0

print objekt[count:2]

while count != len(objekt):
    if objekt[count:2] == "00":
        nyfil = nyfil + "0"
    elif objekt[count:2] == "11":
        nyfil += "1"
    elif objekt[count:2] == "01":
        nyfil += "L"
    elif objekt[count:2] == "10":
        nyfil += "C"
    else:
        pass
    count += 2

print nyfil
4

3 回答 3

2

您增加count了 2 但!=在循环中有一个比较while(而不是 a <)。因此,如果objekt长度不均匀,您将永远运行循环(例如,len(object)为 3,但 count 只取值 0、2、4,...)。

于 2013-09-28T14:39:18.730 回答
1
objekt[count:2]

随着 的增加count,这不会像您期望的那样工作。看到这个:

>>> s = '0123456789'
>>> s[0:2]
'01'
>>> s[1:2]
'1'
>>> s[2:2]
''
>>> s[3:2]
''
>>> s[2:4]
'23'
>>> s[4:6]
'45'

此外,您应该小心循环条件,例如count != len(objekt). 如果 的长度objekt不均匀,那么当您增加 2 时,您将永远不会脱离循环count。当然,您希望用户输入一个偶数字符串,但这种情况不太可能不会发生。更安全的条件是count < len(objekt).

因此,您的 while 循环可能如下所示:

while count < len(objekt):
    if objekt[count:count+2] == "00":
        nyfil = nyfil + "0"
    elif objekt[count:count+2] == "11":
        nyfil += "1"
    elif objekt[count:count+2] == "01":
        nyfil += "L"
    elif objekt[count:count+2] == "10":
        nyfil += "C"
    else:
        pass
    count += 2

现在为了简化一点,您可以将其存储objekt[count:count+2]在一个单独的变量中,这样您就不必在每次检查时都计算它。你也可以去掉这个else: pass部分,因为它实际上什么都不做:

while count < len(objekt):
    part = objekt[count:count+2]
    if part == "00":
        nyfil = nyfil + "0"
    elif part == "11":
        nyfil += "1"
    elif part == "01":
        nyfil += "L"
    elif part == "10":
        nyfil += "C"
    count += 2
于 2013-09-28T14:44:00.220 回答
0

您遇到的主要问题是您试图通过 2s 逐步遍历列表,但您的计数没有正确增加。

要逐个列出列表,您可以使用以下命令:

>>> i = '12345678'
>>> for pairs in zip(i[0::2], i[1::2]):
...     print pairs
...
('1', '2')
('3', '4')
('5', '6')
('7', '8')

此版本使用该循环以及查找字典来构建您的结果字符串:

d = {'00': '0', '11': '1', '01': 'L', '10': 'C'}

i = raw_input('Enter your string: ')
print ''.join(d.get(''.join(k), ''.join(k)) for k in zip(i[0::2], i[1::2]))
于 2013-09-28T14:43:10.757 回答