在Python中修改两字字符串函数以获取**kwargs



我编写了一个基本函数,该函数将传递的任何两个单词字符串作为参数,检查两个单词的索引是否匹配并返回True,否则返回False。

def alliteration_check(str):
sp1, sp2 = str.split()
if sp1[0].upper() == sp2[0].upper():
return True
else:
return False

我想知道是否可以在这里更改str的参数以接受**kwargs?我最近才知道这个概念,所以我试图了解如何将其付诸实践。

从本质上讲,我想要的函数输出是,用户可以放置与一个参数一样多的单词,并且只有当每个字符串的所有第一个索引匹配时,它才会返回True。我只是不知道如何编写函数,或者它是否可能?

提前感谢!

不要将变量(包括参数(命名为str,因为它会遮蔽内置的str函数/类型!您可以使用str作为类型注释,但它应该在参数名称(例如foo: 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 True
alliteration_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

在您的情况下,使用*args(一个非关键字、可变长度的参数列表(可能更合适,因为您希望检查可变数量的单词。然后,您可以像列表一样对其进行迭代。

在你的情况下,你只想检查每个单词的第一个字母是否不区分大小写。我会构建一个集合,并检查它只包含一个元素:

def alliteration_check(*args):
return len(set(s[0].upper() for s in args)) == 1

你会这样使用它:

print(alliteration_check("hello", "Hello", "hi"))

输出:

True
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")

这是我得到的解决方案。对于您的具体情况,您应该使用*args而不是**kwargs

def alliteration_check(*args):
allit = True
for arg in args:
if arg[0].upper() != args[(args.index(arg))-1][0].upper():
allit = False
return allit

基本上,这会将输入到函数中的每个参数与前一个参数进行比较,并确保所有这些参数中的第一个字母相同。如果在任何时候它不相等,它会将allit变量更改为false并脱离循环。

相关内容

最新更新