我有这个代码
ones = {1 : "I", 2 : "II", 3 : "III", 4 : "IV", 5: "V", 6 : "VI",\
7 : "VII", 8 : "VIII", 9 : "IX"}
tens = {10 : "X", 20 : "XL", 30 : "XXX", 40 : "XL", 50 : "L",\
60 : "LX", 70 : "LXX", 80 : "LXXX", 90 : "XC"}
hun = {100 : "C", 200 : "CC", 300 : "CCC"}
ui = input('type a number from 1 to 303: ')
k = ui
print(ones[k])
我试图让用户输入一个从 1 到 399 的数字。
当我使用ones[ui]
时,我得到了一个
KeyError '2'
2 是我输入的数字。所以,我将 ui
的输入传递给另一个名为 k
的变量,但我遇到了同样的问题。
在python的live环境下(idle),当我写ones[2]
时,我得到的是"II"
而不是上面的错误。
那么,到底是什么问题,我该如何解决呢?
最佳答案
那是因为你的输入是一个string
,而不是一个int
(使用python 3),所以你实际上是在做ones["2"]
失败了。
ui = int(input('type a number from 1 to 303: '))
会解决这个问题。
请注意,如果用户输入“303”,您也会收到一个键错误。所以最好为您的示例执行 print(ones[ui%10])
(您还必须检查 !=0,因为罗马数字不支持它 :))
除了 20 : "XL",
应该是 20 : "XX",
我的修复建议完全实现了 number build(也适用于 python 2):
ones = {1 : "I", 2 : "II", 3 : "III", 4 : "IV", 5: "V", 6 : "VI",
7 : "VII", 8 : "VIII", 9 : "IX",0:""}
tens = {10 : "X", 20 : "XX", 30 : "XXX", 40 : "XL", 50 : "L",
60 : "LX", 70 : "LXX", 80 : "LXXX", 90 : "XC",0:""}
hun = {100 : "C", 200 : "CC", 300 : "CCC",0:""}
ui = int(input('type a number from 1 to 303: '))
if 0 < ui < 304:
units = ui%10
tenths = (ui-units)%100
hundreds = (ui-tenths-units)
string = "".join([d[v] for d,v in zip((hun,tens,ones),(hundreds,tenths,units))])
print(string)
关于python - 如何返回多字典的键值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41897895/