2014-04-09 167 views
0

例如一個字符串:更換使用For循環

old_key = '' 
key = '----' 

for i in key: 
    print(i) 
    if all (i) == "-": 
    print('nochange') 
    else: 
    old_key = old_key.replace(old_key,key) 

    print(old_key) 

輸出:

---- 

什麼是我的方法錯誤?由於密鑰包含所有(' - '),爲什麼old_key被更改? 我沒有正確使用所有功能?

任何想法?

回答

0

all所操作的迭代。沒有一個單一的元素。如果您執行下面這段代碼段:

for i in key: 
    all(i) == '-' 

你會看到False印刷多次,這就是爲什麼你的執行塊else

擺脫循環,併爲您if塊做到這一點,而不是:

if len(set(key)) == 1 and key[0] == '-': 
    print "Not changed" 

上面的代碼做什麼,它集轉換出來的名單key的。由於Python中的集合不能有重複元素set(key)就變成了-。我們現在必須確保集合(鍵)中只有一個元素,並且該元素是-if len(set(key)) == 1 and key[0] == '-':負責檢查。

即,:

old_key = '' 
key = '----' 
if len(set(key)) == 1 and key[0] == '-': 
    print "Not changed" 
else: 
    old_key = old_key.replace(old_key,key) 
+0

你的代碼工作,但我(Python的初學者)不明白「如果」語句的邏輯。你能解釋一下嗎? – user3454234

+0

@ user3454234更新 – shaktimaan

0

我不能正確地使用所有的功能?

沒有,all()函數將返回True如果在迭代回報True所有參數。在你的情況,當傳遞給所有的字符串的每個字符將會返回True(如字符串作爲迭代處理):

>>> all("-") 
True 

但是,那麼你將執行

>>> True == "-" 
False 

,你可以看到評估板爲False,導致你進入你的else條款,與key

0

不知道關於Python自己更換old_key,但看起來這是爲什麼:

for i in key: 
    print(i) 

key取爲與一個值的數組我可以想像,只是打印出來。代碼的其餘什麼也不做,因爲要更換'與key - 但目前還沒有的情況下,'