Skip to main content
 首页 » 编程设计

python之如何返回多字典的键值

2025年05月04日11lori

我有这个代码

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)