如何返回密钥的多字典值?

Abd*_*aia 1 python dictionary python-3.x

我有这个代码

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])
Run Code Online (Sandbox Code Playgroud)

我试图让用户输入1到399之间的数字.

当我用的时候ones[ui],我得到了一个

KeyError'2'

2是我输入的数字.所以,我将输入传递ui给另一个名为的变量k,但是我遇到了同样的问题.

在python的实时环境中(空闲),当我写的时候ones[2],我得到的"II"不是上面的错误.

那么,究竟是什么问题,我该如何解决呢?

Jea*_*bre 7

那是因为你的输入是a string,而不是int(使用python 3),所以你实际上做的ones["2"]是失败的.

ui = int(input('type a number from 1 to 303: '))
Run Code Online (Sandbox Code Playgroud)

会解决这个问题.

请注意,如果用户输入"303",您还会收到一个关键错误.所以print(ones[ui%10])你的例子更好(你也必须检查!= 0,因为罗马数字不支持它:))

除了20 : "XL",应该20 : "XX",

我的修复提议完全实现了数字构建(也适用于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)
Run Code Online (Sandbox Code Playgroud)