如何在python中创建匿名者?

时间:2013-07-08 14:18:04

标签: python

我正在开发一个匿名程序,用于传感列表中的给定单词。这就是我到目前为止所拥有的。我是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

3 个答案:

答案 0 :(得分:3)

您的代码有几个问题:

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

    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()

    替换

    希望这有帮助

答案 1 :(得分:0)

您可以使用string.replace()

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

这将用xxxx取代DRAT的第一次出现,即使它是较长句子的一部分。如果你想要不同的功能,请告诉我。

答案 2 :(得分:0)

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