返回语句中的条件

2024-04-20 14:00:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个函数,它以字符串作为参数,返回相同的字符串,但在字符串中交替使用大写和小写字母。我知道一个较长的解决方案,但我提出了下面的解决方案,但它不起作用,我想知道为什么它不起作用

def myfunc(*args):
    return [b.lower() if a%2 else b.upper() for a,b in enumerate(args)]

上面的代码为我提供了一个完整的大写字符串作为输出,例如:

>>> myfunc('Hello')
['HELLO']

Tags: 函数字符串for参数returnifdefargs
2条回答

您需要解包args(*args),但这将返回一个列表,因此您也需要再次加入字符串

return "".join([b.lower() if a%2 else b.upper() for a,b in enumerate(*args)])

如注释中所述,这仅在只有一个参数的情况下有效,如果没有,您可能希望将字符串连接在一起,其中一种方法是使用chain,然后将其传递给enumerate

from itertools import chain
if len(args) > 1:
    single_arg = chain.from_iterable(args)
return "".join(b.lower() if a%2 else b.upper() for a,b in enumerate(chain.from_iterable(single_arg)))

好的,首先你的函数现在没有接受一个字符串,但是它可以接受几个变量(因为你把*放在参数前面),因此当你把参数"Hello"传递给它时,它实际上会得到一个元组对象,比如('Hello', )。因此,在for循环中,实际上是迭代该元组,而不是迭代字符串的字符

如果您想获取字符串,只需删除*

def myfunc(args):
    return "".join([b.lower() if a%2 else b.upper() for a,b in enumerate(args)])

请注意,该操作返回的不是字符串,而是字符列表。"".join([])将列表中的字符连接成一个字符串,由""分隔(即无)

相关问题 更多 >