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