简易字符串算法不起作用

时间:2013-09-28 14:33:24

标签: python string loops

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

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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的长度不均匀,那么当您将count增加2时,您将永远不会离开循环。当然,您希望用户输入偶数字符串,但这不会发生。更安全的条件是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

答案 2 :(得分: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]))