2017-03-17 55 views
0

对于我的电脑科学课我被分配到一个英文海盗字典。提示用户输入一个句子,然后翻译成海盗,但它不工作,我不知道为什么。任何帮助,将不胜感激。无法调用字典功能。 keyError 0

eng2pir = {} 
eng2pir['sir'] = 'matey' 
eng2pir['hotel'] = 'fleabag inn' 
eng2pir['restauraunt'] = 'galley' 
eng2pir['your'] = 'yer' 
eng2pir['hello'] = 'avast' 
eng2pir['is'] = 'be' 
eng2pir['professor'] = 'foul blaggart' 

a = input("Please enter a sentence to be translated into pirate: ") 

for x in range(len(a)): 
    b = a.replace(x, eng2pir[x]) 


print(b) 
+1

应该是你的代码的字来代替单词? –

+0

是啊,它应该翻译一字一句:/ – mikeprogrammer

回答

1

你循环遍历range(len(a)),所以x将采取一个整数值在您输入每个个体字符。这是由于几个原因:

  • 你的目标是迭代单词,而不是字符。
  • 索引字典应该用单词来完成,而不是整数(这是你错误的原因)。

最后,请注意.replace()将替换字符串中搜索到的项目的第一个匹配项。要以仍然使用该方法的方式修改此问题的方法,请考虑以下两个主要更改:

  • 迭代字典的键;可能会被替换的词语。
  • 循环直到输入中不存在此类词语,因为替换只会进行个别更改。
+0

谢谢!多数民众赞成在真正有用的,但你能给我一个例子,我可以迭代我的代码中的键? – mikeprogrammer

+0

当然!在这种情况下,你的循环将在'eng2pir:'中用于单词。默认情况下,Python将迭代字典中的键。你也可以显式指定'eng2pir.keys()'(还有一个对应的'.values()'方法)。 –

0

您正在迭代字符串输入中的每个字符,因为在此之前的其他答案已经说过,replace仅替换第一个发生的事件。 你会想做这样的事情(在你做完你的字典之后)。

a = input("Please enter a sentence to be translated into pirate: ") 

for x in eng2pir: 
    while x in a: 
     a = a.replace(x,eng2pir[x]) 

print(a) 
+1

谢谢!那完美的工作 – mikeprogrammer

0

在范围X(LEN(a))的: B = a.replace(X,eng2pir [X])

因为for循环x是INT 但eng2pir字典没有INT键

所以输出错误

#!/usr/bin/env python 
# coding:utf-8 
'''黄哥Python''' 

eng2pir = {} 
eng2pir['sir'] = 'matey' 
eng2pir['hotel'] = 'fleabag inn' 
eng2pir['restauraunt'] = 'galley' 
eng2pir['your'] = 'yer' 
eng2pir['hello'] = 'avast' 
eng2pir['is'] = 'be' 
eng2pir['professor'] = 'foul blaggart' 

a = input("Please enter a sentence to be translated into pirate:\n ") 

lst = a.split() 
b = '' 
for word in lst: 
    b += eng2pir.get(word, "") 
print(b)