我正在尝试创建一个函数,它以字符串为参数,返回相同的字符串,但字符串中的大小写字母交替。我知道一个更长的解决方案,但我想出了一个解决方案,但下面的解决方案不起作用,我想知道为什么这个不起作用。
def myfunc(*args):
return [b.lower() if a%2 else b.upper() for a,b in enumerate(args)]上面的代码给了我一个完整的大写字符串作为输出,例如:
>>> myfunc('Hello')
['HELLO']发布于 2020-02-03 04:52:37
好的,首先,你的函数现在不接受单个字符串,但它可以接受几个变量(因为你放在args前面的* ),因此当你给它传递参数"Hello"时,它实际上得到了一个元组对象,比如('Hello', )。因此,在for循环中,实际上是遍历该元组,而不是遍历字符串的字符。
如果您想获取字符串,只需删除*。
def myfunc(args):
return "".join([b.lower() if a%2 else b.upper() for a,b in enumerate(args)])请注意,您的操作返回的不是一个字符串,而是一个字符列表。"".join([])会将列表中的字符连接成一个字符串,由""分隔(即无任何内容)
发布于 2020-02-03 04:47:16
您需要解压args (*args),但是这将返回一个列表,因此您还需要再次连接字符串。
return "".join([b.lower() if a%2 else b.upper() for a,b in enumerate(*args)])正如评论中所指出的,只有当只有一个参数时,这才有效,如果没有,您可能想要将字符串连接在一起,其中一种方法是使用chain,然后将其传递给枚举
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)))https://stackoverflow.com/questions/60030381
复制相似问题