2013-09-28 26 views
-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 
+5

什麼意思是崩潰?什麼是錯誤?我們不必猜測它 –

回答

2

,都將增加2 count,但必須在while環路(而不是<)一!=比較。因此,如果objekt的長度不均勻,您將永遠運行循環(例如,len(object)爲3,但計數僅取值0,2,4,...)。

0

您所遇到的主要問題是您嘗試按2秒逐步瀏覽列表,但您的計數沒有正確遞增。

要一步三三兩兩的列表,你可以使用這個:

>>> 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])) 
1
objekt[count:2] 

這個,隨着count的增加,將不會像你期望的那樣工作。看到這個:

>>> s = '' 
>>> 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