- 第1关:提取身份证号性别
任务描述
本关任务:通过身份证的第17位也就是倒数第二位的数字可以辨别该身份证所属人的性别,奇数为男性,偶数为女性。
输入身份证号,第17位若是偶数,输出性别女,否则输出性别男
sfzh=input("输入身份证号")
#代码开始
if int(sfzh[16]) % 2 == 0:
xb = '性别女'
print(xb)
else:
xb = '性别男'
print(xb)
#代码结束
2.第2关:提取身份证号生肖
任务描述
本关任务:
身份证的第六位到第九位是出生的年份。
,
出生年份除以12的余数,如果余数为0,则相应的属相是猴。
余数为1,则相应的属相是鸡。
出生年份对12的余数与属相的对应关系,如图所示。
,
输入身份证号,根据年份计算其生肖。
sfzh=input("输入身份证号")
#代码开始
nf = sfzh[6:10]
sxzf = "猴鸡狗猪鼠牛虎兔龙蛇马羊"
i = sxzf[int(nf)%12]
print('生肖'+i)
#代码结束
3.第3关:打印三角形
任务描述
本关任务:
编写程序,输入整数,输出加号组成的整数边长的等腰直角三角形
,
案例分析
1.输入行数hs
2.i从0循环到hs-1,每行打印hs-1-i个空格和2i+1个+号
hs=eval(input("请输入行数"))
#代码开始
for i in range(hs):
print(" "*(hs-1-i) + "+"*(2*i+1))
i += 1
#代码结束
- 第4关:打印钻石图形
任务描述
本关任务:
编写程序,输入整数,输出加号组成的整数边长的钻石图形
,
案例分析
输入:行数
处理:
i从0循环到行数减一
每次输出行数减一减i个空格和2i+1个加号
i从行数减二循环到0
每次输出行数减一减i个空格和2i+1个加号
hs=eval(input("请输入行数"))
#代码开始
# i=0
for i in range(hs):
print(" "*(hs-1-i) + "+"*(2*i+1))
i +=1
for i in range(hs-2,-1,-1):
print(" "*(hs-1-i) + "+"*(2*i+1))
# i -= 1
#代码结束
- 第5关:身份证合法性检查
任务描述
本关任务:输入身份证号,去除空格后,判断其长度是否18位,前17位是否数字。若不符合条件,显示对应提示
,
案例分析
输入:身份证号
处理:去掉其前后空格
判断其长度是否为18位,不是则返回长度错误
判断其前17位是否都为数字,不是则显示不是数字
sfzh=input("输入身份证号")
#代码开始
y = sfzh.strip()
if len(y) == 18:
if y[:17].isnumeric():
print('')
else:
print('不是数字')
else:
print('长度错误')
#代码结束
- 第6关:身份证号校验码
任务描述
本关任务:编写一个能判断身份证号校验码是否正确的小程序。
,
身份证的校验码的计算规则:
1.将身份证号码前面的17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2 ;
2、将相乘的结果累加;
3、用累加的和除以11,得到余数;
4、余数0到10对应的校验码为1、0、X、9、8、7、6、5、4、3、2。
,
案例分析
1.输入身份证号sfzh
2.设置xs为17位系数所对应的字符串’79a584216379a5842’,
10用’a’表示
3.i从0循环到16,xs[i]对应的数值(若xs[i]为’a’则为10)乘以sfzh[i]对应的数值,累加求和为s
4.设置jym为各位余数对应的校验码的字符串’10X98765432’
5.根据s对11的余数对jym切片,若不等于第18位sfzh,显示校验码错误。
sfzh=input("输入身份证号")
#代码开始
xs = '79a584216379a5842'
s = 0
i = 0
if len(sfzh) < 18:
print('')
else:
for i in range(17):
if xs[i] != 'a':
s += int(sfzh[i])*int(xs[i])
else:
s += int(sfzh[i])*10
jym = '10x98765432'
if jym[s%11] != sfzh[17]:
print('校验码错误')
else:
print('')
#代码结束
- 第7关:统计字符串中的各类字符
任务描述
本关任务:输入字符串,统计其中的大写字母、小写字母、汉字、数字字符和其他字符的个数。
,
案例分析
输入:字符串
处理:
设置变量sz、xxzm、dxzm、hz、qt为0,分别记录数字、小写、大写、汉字、其他字符的个数
对字符串的每个字符循环,若符合相应的条件则相应的变量加一,均不符合则qt加一。
输出:各变量的值
x=input("请输入字符串")
#代码开始
a = b = c = d = e = 0
for i in x:
if 'A' <= i <= 'Z':
a += 1
elif 'a' <= i <= 'z':
b += 1
elif '\u4e00' <= i <= '\u9fff':
c += 1
elif '0' <= i <= '9':
d += 1
else:
e += 1
print("大写字母{}小写字母{}汉字{}数字{}其他{}".format(a,b,c,d,e))
#代码结束
- 第8关:凯撒密码加密
任务描述
本关任务:编写一个对输入的字符串进行凯撒密码加密的程序
,
相关知识
为了完成本关任务,你需要掌握:1.凯撒密码加密的规则,2.字符的编码;3.如何遍历字符串。
凯撒密码加密的规则
凯撒密码是古罗马凯撒大帝用来对军事情报进行加密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列该字符后面第三个字符,对应关系如下:
原文:abcdefghijklmnopqrstuvwxyz
密文:defghijklmnopqrstuvwxyzabc
字符编码
每个字符在计算机中可以表示为一个数字,称为编码。
字符串则以编码序列方式存储在计算机中。
目前,计算机采用的重要编码是ASCII编码。
asc码表如图所示
asc码表
字符a的编码是97,字符b的编码是98,其余字母以此类推
ord(字符)函数可以返回字符的编码
chr(码值)函数可以返回编码对应的字符
例如,chr(97)是’a’
ord(‘d’)是100
x = input("输入明文:")
#代码开始
y = ''
for i in x:
if 'a' <= i <= 'z':
i_encrypt = chr((ord(i)-ord('a')+3) %26 +ord('a'))
else:
i_encrypt = i
y += i_encrypt
print('密文为:'+y)
# print(y)
#代码结束
- 第9关:选择题
1、D
s = “the sky is blue”,表达式 print(s[-4:], s[:-4]) 的结果是:
A、
the sky is blue
B、
blue is sky the
C、
sky is blue the
D、
blue the sky is
2、C
设置变量x=“hunan university”,下列哪个表达式可以得到字符串"ytisrevinu"
A、
x[6:]
B、
x[-10::-1]
C、
x[-1:5:-1]
D、
x[6::-1]
3、C
表达式"5"*3+"6"的值是
A、
21
B、
156
C、
5556
D、
536
4、C
设置变量x=‘abcdef’
下列哪个函数可以得到字符串x的长度6
A、
ord(x)
B、
chr(x)
C、
len(x)
D、
str(x)
5、B
如果 p=ord(‘a’), 表达式 print(p,chr((p+3)%26+ord(‘a’))) 的结果是
A、
97 d
B、
97 x
C、
97 w
D、
65 D
6、C
关于 Python 字符编码,以下选项中描述错误的是
A、
chr(x) 和 ord(x) 函数用于在单字符和 Unicode 编码值之间进行转换
B、
print(chr(65)) 输出 A
C、
若变量x为大写字母,可以使用下列表达式得到其对应的小写字母
ord(chr(x)-65+97)
D、
print(ord(‘a’)) 输出 97
7、B
以下选项中值为False的是
A、
‘abc’ <’abcd’
B、
‘Hello’ >'hello’
C、
'abcd’ <'acbd’
D、
‘A’!='a’
8、B
以下关于字符串类型的操作的描述,错误的是
A、
str.replace(x,y)方法可返回字符串,把字符串str中所有的x子串都替换成y
B、
想获取字符串str的长度,用字符串处理函数 str.len()
C、
设 x =‘aa’,则执行x*3的结果是‘aaaaaa’
D、
想返回一个字符串,将str所有的字符都大写,用str.upper()
9、A
关于字符串的处理方法,以下正确的是
A、
str.strip(chars)方法返回字符串str的副本,在str左侧和右侧去掉chars中列出的字符。缺省则去掉空格。
B、
str.upper()返回字符串str的副本,全部字符小写
C、
str.lower()返回字符串str的副本,全部字符大写
D、
str.find(str2)检测字符串中是否包含子字符串str2,若包含则返回True,不包含返回False。