我正在开发一个匿名程序,用于传感列表中的给定单词。这就是我到目前为止所拥有的。我是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
答案 0 :(得分:3)
您的代码有几个问题:
islpha
函数;它是str
方法(参见下面的示例)。trucatedInput
是str
,这是一种不可变类型。你不能重新分配不可变类型的部分;即myStr[3]='x'
通常会失败。如果您真的想这样做,最好将截断的输入表示为列表,然后使用''.join(truncatedInput)
将其转换为字符串。'DRAT'
。这是你main
中的第一个for循环。但是,你似乎想要的是迭代单词本身 - 你需要一个“chunker”。如果你想处理自由形式的英语,这是一个稍微困难的问题。例如,一个简单的单词chunker会简单地将你的句子分成空格。但是,当你有一个包含“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()
希望这有帮助
答案 1 :(得分:0)
您可以使用string.replace()
truncatedInput.replace('DRAT', 'xxxx')
这将用xxxx取代DRAT的第一次出现,即使它是较长句子的一部分。如果你想要不同的功能,请告诉我。
答案 2 :(得分:0)
您正在迭代字符串中的字符并将它们与“DRAT”进行比较。由于这是多个字符,因此比较总是失败。如果你想逐字遍历字符串,你必须首先使用str.split()将其分解为单词列表并迭代列表。