几个小时前我已经开始在Codecademy.com上学习python了,我学会了如何制作一个Piglatin翻译器,将第一个字母贴在最后,然后添加一个。我创建了很多conlangs,我想创建一个词典,我可以点击它并搜索单词,它会告诉我是否有这个词。我创建了(很好地使用了别人的教程)一个会在记事本文件中搜索单词,如果它找到一个,它会告诉我它是什么。但问题是,它允许我搜索一次然后关闭。有没有办法让它搜索,然后问我是否想再次搜索。我不熟悉Python,所以这可能听起来很愚蠢。哦,到目前为止,这是我的代码
tDict = {} # translation dictionary
with open("Lexicon.txt", "r") as infile:
for line in infile:
s = line.split()
tDict[s[0]] = s[1]
wordIn = input("Enter the English word(s) to be translated: ") #raw_input() in older Python
words = wordIn.split()
for word in words:
if word in tDict.keys():
print(tDict[word])
else:
print("*" + word) # the word doesn't have a translation
input()
我把输入()放在最后,这样我就必须在关闭之前点击回车。我怎么能把它放到一个循环中,这个循环会一直问我同样的问题并显示结果直到我关闭窗口?
答案 0 :(得分:3)
您正在寻找的是while
循环。查看下面的函数gopig
,了解如何使用它。
请注意,对于piglatin translator,你可以做一些像这样的乐趣...首先使用deque,这是一个双向链表......然后是列表理解,一次处理一行...然后你在函数中有while循环,所以你可以随时“去猪”。
>>> def piglatinize(word):
... from collections import deque
... d = deque(word)
... d.rotate(-1)
... d.append('ay')
... return ''.join(d)
...
>>> def pigline(line):
... return ' '.join(piglatinize(word) for word in line.strip().split())
...
>>> def gopig():
... while True:
... line = input('Type a line to translate: ')
... if not line: break
... print pigline(line)
...
>>> gopig()
Type a line to translate: "hello from a pig"
ellohay romfay aay igpay
Type a line to translate: ""
>>>
然后,如果你想建立一个翻译字典,那么将while循环中的上述函数替换为下面的函数。
>>> pigdict = {}
>>> def piglate(line):
... [pigdict.update({word:piglatinize(word)}) for word in line.strip().split()]
...
>>> piglate('hello from mars')
>>> piglate('hello from venus and earth')
>>> pigdict
{'and': 'ndaay', 'from': 'romfay', 'mars': 'arsmay', 'earth': 'artheay', 'venus': 'enusvay', 'hello': 'ellohay'}
此外,如果您正在寻找一种简单的方法来查找您是否有这个词,您可以在翻译词典上使用get
。如您所愿,“{missing”值的*
返回也会在下面使用。
>>> def pigfetch(word):
... return pigdict.get(word, '*'+word)
...
>>> pigfetch('hello')
'ellohay'
>>> pigfetch('help')
'*help'
>>> piglate('help')
>>> pigfetch('help')
'elphay'
总而言之,你有这个:
>>> def lookpig():
... while True:
... line = input('Type a word to find the translation: ')
... if not line: break
... print pigfetch(word)
...
>>> with open('words.txt', 'r') as f:
... [piglate(line) for line in f]
...
>>> lookpig()
Type a word to find the translation: "hello"
ellohay
Type a word to find the translation: "goodbye"
*goodbye
Type a word to find the translation: ""
>>>
如果您已经拥有一个基于文件的单词数据库,其中英语单词为first,而Piglatin单词为second,则可以执行以下操作:
>>> with open('lexicon.txt', 'r') as f:
... pigdict.update(dict(line.strip().split() for line in f))
...
>>> lookpig()
Type a word to find the translation: "mars"
arsmay
Type a word to find the translation: "saturn"
*saturn
Type a word to find the translation: ""
>>>
虽然,存储python dict而不是带有一段未翻译和翻译的单词的文本文件可能更容易。甚至更好,使用实际的数据库。
答案 1 :(得分:1)
基本上将整个逻辑放在“while True”语句中。并且,如果您在下面的示例中输入“exit”,程序将停止(使用“break”)。
tDict = {}
with open("Lexicon.txt", "r") as infile:
for line in infile:
s = line.split()
tDict[s[0]] = s[1]
while True:
wordIn = input("Enter the English word(s) to be translated (enter 'exit' to stop the program): ")
if wordIn == "exit": break
words = wordIn.split()
for word in words:
if word in tDict.keys():
print(tDict[word])
else:
print("*" + word)