编程新小白 2024-03-16 17:04 采纳率: 33.3%
浏览 5
已结题

请问一下python中用字典获取相关内容

是这样的,我遇到了点问题,就是让用户输入内容,然后获取相关信息,然后根据相关信息,输出对应的值,但怎么弄,都弄不好,请问咋改善

# 练习题一

input_Match = input("请输入身份证号:")

# 设置省份
Match1 = {61, 44, 45, 50, 43, 34, 51}
name1 = {'陕西省', '广东省', '广西壮族自治区', '重庆市', '湖南省', '安徽省', '四川省'}
dictionary1 = dict(zip(Match1, name1))

if len(input_Match) == 18:
    # 设置性别项
    Match_boy = {1, 3, 5, 7, 9}
    name_boy = {'男性', '男性', '男性', '男性', '男性'}
    dictionary_boy = dict(zip(Match_boy, name_boy))

    Match_girl = {2, 4, 6, 8, 0}
    name_girl = {'女性', '女性', '女性', '女性', '女性'}
    dictionary_girl = dict(zip(Match_girl, name_girl))
    key0 = input_Match[16:17]
    key61_1 = input_Match[0:2]
    if key0 in dictionary_boy:
        gender = dictionary_boy.get(key0)
    if key0 in dictionary_girl:
        gender = dictionary_girl.get(key0)
    if key61_1 == 61:
        key61_2 = input_Match[2:4]
        sx = dictionary1.get(key61_1)
        # 陕西省份城市
        Match_61 = {'01', '02', '03', '04', '05', '07', '08', '09'}
        name_61 = {'西安市', '铜川市', '宝鸡市', '咸阳市', '渭南市', '汉中市', '榆林市', '安康市'}
        dictionary_61 = dict(zip(Match_61, name_61))
        if dictionary_61.get(key61_2):
            key61_3 = input_Match[4:6]
            sx_610 = dictionary_61.get(key61_2)
            if key61_2 == '01':
                # 陕西省各城市的区
                Match_6101 = {'01', '02', '04', '11', '12', '13'}
                name_6101 = {'市辖区', '新城区', '莲湖区', '灞桥区', '未央区', '雁塔区'}
                dictionary_6101 = dict(zip(Match_6101, name_6101))
                if key61_3 in dictionary_6101:
                    sx_61 = dictionary_6101.get(key61_3)
                    print('你是', sx, sx_610, sx_61, '的', ',是名', gender, sep='')
                else:
                    print('暂未开放')
            if key61_2 == '02':
                Match_6102 = {'01', '04'}
                name_6102 = {'市辖区', '耀州区'}
                dictionary_6102 = dict(zip(Match_6102, name_6102))
                if key61_3 in dictionary_6102:
                    sx_61 = dictionary_6101.get(key61_3)
                    print('你是', sx, sx_610, sx_61, '的', ',是名', gender, sep='')
                else:
                    print('暂未开放')
            if key61_2 == '03':
                Match_6103 = {'01', '22'}
                name_6103 = {'市辖区', '凤翔县'}
                dictionary_6103 = dict(zip(Match_6103, name_6103))
                if key61_3 in dictionary_6103:
                    sx_61 = dictionary_6101.get(key61_3)
                    print('你是', sx, sx_610, sx_61, '的', ',是名', gender, sep='')
                else:
                    print('暂未开放')
            if key61_2 == '04':
                Match_6104 = {'01', '02', '04'}
                name_6104 = {'市辖区', '秦都区', '渭城区'}
                dictionary_6104 = dict(zip(Match_6104, name_6104))
                if key61_3 in dictionary_6104:
                    sx_61 = dictionary_6101.get(key61_3)
                    print('你是', sx, sx_610, sx_61, '的', ',是名', gender, sep='')
                else:
                    print('暂未开放')
            if key61_2 == '05':
                Match_6105 = {'01', '02', '22'}
                name_6105 = {'市辖区', '临渭区', '潼关区'}
                dictionary_6105 = dict(zip(Match_6105, name_6105))
                if key61_3 in dictionary_6105:
                    sx_61 = dictionary_6101.get(key61_3)
                    print('你是', sx, sx_610, sx_61, '的', ',是名', gender, sep='')
                else:
                    print('暂未开放')
            if key61_2 == '07':
                Match_6107 = {'01', '23'}
                name_6107 = {'市辖区', '洋县'}
                dictionary_6107 = dict(zip(Match_6107, name_6107))
                if key61_3 in dictionary_6107:
                    sx_61 = dictionary_6101.get(key61_3)
                    print('你是', sx, sx_610, sx_61, '的', ',是名', gender, sep='')
                else:
                    print('暂未开放')
            if key61_2 == '08':
                Match_6108 = {'01', '02', '21'}
                name_6108 = {'市辖区', '榆阳区', '神木县'}
                dictionary_6108 = dict(zip(Match_6108, name_6108))
                if key61_3 in dictionary_6108:
                    sx_61 = dictionary_6101.get(key61_3)
                    print('你是', sx, sx_610, sx_61, '的', ',是名', gender, sep='')
                else:
                    print('暂未开放')
            if key61_2 == '09':
                Match_6109 = {'01', '22'}
                name_6109 = {'市辖区', '石泉县'}
                dictionary_6109 = dict(zip(Match_6109, name_6109))
                if key61_3 in dictionary_6109:
                    sx_61 = dictionary_6101.get(key61_3)
                    print('你是', sx, sx_610, sx_61, '的', ',是名', gender, sep='')
                else:
                    print('暂未开放')

        else:
            print('暂未开放')


具体为用户输入身份证号,然后获取用户输入的信息,第一位第二位为省份编号,第三第四为城市编号,第五第六区域编号,第十七位为性别,然后获取之后,给它们分别设键,从已经设定好的字典中根据键来获取值,进行输出,请问该怎么解决?

img

  • 写回答

5条回答 默认 最新

  • Kwan的解忧杂货铺 Java领域优质创作者 2024-03-16 17:05
    关注

    编程新小白 下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    在以上代码中,你想要根据用户输入的身份证号来获取相关信息,然后根据相关信息输出对应的值。但你遇到了问题,无法正确实现这个功能。下面是几个改善的建议:

    1. 修改字典的定义方式:在原始代码中,你使用了集合的定义方式来创建字典,并且将两个集合进行了zip操作。这是不正确的,应该使用大括号{}来定义字典,并用冒号: 将键和值进行关联,例如Match1 = {61: '陕西省', 44: '广东省', 45: '广西壮族自治区', 50: '重庆市', 43: '湖南省', 34: '安徽省', 51: '四川省'}

    2. 使用if-elif-else语句:在原始代码中,你使用了多个if语句来判断相关信息,并且没有使用elif和else语句。这样会造成每次都会进行所有的判断,不符合预期的结果。应该使用if-elif-else语句来进行判断,并确保只有一个条件满足。例如:

    if key0 in dictionary_boy:
        gender = dictionary_boy.get(key0)
    elif key0 in dictionary_girl:
        gender = dictionary_girl.get(key0)
    else:
        gender = "未知"
    
    1. 简化省份和城市的判断:在原始代码中,你通过多层判断来获取省份和城市信息,这样会导致代码冗长且不易维护。可以使用嵌套字典的方式来简化判断过程。例如:
    province_city = {
        61: { 
            '01': {'name': '西安市', 'areas': {'01': '市辖区', '02': '新城区'}},
            '02': {'name': '铜川市', 'areas': {'01': '市辖区', '04': '耀州区'}},
            # 其他省份和城市信息
        },
        44: { 
            # 广东省和城市信息
        },
        # 其他省份和城市信息
    }
    
    province_code = input_Match[0:2]
    city_code = input_Match[2:4]
    area_code = input_Match[4:6]
    
    province_info = province_city.get(province_code)
    if province_info:
        province_name = province_info['name']
        city_info = province_info.get(city_code)
        if city_info:
            city_name = city_info['name']
            area_info = city_info['areas'].get(area_code)
            if area_info:
                area_name = area_info
                print("你是{}省{}市{}的,是名{}".format(province_name, city_name, area_name, gender))
            else:
                print("暂未开放")
        else:
            print("暂未开放")
    else:
        print("暂未开放")
    

    通过以上改善措施,可以使你的代码逻辑更清晰,并且减少重复代码。请根据你自身的需求进行修改和调整。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 3月24日
  • 已采纳回答 3月16日
  • 创建了问题 3月16日

悬赏问题

  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容