簡體   English   中英

如何使用if語句使for循環遍歷字符串中的每個項目?

[英]How to make a for loop iterate through each item in a string with an if statement?

我正在嘗試創建一個函數,該函數從用戶那里接收一個字符串,然后輸出相同的字符串。 然而,對於偶數位置的每個字母,它輸出相應的小寫字母,對於奇數位置的每個字母,它輸出相應的大寫字母。 請記住,一次只會傳遞一個單詞。

我試圖創建一個 for 循環,其中嵌套了一個 if 語句,但到目前為止,for 循環在遍歷第一個字母后停止。 我的代碼如下:

def converter(string):
    for letters in string:
        if len(letters) % 2 == 0:
            return letters.lower()
        elif len(letters)% 2 != 0:
            return letters.upper()

當我運行代碼時:
轉換器('應用程序')

我得到的輸出是'A'
預期的輸出應該是“aPp”

您需要知道的第一件事是,在 Python 中,字符串是不可變的。 所以“修改”一個字符串意味着你必須從頭開始構建一個新的字符串(在這里,我稱之為newstring )。

其次,你誤解了循環。 你說for letters in string 此循環遍歷字符串的每個字母。 在第一次迭代中, letters是強的第一個字母。 然后將其轉換為大寫(因為單個字母的長度始終為 1),然后返回。 你沒有到達其余的字母! 在下面的代碼中,我將復數更改為僅letter以明確這個想法。

這修正了所有這些問題:

def converter(string):
    newstring = ""
    for i, letter in enumerate(string):
        if i % 2 == 0:
            newstring += letter.lower()
        elif i % 2 != 0:
            newstring += letter.upper()
    return newstring

這可以歸結為一個很好的列表理解:

def converter(string):
    return "".join([letter.lower() if i % 2 == 0 else letter.upper()
                    for i, letter in enumerate(string)])
In [1]: def converter(string):
   ...:     return ''.join([j.upper() if i % 2 == 1 else j.lower() for i, j in enumerate(string)])


In [2]: converter('apple')
Out[2]: 'aPpLe'
''.join([s.lower() if c % 2 == 0 else s.upper() for c, s in enumerate('apple')])
# returns 'aPpLe'

首先檢查條件,然后使用內置的漂亮的舊enumerate遍歷字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM