我无法弄清楚我哪里出错了。因此,我需要随机替换单词并将其重新写入文本文件,直到对其他人不再有意义。我选择了一些单词来测试它,并编写了以下代码,目前无效:
# A program to read a file and replace words until it is no longer understandable
word_replacement = {'Python':'Silly Snake', 'programming':'snake charming', 'system':'table', 'systems':'tables', 'language':'spell', 'languages':'spells', 'code':'snake', 'interpreter':'charmer'}
main = open("INF108.txt", 'r+')
words = main.read().split()
main.close()
for x in word_replacement:
for y in words:
if word_replacement[x][0]==y:
y==x[1]
text = " ".join(words)
print text
new_main = open("INF108.txt", 'w')
new_main.write(text)
new_main.close()
这是文件中的文字:
Python是一种广泛使用的通用高级编程 语言。它的设计理念强调代码可读性及其代码 语法允许程序员用更少的代码行表达概念 比C ++或Java等语言更有可能。语言 提供用于在小型上实现清晰程序的构造 和大规模.Python支持多种编程范例, 包括面向对象,命令式和函数式编程或 程序风格。它具有动态类型系统和自动 内存管理并具有庞大而全面的标准 library.Python解释器可以在很多上安装 操作系统,允许各种Python代码执行 系统。使用第三方工具,如Py2exe或Pyinstaller, Python代码可以打包成独立的可执行程序 一些最流行的操作系统,允许 分发基于Python的软件,以便在这些环境中使用 无需安装Python解释器。
我尝试了一些这方面的方法,但作为Python的新手,这是一个猜测的问题,过去两天花在网上进行研究,但大多数答案我都是我发现要么太复杂,要么我不明白,要么是特定于那个人的代码,并没有帮助我。
答案 0 :(得分:7)
好的,让我们一步一步来。
main = open("INF108.txt", 'r+')
words = main.read().split()
main.close()
最好在此处使用with
语句。此外,r
是默认模式。因此:
with open("INF108.txt") as main:
words = main.read().split()
使用with
会在此块结束时自动为您调用main.close()
;你也应该为最后的文件写做同样的事情。
现在主要位:
for x in word_replacement:
for y in words:
if word_replacement[x][0]==y:
y==x[1]
这个小部分包含几个误解:
for x in word_replacement
)只会为您提供键。因此,当您想稍后进行比较时,您应该只是检查if word_replacement[x] == y
。在[0]
上执行此操作只会为您提供替换的第一个字母。y in word_replacement
检查是否在词典中。y == x[1]
以两种方式出错。首先,您可能希望将分配给y
,而不是比较(即y = x[1]
- 请注意单=
} 标志)。其次,分配给循环变量甚至不能做你想要的。 y
下次循环时会被新值覆盖,words
数据根本不会被更改。您要做的是创建一个可能被替换的单词的 new 列表,如下所示:
replaced = []
for y in words:
if y in word_replacement:
replaced.append(word_replacement[y])
else:
replaced.append(y)
text = ' '.join(replaced)
现在让我们做一些改进。字典有一个方便的get
方法,可以让您在密钥存在时获取值,如果不存在则获取默认值。如果我们只使用单词本身作为默认值,我们会得到一个漂亮的减少:
replaced = []
for y in words:
replacement = word_replacement.get(y, y)
replaced.append(replacement)
text = ' '.join(replaced)
您可以将其变成一行list-comprehension:
text = ' '.join(word_replacement.get(y, y) for y in words)
现在我们已经完成了。
答案 1 :(得分:0)
看起来你想要这样的东西作为嵌套循环中的if语句:
if x==y:
y=word_replacement[x]
当你遍历字典时,你得到它的键,而不是键值对:
>>> mydict={'Python':'Silly Snake', 'programming':'snake charming', 'system':'table'}
>>> for i in mydict:
... print i
Python
programming
system
然后,您可以使用mydict[i]
获取值。
但这并不常用,因为分配给y
并不会改变words
的元素。您可以遍历其索引而不是元素以分配给当前元素:
for x in word_replacement:
for y in range(len(words)):
if x==words[y]:
words[y]=word_replacement[x]
的索引列表
答案 2 :(得分:0)
你的问题可能就在这里:
if word_replacement[x][0]==y:
以下是实际发生的一个小例子,可能不是你想要的:
w = {"Hello": "World", "Python": "Awesome"}
print w["Hello"]
print w["Hello"][0]
哪个应该导致:
"World"
"W"
你应该能够弄清楚如何从这里纠正代码。
答案 3 :(得分:0)
您以错误的方式使用word_replacement
(字典)。您应该将for循环更改为以下内容:
for y in words:
if y in word_replacement:
words[words.index(y)] = word_replacement[y]