“Python字符串”编码学号:TooY0ung的学院(结构体)

73 篇文章 0 订阅

根据6+6十二位编码规则,用城市代码和出生年编制学号。


  【本笔记适合初通算法的 coder 翻阅】


【学习的细节是欢悦的历程】


  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


等风来,不如追风去……


根据6+6十二位编码规则
TooY0ung的学院(结构体)
(用城市代码和出生年编制学号)


本文质量分:

96
本文地址: https://blog.csdn.net/m0_57158496/article/details/131496243

CSDN质量分查询入口:http://www.csdn.net/qc


目 录


◆ TooY0ung的学院(结构体)


题目来源于 CSDN 问答社区提问“TooY0ung的学院(结构体)

1、题目描述


  TooY0ung开了一个编程学院,面向全球不限年龄、不限物种进行招生。也就是说,如果一只千年乌龟想来学习编程,TooY0ung也会让他入学。

  已知每位学生的两个信息:所属城市、以及出生年份。

  为了区别每位学生,TooY0ung需 要给他们进行学号编码。

  TooY0ung规定了一种12位的学号编码规则:前6位用来记录城市编号,后6位用来表示年龄编号。

  • 更具体地说:

    a、如果城市的编号不足6位,则需要在前面补0,直至补齐6位。

    b、年龄是根据同一个城市学生的年龄来进行编号1、2,、3等,比如一个学员是某城市中,出生年份最早的(年龄最大的),则他的后六位记录为1,与城市规则一致,如果不足6位则在前面用0补齐6位,那么这个学员的年龄编码就是000001;同理,如果某学员是某城市中,出生年份第二早的,那么这个学员的年龄编码就是000002。

  • 输入:
    输入包含多行,第一行输入两个数,n和m,,n表示全球的城市数量,m表示学员人数。接下来m行,每行输入两个数字ci和yi,分别表示第i名学员的城市编号和出生年份。(数据保证所有学员的出生年份不出现重复)

  • 输出:
    输出包含m行,每行个12位数字,表示该学员的学号。

  • 输入样例1
    25
    1 1995
    2 1996
    1 1993
    1 1994
    2 1992

  • 输出样例1
    000001000003
    000002000002
    000001000001
    000001000002
    000002000001

  • 提示
    关于样例解释:2个城市,5名学员。城市1有三名学员:出生年份分别为1995、1993、1994。城市2有两名学员:出生年份分别为1996、1992。则第一名学员的年龄在城市1中排名第3,所以他的城市编号为1,年龄编号为3,分别补齐6位后,学号为:000001000003;第二名学员的年龄在城市2中排名第2,所以他的城市编号为2,年龄编号为2,分别补齐6位后,学号为:000002000002;第三名学员的年龄在城市1中排名第1,所以他的城市编号为1,年龄编号为1,分别补齐6位后,学号为:000001000001;第四名学员的年龄在城市1中排名第2,所以他的城市编号为1,年龄编号为2,分别补齐6位后,学号为:000001000002;第五名学员的年龄在城市2中排名第1,所以他的城市编号为2,年龄编号为1,分别补齐6位后,学号为:000002000001。

  • 来自TooY0ung温暖的提示:
    输出保证6位,如果不足在前面补0有c语言快捷操作写法:假设要输出的变量为int类型的a,则可以写printf("%06d",a);

  • Python中(我的应用)
    ①有字符串方法str.zfill()可以用’0’字符填充左侧以达到固定长度。如’5’。zfill(6),已是’000005’;
    ②还可以用字符串格式化,如插值字符串格式f"{5:0>6}",也表示用0填充左侧达到6位,也是’000005’。

  • 数据范围:
    对于15%的数据,1<=n<=100, 1<=m<=100,1<=ci<=n,1<=yi<=109;对于100%的数据,1<=n<=105
    1<=m<=105,1<=ci<=n, 1<=yi<=109。数据保证yi不重复。


回页目录

2、解题思路


  • 此题目的难点在于对学生出生年编码——

    要先统计出各个城市的学生总数,对其出生年进行排序,生成出生年检索字典;遍历输入对学生的出生年进行编码。

  • 数据结构

    用城市为标识分拣输入,可以把各个城市的学员出生年存入一个列表,排升序,再给出生年按序编号生成出生年码表,然后对各城市学员分别编号即可。城市码直接前缀0编码,出生年检索“出生年码表”序号前缀0,拼接两段编码即成学员学号编码。

—— 具体代码实现 ——

2.1 输入数据解析


  用str.split() 方法拆分行,再把每行解析成列表。int()函数转换数字字符为整型。

  • python 代码

    in_str = in_str.split('\n')
    n, stus = list(map(int, in_str[0].split())), [[int(j) for j in i.split()] for i in in_str[1:]]

  • 代码运行效果截屏图片
    在这里插入图片描述


回页目录

2.2 解析出生年检索字典


  用字典解析式生成学生出生年检索字典。

    studict = {}

    for k,v in stus:
        studict[k] = studict.get(k, []) + [v]
    
    studict = {city: {year: k+1 for k,year in enumerate(sorted(studict.get(city)))} for city in studict} # 生成解析学号编码的字典。

  • 代码运行效果截屏图片
    在这里插入图片描述


回页目录

2.3 遍历“学生”编码学号


  用for循环遍历学生列表,检索出生年,生成出生年编码,拼接学生12位学号编码。

    for city,year in stus: # 遍历轮询编码学号。
        print(f"{city:0>6}{studict.get(city).get(year):0>6}") # 插值字符串格式化输出学号编码。

  • 代码运行效果截屏图片
    在这里插入图片描述


回页目录

3、python 代码运行效果截屏图片


  • 代码运行效果截屏图片
    在这里插入图片描述


回页目录

4、完整源码

(源码较长,点此跳过源码)

#!/sur/bin/nve python
# coding: utf-8


def encode(in_str):
    ''' 学号编码 '''
    in_str = in_str.split('\n')
    n, stus = list(map(int, in_str[0].split())), [[int(j) for j in i.split()] for i in in_str[1:]]
    #input(f"\nn = {n}\nstus = {stus}") # 查看解析出的输入数据。
    studict = {}

    for k,v in stus:
        studict[k] = studict.get(k, []) + [v]
    
    studict = {city: {year: k+1 for k,year in enumerate(sorted(studict.get(city)))} for city in studict} # 生成解析学号编码的字典。
    #print(studict) # 查看生成的学号编码字典。
    
    for city,year in stus: # 遍历轮询编码学号。
        print(f"{city:0>6}{studict.get(city).get(year):0>6}") # 插值字符串格式化输出学号编码。


if __name__ == '__main__':
    in_str = '''2 5
1 1995
2 1996
1 1993
1 1994
2 1992'''
    print(f"\n输入:\n{in_str}\n\n输出:")
    encode(in_str) # 调用函数编码学号。


回页首

上一篇:  模拟随机验证码(模拟随机验证码)
下一篇: 

我的HOT博:

  本次共计收集 219 篇博文笔记信息,总阅读量 31.00w,平均阅读量 1415。已生成 21 篇阅读量不小于 3000 的博文笔记索引链接。数据采集于 2023-06-26 05:46:38 完成,用时 3 分 13.20 秒。


  1. 让QQ群昵称色变的神奇代码
    ( 56157 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122566500
    点赞:24   踩 :0  收藏:81  打赏:0  评论:17
    本篇博文笔记于 2022-01-18 19:15:08 首发,最晚于 2022-01-20 07:56:47 修改。
  2. pandas 数据类型之 DataFrame
    ( 8712 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/124525814
    点赞:6   踩 :0  收藏:29  打赏:0  评论:0
    本篇博文笔记于 2022-05-01 13:20:17 首发,最晚于 2022-05-08 08:46:13 修改。
  3. 个人信息提取(字符串)
    ( 6784 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/124244618
    点赞:1   踩 :0  收藏:12  打赏:0  评论:0
    本篇博文笔记于 2022-04-18 11:07:12 首发,最晚于 2022-04-20 13:17:54 修改。
  4. 罗马数字转换器|罗马数字生成器
    ( 6625 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122592047
    点赞:0   踩 :0  收藏:1  打赏:0  评论:0
    本篇博文笔记于 2022-01-19 23:26:42 首发,最晚于 2022-01-21 18:37:46 修改。
  5. Python字符串居中显示
    ( 6545 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122163023
    点赞:1   踩 :0  收藏:6  打赏:0  评论:1
    本篇博文笔记于 2021-12-26 23:35:29 发布。
  6. Python列表(list)反序(降序)的7种实现方式
    ( 5505 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/128271700
    点赞:4   踩 :0  收藏:18  打赏:0  评论:8
    本篇博文笔记于 2022-12-11 23:54:15 首发,最晚于 2023-03-20 18:13:55 修改。
  7. 斐波那契数列的递归实现和for实现
    ( 5373 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122355295
    点赞:4   踩 :0  收藏:2  打赏:0  评论:8
    本篇博文笔记于 2022-01-06 23:27:40 发布。
  8. 练习:字符串统计(坑:f‘string‘报错)
    ( 4958 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/121723096
    点赞:0   踩 :0  收藏:1  打赏:0  评论:0
    本篇博文笔记于 2021-12-04 22:54:29 发布。
  9. 练习:尼姆游戏(聪明版/傻瓜式•人机对战)
    ( 4709 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/121645399
    点赞:14   踩 :0  收藏:42  打赏:0  评论:0
    本篇博文笔记于 2021-11-30 23:43:17 发布。
  10. python清屏
    ( 4655 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/120762101
    点赞:0   踩 :0  收藏:5  打赏:0  评论:0
    本篇博文笔记于 2021-10-14 13:47:21 发布。
  11. 回车符、换行符和回车换行符
    ( 4611 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/123109488
    点赞:1   踩 :0  收藏:2  打赏:0  评论:0
    本篇博文笔记于 2022-02-24 13:10:02 首发,最晚于 2022-02-25 20:07:40 修改。
  12. 密码强度检测器
    ( 4029 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/121739694
    点赞:1   踩 :0  收藏:4  打赏:0  评论:0
    本篇博文笔记于 2021-12-06 09:08:25 首发,最晚于 2022-11-27 09:39:39 修改。
  13. 练习:生成100个随机正整数
    ( 4028 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122558220
    点赞:1   踩 :0  收藏:6  打赏:0  评论:0
    本篇博文笔记于 2022-01-18 13:31:36 首发,最晚于 2022-01-20 07:58:12 修改。
  14. 罗马数字转换器(用罗马数字构造元素的值取模实现)
    ( 3910 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122608526
    点赞:0   踩 :0  收藏:0  打赏:0  评论:0
    本篇博文笔记于 2022-01-20 19:38:12 首发,最晚于 2022-01-21 18:32:02 修改。
  15. 练习:班里有人和我同生日难吗?(概率probability、蒙特卡洛随机模拟法)
    ( 3718 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/124424935
    点赞:1   踩 :0  收藏:3  打赏:0  评论:0
    本篇博文笔记于 2022-04-26 12:46:25 首发,最晚于 2022-04-27 21:22:07 修改。
  16. 我的 Python.color() (Python 色彩打印控制)
    ( 3679 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/123194259
    点赞:2   踩 :0  收藏:7  打赏:0  评论:0
    本篇博文笔记于 2022-02-28 22:46:21 首发,最晚于 2022-03-03 10:30:03 修改。
  17. 练习:仿真模拟福彩双色球——中500w巨奖到底有多难?跑跑代码就晓得了。
    ( 3422 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/125415626
    点赞:3   踩 :0  收藏:4  打赏:0  评论:3
    本篇博文笔记于 2022-06-22 19:54:20 首发,最晚于 2022-06-23 22:41:33 修改。
  18. 聊天消息敏感词屏蔽系统(字符串替换 str.replace(str1, *) )
    ( 3234 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/124539589
    点赞:3   踩 :0  收藏:2  打赏:0  评论:3
    本篇博文笔记于 2022-05-02 13:02:39 首发,最晚于 2022-05-21 06:10:42 修改。
  19. random.sample()将在python 3.9x后续版本中被弃用
    ( 3229 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/120657230
    点赞:0   踩 :0  收藏:0  打赏:0  评论:0
    本篇博文笔记于 2021-10-08 18:35:09 发布。
  20. Linux 脚本文件第一行的特殊注释符(井号和感叹号组合)的含义
    ( 3207 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/123087606
    点赞:0   踩 :0  收藏:4  打赏:0  评论:3
    本篇博文笔记于 2022-02-23 13:08:07 首发,最晚于 2022-04-04 23:52:38 修改。
  21. 练习:求列表(整数列表)平衡点
    ( 3093 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/121737612
    点赞:0   踩 :0  收藏:0  打赏:0  评论:0
    本篇博文笔记于 2021-12-05 23:28:10 发布。
推荐条件 阅读量突破三千
(更多热博,请点击蓝色文字跳转翻阅)

回页首


老齐漫画头像

精品文章:

来源:老齐教室


回页首

Python 入门指南【Python 3.6.3】


好文力荐:


CSDN实用技巧博文:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦幻精灵_cq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值