首页 > 解决方案 > 如何在python 3中通过小写,大写和混合大小写字符串从控制台拆分列表

问题描述

这是我的代码,但它不起作用。它应该从控制台读取文本,将其拆分为单词并将它们分配到 3 个列表中,并在它们之间使用分隔符。

words = list(map(str, input().split(" ")))    

lowercase_words = []
uppercase_words = []
mixedcase_words = []

def split_symbols(list):
    from operator import methodcaller
    list = words
    map(methodcaller(str,"split"," ",",",":",";",".","!","( )","","'","\\","/","[ ]","space"))
    return list

for word in words:
    if words[word] == word.lower():
        words[word] = lowercase_words
    elif words[word] == word.upper():
        words[word] = uppercase_words
    else:
        words[word] = mixedcase_words
print(f"Lower case: {split_symbols(lowercase_words)}")
print(f"Upper case: {split_symbols(uppercase_words)}")
print(f"Mixed case: {split_symbols(mixedcase_words)}")

标签: python

解决方案


您的代码中有几个问题。

1)words是一个列表并且word是字符串。并且您正在尝试使用索引作为字符串访问列表,这将引发错误。您必须使用整数来索引列表。在这种情况下,您甚至不需要索引。

2)要检查小写或大写,您可以这样做,word == word.lower()word == word.upper()。或者另一种方法是使用islower()isupper()返回布尔值的函数。

3)您正在尝试为该列表元素分配一个空列表。您想要的是将单词附加到该特定列表中。你想要类似的东西lowercase_words.append(word)。大写和混合大小写相同

因此,要解决这两个问题,您可以编写如下代码 -

for word in words:
    if word == word.lower():         # same as word.islower()
        lowercase_words.append(word)
    elif word == word.upper():       # same as word.isupper()
        uppercase_words.append(word)
    else:
        mixedcase_words.append(word)

我的建议是不要将变量命名为list. 此外,在split_words()您分配listwords. 我想你的意思是相反的。

现在我不确定问题的“在它们之间使用分隔符”部分。但这条线map(methodcaller(str,"split"," ",",",":",";",".","!","( )","","'","\\","/","[ ]","space"))肯定是错误的。map()接受一个函数和一个可迭代的。在您的代码中,不存在可迭代部分,我认为这是输入参数list适合的地方。所以,它可能类似于 -

map(methodcaller("split"," "), list)

但是话又说回来,我不确定你想用那么多分隔符来实现什么


推荐阅读