我是Python新手,我正在做一个介绍项目。有人能告诉我为什么这不管用吗?如何解决它。基本上,用户给出了一个单词列表,如果这个单词不是复数,它应该添加一个"s“。但这行不通..。这是密码。我感谢所有的反馈。非常感谢。
def pluralize_words():
#########################################################
#Checks if words in plural_words are indeed plural and corrects them if not##
#########################################################
global singular_words
global plural_words
for i in plural_words:
if plural_words[i].endswith("s"):
word_is_plural = True
else:
word_is_plural = False
plural_words[i] = word + "s"
print(plural_words)发布于 2018-09-23 03:38:15
这是一个很好的列表理解点,我们可以使用endswith('s')进行查询。
words = ['sings', 'dance', 'runs', 'hides']
plural = [i if i.endswith('s') else i + 's' for i in words]chrx@chrx:~/python/stackoverflow/9.22$ python3.7 uk.py唱“、”舞蹈“、”跑“、”躲藏“
发布于 2018-09-23 03:27:14
斯蒂芬和U9分别给出了很好的解决方案。我将解释为什么您的代码不起作用。注意,plural_words是一个字符串列表。因此,当您调用for i in plural_words:时,您正在对该列表中的单词进行迭代,因此每次迭代都得到字符串本身(而不是一个数字)。例如:
输入:
plural_words = ['bark','dog','cats']
for i in plural_words:
print(i)输出:
bark
dog
cats由于每次迭代都将I设置为列表中的字符串,因此使用该字符串作为索引调用列表中的项是没有意义的(因为列表只能具有整数索引)。如果我使用示例plural_words列表在上面运行您的代码,那么我将调用的第一次迭代是复数_words‘’bark‘,这将给出您刚才收到的特定错误。为了避免这个问题,您可以使用U9提到的枚举,或者可以遍历列表长度的范围(所以我是一个数字)。下面是一个示例:
输入:
plural_words = ['bark','dog','cats']
for i in range(len(plural_words)):
print('i:', i)
print('word:', plural_words[i])输出:
i: 0
word: bark
i: 1
word: dog
i: 2
word: cats在本例中,len(plural_words)为3,因此您实际上正在运行for i in range(3)。
发布于 2018-09-23 03:00:17
需要enumerate
def pluralize_words():
global singular_words
global plural_words
for idx,i in enumerate(plural_words):
if i.endswith("s"):
word_is_plural = True
else:
word_is_plural = False
plural_words[idx] = i + "s"
print(plural_words) 更好的办法是:
plural_words=[i if i[-1]!='s' else i+'s' for i in plural_words]或者:
plural_words=list(map(lambda x: x+'s' if x[-1]!='s' else x,plural_words))https://stackoverflow.com/questions/52462570
复制相似问题