[英]Beautifulsoup: Soupy runny xml, single loop iterate through each item
[英]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.