如果值超出预期范围,请给出响应

问题描述 投票:0回答:1

一个程序,接收 5 个整数并将它们及其立方体存储在字典中。如果输入的数字小于 3,则引发用户定义的异常 NumberTooSmall,如果输入的数字大于 30,则引发用户定义的异常 NumberTooBig。不管是否发生异常,最后都会打印字典的内容。 我的代码

n1,n2,n3,n4,n5 = int(input()),int(input()),int(input()),int(input()),int(input())
All = sorted([n1,n2,n3,n4,n5])

class NumberTooSmall(Exception):
    def __init__(self, args):
        self.num = args

class NumberTooBig(Exception):
    def __init__(self, args):
        self.num = args

dic = {}
try:
    for i in All:
        if i <3:
            raise NumberTooSmall(i)
        elif i> 30:
            raise NumberTooBig(i)
        else:
            dic[i] = i**3
except NumberTooSmall as numtosmall:
    dic = {**{'NumberTooSmall':numtosmall.num},**dic}        
except NumberTooBig as numtobig:
    dic = {**{'NumberTooBig':numtobig.num},**dic}

keypairs = list(zip(dic.keys(),dic.values()))
  
for i in keypairs:
    if i[0] == 'NumberTooSmall' or i[0] == 'NumberTooBig':
        print('{'+str(i[0]+' ',':',' '+str(i[1])+'}'))
    else:
        print(str(i[0])+' ',':',' '+str(i[1]))

输入

3
7
9
22
34

预期产量

{'Number too big': 34}
3  :  27
7  :  343
9  :  729
22  :  10648
python dictionary time logic
1个回答
0
投票

这是一次很好的尝试。我基本上做了以下三个改进。

  1. try
    -
    except
    块移至循环内。
  2. 清理了
    dic[]
    里面的
    except
  3. 整理打印报表。

所以现在代码如下所示:

n1,n2,n3,n4,n5 = 1,5,10,30,50
All = sorted([n1,n2,n3,n4,n5])

class NumberTooSmall(Exception):
    def __init__(self, args):
        self.num = args

class NumberTooBig(Exception):
    def __init__(self, args):
        self.num = args

dic = {}
for i in All:
    try:

        if i <3:
            raise NumberTooSmall(i)
        elif i> 30:
            raise NumberTooBig(i)
        else:
            dic[i] = i**3
    except NumberTooSmall as numtosmall:
        dic[i] = 'NumberTooSmall'        
    except NumberTooBig as numtobig:
        dic[i] = 'NumberTooBig'

keypairs = list(zip(dic.keys(),dic.values()))


for i,v in keypairs:
    print(f'{i} : {v}')

结果是这样的:

1 : NumberTooSmall
5 : 125
10 : 1000
30 : 27000
50 : NumberTooBig
© www.soinside.com 2019 - 2024. All rights reserved.