2016-03-27 226 views
2

我想將字符串的字符從小寫更改爲大寫。 在我的代碼下面,我的實際輸出是「a」:請告訴我我錯在哪裏,並解釋我爲什麼? 在此先感謝Python:替換字符串中的大寫字母和小寫字母

test = "AltERNating" 

def to_alternating_case(string): 
    words = list(string) 
    for word in words: 
     if word.isupper() == True: 
      return word.lower() 
     else: 
      return word.upper() 

print to_alternating_case(test) 
+0

之所以你的代碼不工作是「迴歸「將離開當前函數('to_alternating_case()')。如果你想實現.swapcase()用於教育目的 - 改變「單詞」 - 列表而不是返回第一個字符。 – folkol

回答

8

它看起來像你想顛倒該字符串的情況下,試試這個:

>>> 'AltERNating'.swapcase() 
'aLTernATING' 
1

這是因爲你的函數只返回第一個字符。我的意思是return關鍵字會破壞您的for循環。

另外,請注意,由於you can iterate over a string正如您對列表所做的那樣,因此不需要將字符串轉換爲列表。

如果你正在尋找一個算法的解決方案,而不是swapcase()然後修改你的方法,而不是這樣:在輸入字符串中的字符

test = "AltERNating" 

def to_alternating_case(string): 
    res = "" 
    for word in string: 
     if word.isupper() == True: 
      res = res + word.lower() 
     else: 
      res = res + word.upper() 
    return res 


print to_alternating_case(test) 
1

你的循環迭代。然後它從第一次迭代返回。因此,你總是得到1個字符的返回值。

test = "AltERNating" 

def to_alternating_case(string): 
    words = list(string) 
    rval = '' 
    for c in words: 
     if word.isupper(): 
      rval += c.lower() 
     else: 
      rval += c.upper() 
    return rval  

print to_alternating_case(test) 
1

你應該是這樣做的:

test = "AltERNating" 

def to_alternating_case(string): 
    words = list(string) 
    newstring="" 
     if word.isupper() == True: 
      newstring+=word.lower() 
     else: 
      newstring+=word.upper() 
    return alternative 
print to_alternating_case(test) 
3

有兩個答案,這樣:一個容易,一個很難。

最簡單的一個

Python有一個內置的功能,要做到這一點,我不準確記得它是什麼,但沿着

string.swapcase() 

硬盤一個

東西線

您可以定義自己的功能。你創建函數的方式是錯誤的,因爲 遍歷一個字符串將逐字符地返回它,並且你只返回第一個字母而不是繼續迭代。

def to_alternating_case(string): 
    temp = "" 
    for character in string: 
     if character.isupper() == True: 
      temp += character.lower() 
     else: 
      temp += word.upper() 
    return temp 
1

你遍歷這是不是你期待什麼字交替後返回第一字母,也有一些建議,像你這樣的可以直接遍歷在Python字符串,而不是將它們轉換爲列表和表達,如果<變量名稱> ==如果<變量名稱爲>,則可以直接簡化爲True。經過修改的答案如下:

test = "AltERNating" 

def to_alternating_case(string): 
    result = '' 
    for word in string: 
     if word.isupper(): 
      result += word.lower() 
     else: 
      result += word.upper() 
    return result 

print to_alternating_case(test) 

或使用列表理解:

def to_alternating_case(string): 
    result =[word.lower() if word.isupper() else word.upper() for word in string] 
    return ''.join(result) 

或使用地圖,拉姆達:

def to_alternating_case(string): 
    result = map(lambda word:word.lower() if word.isupper() else word.upper(), string) 
    return ''.join(result) 
相關問題