我已经编写了一个基本函数,它使用作为参数传递的任何两个单词字符串,检查两个单词的索引是否匹配并返回True,否则为False。
def alliteration_check(str):
sp1, sp2 = str.split()
if sp1[0].upper() == sp2[0].upper():
return True
else:
return False我想知道是否有可能改变这里的标准来吸收**kwargs?我最近才学到这个概念,所以我试着理解如何将它付诸实践。
本质上,我的函数输出将是用户可以放置与参数一样多的单词,并且只有当每个字符串的所有第一个索引匹配时,它才返回True。我只是不知道如何编写函数,或者它是否可能?
提前感谢!
发布于 2020-12-06 16:14:46
不要给变量(包括参数)命名str,因为它会隐藏内置的str函数/类型!您可以使用str作为类型注释,但它应该在参数名称(如)的之后出现。
**kwargs的思想是让您的函数能够接受一组任意的关键字参数(而不是位置参数)。在函数的实现中,参数可以作为dict使用。
def alliteration_check(**kwargs: str) -> bool:
for s in kwargs.values():
w1, w2 = s.split()
if w1[0].upper() != w2[0].upper():
return False
return True您需要使用关键字参数调用此函数,如下所示:
alliteration_check(thing1="zig zag", other_thing="awkward alligator")如果希望用户能够使用任意数量的位置参数(而不是关键字参数)调用函数,请使用*args
def alliteration_check(*args: str) -> bool:
for s in args:
w1, w2 = s.split()
if w1[0].upper() != w2[0].upper():
return False
return Truealliteration_check("zig zag", "awkward alligator")您还可以将两者结合在一起(即,具有一个同时使用*args和**kwargs的函数),以便能够在以下两种语法中处理参数:
def alliteration_check(*args: str, **kwargs: str) -> bool:
for s in (*args, *kwargs.values()):
w1, w2 = s.split()
if w1[0].upper() != w2[0].upper():
return False
return True发布于 2020-12-06 16:27:46
在您的例子中,使用*args --一个非键的、可变长度的参数列表--可能更合适,因为您想检查可变的单词数。然后你可以像一个列表一样迭代这个。
在您的情况下,您只想检查每个单词的第一个字母是相同的大小写-不敏感。我将构建一个集合,并检查它只包含一个元素:
def alliteration_check(*args):
return len(set(s[0].upper() for s in args)) == 1你会像这样使用它:
print(alliteration_check("hello", "Hello", "hi"))输出:
True发布于 2020-12-06 16:20:55
def alliteration_check(*args):
initialWord = args[0]
allEqual=true
for word in args:
if (word != initialWord):
allEqual=false
break
return allEqual
alliteration_check("4", "5")
alliteration_check("10", "9")
alliteration_check('2', "3", "4")https://stackoverflow.com/questions/65170159
复制相似问题