0

我正在开发一个匿名程序,它可以感应列表中的给定单词。这就是我到目前为止所拥有的。我是 python 新手,所以不知道如何实现这一点。

def isAlpha(c):
    if( c >= 'A' and c <='Z' or c >= 'a' and c <='z' or c >= '0' and c <='9'):
        return True
    else:
        return False


def main():
    message = []
    userInput = str(input("Enter The Sentense: "))
    truncatedInput = userInput[:140]

    for i in range(len(truncatedInput)):
        if(truncatedInput[i] == 'DRAT'):
            truncatedInput[i] = 'x'
        print(truncatedInput[i])

这是我得到的输出

Enter The Sentense: DRAT
D
R
A
T

我想把这个词换成 XXXX

4

3 回答 3

3

您的代码有几个问题:

  1. 已经存在一个islpha函数;它是一种str方法(参见下面的示例)。
  2. trucatedInput是 a str,它是一个不可变的类型。您不能重新分配不可变类型的部分;即myStr[3]='x'通常会失败。如果你真的想这样做,你最好将截断的输入表示为一个列表,并''.join(truncatedInput)在以后将其转换为字符串。
  3. 您当前正在查看截断输入中的字符,以检查它们中的任何一个是否等于'DRAT'。这就是你的第一个 for 循环main所做的。但是,您似乎想要的是迭代单词本身 - 为此您需要一个“分块器”。如果你想处理自由格式的英语,这是一个稍微困难的问题。例如,一个简单的单词分块器会简单地将您的句子拆分为空格。但是,当您有一个包含单词“DRAT'S”的句子时会发生什么?由于这种情况,您将被迫创建一个适当的分块器来根据需要处理标点符号。这是一个相当高级的设计决策。您可能想看看NLTK它是否有任何分块器可以帮助您。

例子

str.isalpha

In [3]: myStr = 'abc45d'

In [4]: for char in myStr:
   ...:     print char, char.isalpha()
   ...:     
a True
b True
c True
4 False
5 False
d True

字符串是不可变的

In [5]: myStr[3] = 'x'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-bf15aed01ea1> in <module>()
----> 1 myStr[3] = 'x'

TypeError: 'str' object does not support item assignment

str.replace最后,正如其他人所建议的那样,无论如何使用可能会好得多。但是,请注意替换非审查词的子字符串。例如,单词“hello”中的子字符串“hell”不需要审查。为了适应此类文本,您可能需要使用re.sub正则表达式替换,而不是str.replace.

另外一点,python 允许传递比较。所以你可以缩短if( c >= 'A' and c <='Z' or c >= 'a' and c <='z' or c >= '0' and c <='9')if( 'Z' >= c >= 'A' or 'z' >= c >= 'a' or '9' >= c >= '0'). 顺便说一句,这可以替换为if c.isalpha() or c.isdigit()

希望这可以帮助

于 2013-07-08T14:36:21.483 回答
0

你可以使用string.replace()

truncatedInput.replace('DRAT', 'xxxx')

这会将第一次出现的 DRAT 替换为 xxxx,即使它是较长句子的一部分。如果您想要不同的功能,请告诉我。

于 2013-07-08T14:22:13.313 回答
0

您正在遍历字符串中的字符并将它们与“DRAT”进行比较。由于这是多个字符,因此比较总是失败。如果您想逐字迭代字符串,您必须首先使用 str.split() 将其分解为单词列表并遍历该列表。

于 2013-07-08T14:25:12.730 回答