[关闭]
@Pigmon 2017-04-17T18:25:04.000000Z 字数 1375 阅读 847

Python 练习

教案


练习 1 - 切分字符串

这是我上一个游戏项目中服务器和客户端通信部分内容的一个简化版本。
假设客户端向服务器请求当前用户的基本信息,服务器返回的内容经过解码后内容如下:

  1. CMD01#100001005#000C0080012C0200#JANE.DOE#01END

其中:
‘#’ 是分隔符
CMD01代表用户基本信息的头
100001005 是该用户的用户ID
000C0080012C0200 是16进制编码的用户当前的队伍信息(暂时不管什么意思)
JANE.DOE 是用户的昵称
01END 代表基本信息字符串的结束

要求:

用 Python 实现以 # 为分隔符,分割这个字符串,分别得到用户ID,队伍信息,昵称这3个内容,然后做如下输出:

  1. User ID: 100001005
  2. User Name: JANE.DOE
  3. User Team: 000C0080012C0200

提示:

在搜索引擎中搜索'Python 切分字符串' 这样类似的内容,会查到 ‘split’ 这个函数;查看其用法,完成上述要求。

练习 2 - 完善练习 1 的内容

完成练习 1 之后,在安全性上完善程序的内容(内容不分先后,自己考虑哪种顺序最合适):
1. 判断切分后得到的数组是不是包含 5 个部分
2. 判断该字符串是不是以'CMD01'开头
3. 判断该字符串是不是以'01END'结尾

提示:

字符串开头结尾内容的判断有很多方法,先想清楚怎样最简单最合适。

练习 3 - 继续解析内容

上 2 个练习中,用户的队伍信息部分是一串16进制编码的数字,其规则如下:
- 总长度为 16 的字符串
- 每 4 个字符代表一个数字

要求:
得到这 4 个数字的 10 进制形式并输出如下(在练习2的基础上增加修改内容):

  1. User ID: 100001005
  2. User Name: JANE.DOE
  3. User Team Members:
  4. [12, 128, 300, 512]

提示:

一个 16 长度的字符串,怎样按每 4 个切分,是之前讲过的内容;也可以自行搜索;
16 进制转 10 进制 需要你上网搜索方法

练习 4 - 选做

这个就是练习通过搜索引擎来解决问题的能力了。
把输入的字符串替换成:

  1. CMD01#100001005#000C0080012C0200#\u5f20\u4e09#END

名字部分变成了‘张三’这2个汉字的Unicode编码。

尝试在得到用户昵称的部分,将其转换成汉字,得到如下输出(除了昵称部分其他没变化):

  1. User ID: 100001005
  2. User Name: 张三
  3. User Team Members:
  4. [12, 128, 300, 512]

注:

编码成Unicode是为了在网络间传输不会出现乱码,通常这部分是定长的,比如昵称就固定有 5 个Unicode编码,不到 5 个长度的就用'\u0000'来补充。这样解码的时候就可以有一个定长的输入,按字节一个个的解析。
练习中为了不增加复杂度,把填补位数的'\u0000'去掉了。

说明

在你有时间的时候做就可以了,做好把最后的程序发给我看。然后如果你希望的话,会有后续的练习。
遇到任何困难,尽量先自己依靠搜索引擎或者Python文档来解决,如果实在卡的时间长,尝试问其他同学。
我刚刚做答案也用了搜索引擎,并且也不清楚我的方法是不是最好的,但起码知道肯定是可实现的,要跨越心理障碍,先给自己洗脑建立信心。
我的说明不可能逻辑完备,具体要求你还有一部分需要自己分析和猜测(根据我给的输出结果)——实际工作就是这样。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注