我必須創建一個代碼來大寫 string.split() 的偶數部分并取消奇數部分。然而,代碼只回傳字串的第一部分作為結果。我在 result() 中遇到了一些問題。我知道這一點,但有人可以指出確切的位置嗎?
編碼-
def somefunc(some_string):
x=some_string.split()
for something in x:
if x.index(something)%2==0:
return something.upper()
elif x.index(something)!=0:
return something.lower()
y=" ".join(x)
結果-
myfunc("hey dude")
'HEY'
uj5u.com熱心網友回復:
主要問題是您要提前回傳,請改為執行以下操作:
def some_func(some_string):
x = some_string.split()
result = []
for i, something in enumerate(x):
if i % 2 == 0:
result.append(something.upper())
else:
result.append(something.lower())
return " ".join(result)
print(some_func("hey dude"))
輸出
HEY dude
請注意,使用索引不起作用,請考慮重復單詞(例如"hey hey dude")的情況。解決方案是使用enumerate來跟蹤索引。作為替代方案,您可以使用串列理解:
def some_func(some_string):
x = some_string.split()
return " ".join([something.upper() if i % 2 == 0 else something.lower() for i, something in enumerate(x)])
筆記
您還可以利用 Python 函式是一等公民這一事實,并執行以下操作:
def some_func(some_string):
x = some_string.split()
cases = [str.upper, str.lower]
return " ".join([cases[i % 2](something) for i, something in enumerate(x)])
uj5u.com熱心網友回復:
正如其他人指出的那樣,函式只回傳一個值并終止。如果你想有很多回報怎么辦?Python 生成器是可能的!您已經以生成器風格撰寫了您的函式。
這是一個稍微修改過的生成器,它將遍歷一個字串,將其拆分并生成偶數單詞的大寫版本:
def uppercase_even(s):
for k, w in enumerate(s.split()):
yield w.lower() if k % 2 else w.upper()
它交替回傳(產生)小寫和大寫單詞。以下是您將如何使用它:
' '.join(uppercase_even('Hey My Dude'))
結果:
'HEY my DUDE'
uj5u.com熱心網友回復:
def some_method(txt):
return ' '.join(map(lambda x: x[1].lower() if x[0] % 2 else x[1].upper(), enumerate(txt.split(' '))))
some_method('Hello Dude')
輸出:
'HELLO dudde'
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/311471.html
上一篇:python中最長的相等數序列
