写在前面
学校python课实训平台的oj太敏感辣,少一个空格都会报错——面向答案编程。为纪念在python实践课上花费的不多但受苦的经历,特将代码保存于博客上。
宁愿刷leetcode也不愿意跑python代码
2.1 表达式和基本输入输出
2.1.1 数据输入与输出
相关知识
要完成本关,你需要掌握 print( ),input(),eval()函数的用法。
print(*objects, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)
参数:
objects – 复数,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。
sep – 用来间隔多个对象,默认值是一个空格。
end – 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。
file – 要写入的文件对象。
flush – 输出是否被缓存通常决定于 file,但如果 flush 关键字参数为 True,流会被强制刷新。
举例:
eval(<字符串>):将输入的字符串转变成python语句,可实现算术运算
题目
第一题
在屏幕上输出字符串:hi, “how are you”, I’m fine and you
第二题
从键盘输入两个整数,计算两个数相除的商与余数
假设输入12,5
输出为 2,2
第三题
在屏幕上 输入一个三位数输出该数的个位、十位和百位数字。
假设输入125
输出为 5,2,1
第四题
已知a=1.234567,请按指定格式输出a的值。1.按保留小数点后3位,2.指数形式,尾数部分保留小数点2位 ,输出格式:采用一行输出,中间用,隔开。
第五题
请问一个硬盘的存储容量为500GB, 请问该硬盘最多可存放多少个字节的数据量?
提示:字节为最小的存储单位,硬盘容量500GB中的B是指字节byte。1G=1024M, 1M=1024K, 1K=1024。
第六题
计算并判断
1.0
1
3
∗
0.9
9
2
1.01^ 3∗0.99 ^2
1.013∗0.992 , 是否大于1.01,输出判断结果True或False。可知“三天打鱼,两天晒网,终将一无所获”。
提示:直接用关系运算符进行比较,关系运算符的输出是逻辑值True或False。
代码:
# -*- coding: utf-8 -*-
"""
Created on Sun Sep 6 21:39:58 2020
@author: hzh
"""
#第一题:在屏幕上输出字符串:hi, "how are you", I'm fine and you
#-------begin-------------#
print("hi, \"how are you\", I'm fine and you")
#-------ends--------------#
#第二题:从键盘输入两个整数,计算两个数相除的商与余数
x,y = eval(input())
#-------b.1egin-----------
s = x/y
m = x%y
print(s,end=" ")
print("%d"%m)
#-------ends-------------
#第三题:在屏幕上输入一个三位数输出该数的个位、十位和百位数字
x = eval(input())
#-------begin-----------
g = x//100
s = (x-100*g)//10
b = (x-100*g-10*s)
print("%d "%b,end="")
print("%d "%s,end="")
print("%d"%g)
#-------ends------------
#第四题:已知a=1.234567,b=0.000321 .按保留小数点后3位输出a,2.按指数形式输出 b
a,b = 1.234567, 0.00321
#-------begin-----------
import math
print("a=%.3f,"%a,end="")
print("b=%.2e"%b)
#-------ends------------
#第五题:请问一个硬盘的存储容量为500GB, 请问该硬盘最多可存放多少个字节的数据量
#-------begin-----------
x = 500*2**30
print("%s"%x)
#-------ends------------
#第六题:计算并判断题干中表达式的值是否大于1.01,输出判断结果True,False。
#-------begin-----------
x = 1.01**3
y = 0.99**2
z =x*y
if z > 1.01 :
print("True")
else :
print("False")
#-------ends------------
2.1.2 表达式的计算问题
问题:
相关知识
为了完成本关任务,你需要掌握:1.如何在python中导入math库,2.math库中常用函数的使用
下面列出一些常用的数学函数,请仔细阅读,通过完成本关任务,了解和掌握math库中数学函数的使用。
abs(x):返回整数的绝对值,如abs(-10)返回10。
ceil(x):返回数字的向上取整,如math.ceil(4.1)返回5。
exp(x):返回e的x次幂,如math.exp(1)返回2.718281828459045。
fabs(x):返回浮点数的绝对值,如math.fabs(-10) 返回10.0。
floor(x):返回数字的向下取整,如math.floor(4.9)返回4。
log(x,base):如math.log(math.e,math.e)返回1.0,math.log(100,10)返回2.0。
log10(x):返回以10为基数的x的对数,如math.log10(100)返回2.0。
max(x1,x2,…):返回给定参数的最大值,参数可以为序列。
min(x1,x2,…):返回给定参数的最小值,参数可以为序列。
modf(x):以元组的形式返回,(小数部分,整数部分)。两部分的数值符号与x相同,整数部分以浮点型表示。
pow(x, y):x
y
运算后的值。
round(x [,n]):返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。
sqrt(x):返回数字x的平方根,返回类型为实数,如math.sqrt(4)返回2.0。
acos(x):返回x的反余弦弧度值。
asin(x):返回x的反正弦弧度值。
atan(x):返回x的反正切弧度值。
atan2(y, x):返回给定的X及Y坐标值的反正切值。
cos(x):返回x的弧度的余弦值。
hypot(x, y):返回欧几里德范数 s q r t ( x 2 + y 2 ) sqrt(x ^2 +y 2 ) sqrt(x2+y2)。
sin(x):返回x弧度的正弦值。
tan(x):返回x弧度的正切值。
degrees(x):将弧度转换为角度,如degrees(math.pi/2) , 返回90.0。
radians(x):将角度转换为弧度
除了上述常用的数学函数,math库中还定义了两个常用的数学常量:
pi——圆周率,一般以π来表示。
e——自然常数。
一般有两种常用方法来使用math中的函数:
import math
print(math.abs(3))
或:
from math import *
print(abs(3))
编程要求
根据提示,在右侧编辑器Begin-End处补充代码,本关需要你编程计算的数学表达式或实际问题包括以下五题。
第一题
分别计算并输出
π
4
+
π
5
、
e
6
π ^4 +π ^5 、 e ^6
π4+π5、e6的值,以及输出二者的差。
第二题
分别计算并输出 π/4与4arctan(1/5)−arctan(1/239)的值,并观察其差异。
第三题
分别计算并输出sinh(0.25)与
(
e
0.25
−
e
−
0.25
)
/
2
(e ^{0.25} −e ^{−0.25} )/2
(e0.25−e−0.25)/2的值,查看并比较二者的大小。
第四题
已知 h,v0,g,θ = 1.9, 14, 9.8, 40 #θ初始化为角度
计算并输出表达式
的值, 请注意,需要将θ由初始的角度转为会弧度再计算表达式。
第五题
从键盘输入的是角度数θ,需要转化为弧度数x之后进行下面公式计算。
计算公式
l
n
(
∣
c
o
s
x
∣
e
s
i
n
x
)
ln(∣cosx∣e ^{sinx} )
ln(∣cosx∣esinx), 并输出结果
测试说明
右侧代码编辑区已设置好具体输出格式,你只需要在指定位置填写Python代码即可。
解答:
# -*- coding: utf-8 -*-
"""
Created on Tue Sep 8 00:23:44 2020
表达式的计算问题
@author: hzh
"""
from math import *
# ********** Begin ********** #
#如果输出值小数,请保留4位小数。
#第一题
import math
x = math.pi**4+math.pi**5
y = math.exp(6)
z = x-y
print("%.4f"%x)
print("%.4f"%y)
print("%.4f"%z)
#第二题
import math
x = math.pi/4
y = 4*math.atan(0.2)-math.atan(1/239)
print("%.4f"%x)
print("%.4f"%y)
#第三题
import math
x = math.sinh(0.25)
y = 0.5*(math.exp(0.25)-math.exp(-0.25))
print("%.4f"%x)
print("%.4f"%y)
#第四题
h,v0,g,θ = 1.9, 14, 9.8, 40 #变量赋值
import math
x = math.radians(θ)
y = (2*v0*math.sin(x)+math.sqrt(4*v0**2*sin(x)**2+8*g*h))/(2*g)
print("%.4f"%y)
#第五题
θ = eval(input()) #输入角度值
import math
x = math.radians(θ)
y = math.log1p(math.fabs(math.cos(x)*math.exp(math.sin(x)))-1)
print("%.4f"%y)
# ********** End ********** #
2.1.3简单计算问题的求解
问题:
略
代码:
# -*- coding: utf-8 -*-
"""
Created on Mon Sep 7 23:31:38 2020
任务:计算一个由正方形和等腰三角形组成的多边形的面积,其中正方形边长4厘米
,等腰三角形底边为正方形的一条边,其到对角顶点的高为2.6厘米。
@author: hzh
"""
from math import *
#保留2位小数
#第一题:无输入求多边形的面积
square_length = 4 # 声明整型变量square_length用于表示正方形边长,并赋值 4
triangle_h = 2.6 # 声明浮点型变量triangle_h用于表示三角形底边上的高,并赋值 2.6
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 第1步:计算正方形面积,赋值给变量area_square
area_square = square_length**2
# 第2步:计算等腰三角形面积,赋值给变量area_triangle
import math
area_triangle = square_length*triangle_h*0.5
# 第3步:计算多边形面积,即正方形面积和等腰三角形面积,赋值给变量area_total
area_total = area_square + area_triangle
# 第4步:打印输出多边形面积
print("%.2f"%area_total)
########## End ##########
print('***********************')
#第二题:从键盘输入摄氏温度,将摄氏温度转换为华氏温度并输出
########## Begin ##########
#第1步:给C赋值
c = eval(input())
#第2步:计算F的值并输出
f = (9/5)*c+32
print("%.2f"%f)
########## End ##########
print('***********************')
#第三题:正态分布的概率密度函数
########## Begin ##########
#第1步:给mu,sigma,x赋值,从键盘输入
mu,sigma,x=eval(input())
#第2步:计算函数值并输出
import math
y = (1/(math.sqrt(2*math.pi)*sigma))*math.exp(-(x-mu)*(x-mu)/(2*sigma*sigma))
print("%.2f"%y)
########## End ##########
print('***********************')
#第四题:编写一个计算并打印地球上两点的球面距离的Python程序
########## Begin ##########
#第1步:从键盘录入4个数,分别赋值lat1,lon1,lat2,lon2变量,代表两个点的角度坐标
lat1,lon1,lat2,lon2=eval(input())
#第2步:角度到弧度的转换
import math
Lat1 = math.radians(lat1)
Lon1 = math.radians(lon1)
Lat2 = math.radians(lat2)
Lon2 = math.radians(lon2)
#第3步:根据题干中所给公式计算球面距离并输出
R = 6371
s = R*math.acos(math.sin(Lat1)*math.sin(Lat2)+math.cos(Lat1)*math.cos(Lat2)*math.cos(Lon1-Lon2))
print("%.2f"%s)
########## End ##########
print('***********************')
2.1.4 顺序程序设计
问题:
相关知识
为了完成本关任务,你需要掌握:
input 的使用;
print 的格式化输出;
数据类型转换;
字符串类型的基本使用。
编程要求
第一题:计算距离
一小球以 5 米/秒 的水平速度平抛,重力加速度取 9.8 米每秒的平方,在忽略空气阻力的情况下,求经过时间 t 秒后,小球所在位置与抛出点之间的距离 (假设小球距地面足够高)。
例如输入:2
输出:22.00
第二题:求三角形面积
一个三角形的三边长分别是 a,b,c,那么它的面积为 sqrt(p(p−a)(p−b)(p−c)),其中 p= 1/2(a+b+c)。输入这三个数字,计算三角形的面积,四舍五入精确到 2 位小数。保证能构成三角形,0≤a,b,c≤1000,0≤a,b,c≤1000,每个边长输入时不超过2位小数。
例如输入:3,4,5
输出:6.00
第三题:逆序数输出
输入一个不小于 100 且小于 1000,同时包括小数点后一位的一个浮点数。
例如输入:123.4
输出:4.321
第四题: 对角线求点的个数
对于一个 n 个顶点的凸多边形,它的任何三条对角线都不会交于一点。请求出图形中对角线交点的个数。
计算公式为:
n
(
n
−
1
)
(
n
2
−
5
n
+
6
)
/
24
n(n−1)(n^ 2 −5n+6)/24
n(n−1)(n2−5n+6)/24
例如:6 边形:结果为15个点
输入:6
输出:15
仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。格式化输出格式请参考测试集中的预期输出。
代码:
# -*- coding: utf-8 -*-
"""
Created on Mon Sep 7 23:55:39 2020
程序代码 :顺序结构程序设计
@author: hzh
"""
from math import *
#保留2为小数
#**第一题**:计算距离
G = 9.8 # 声明浮点型变量 G,用于表示重力加速度
v0 = 5 # 声明整型变量 v0, 用于表示水平初速度
#请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########### Begin ###########
# 第一步:通过input函数获取输入值,将其转换为浮点型并赋值给t
t = eval(input())
# 第二步:计算水平距离,并赋值给s
s = 5*t
# 第三步:计算垂直距离,并赋值给h
h = 0.5*9.8*t**2
# 第四步:计算小球与原点的距离,并赋值给d
import math
d = math.hypot(s,h)
# 第五步:按照保留小数点后2位格式输出小球与原点的距离d
print("%.2f"%d)
########### End ###########
print('***********************')
#**第二题**:求三角形面积,结果保留小数点后2位
########### Begin ###########
a,b,c=eval(input())
import math
p = 0.5*(a+b+c)
s = math.sqrt(p*(p-a)*(p-b)*(p-c))
print("%.2f"%s)
########### End ###########
print('***********************')
#**第三题**:逆序数输出
########### Begin ###########
a=eval(input())
b = a//100
c = (a-b*100)//10
d = (a-b*100-c*10)//1
e = (a-b*100-c*10-d)*10
s = (e +0.1*d+0.01*c+0.001*b)
print("%.3f"%s)
########### End ###########
print('***********************')
#**第四题**: 对角线求点的个数,以整数输出结果
########### Begin ###########
n=eval(input())
import math
s = n*(n-1)*(n**2-5*n+6)*(1/24)
print("%d"%s)
########### End ###########
print('***********************')
2.3 分支结构
2.3.1 判断三角形类型
问题:
测试说明
平台会对你编写的代码进行测试:
测试输入:3,4,5;
预期输出:
直角三角形
测试输入:6,6,6;
预期输出:
等边三角形
测试输入:1,2,3;
预期输出:
无法构成三角形
测试输入:3,4,6;
预期输出:
普通三角形
代码:
x=eval(input("边长一"))
y=eval(input("边长二"))
z=eval(input("边长三"))
#代码开始
if (x+y>z and x+z>y and y+z>x):
if (x==y and y==z):
print("等边三角形")
elif(x**2==y**2+z**2 or y**2==x**2+z**2 or z**2==x**2+y**2):
print("直角三角形")
else:
print("普通三角形")
else:
print("无法构成三角形")
#代码结束
2.3.2 分段函数
题目:略
代码:
x=eval(input())
#代码开始
if x<1 :
y = x
elif 1<=x<10:
y = 2*x - 1
else:
y = 3*x-1
#代码结束
print("{:.2f}".format(y))
2.3.3 阶梯电价计算电费
问题:
测试说明
平台会对你编写的代码进行测试:
测试输入:
上月电表读数200
本月电表读数800
月份7
预期输出:
用电度数600.0
电费410.30
测试输入:
上月电表读数150
本月电表读数450
月份4
预期输出:
用电度数300.0
电费181.40
代码:
sy=eval(input("输入上月电表度数"))
by=eval(input("输入本月电表度数"))
yf=eval(input("输入月份"))
#代码开始
c = 1
ds = by -sy
if (ds<=200):
c = ds*0.588
else:
if (yf == 3 or yf == 4 or yf ==5 or yf ==9 or yf ==10 or yf ==11):
if 200<ds<=350:
c = (ds-200)*0.638+200*0.588
if ds>350:
c = (ds-350)*0.888+(350-200)*0.638+200*0.588
if (yf == 6 or yf == 7 or yf ==8 or yf ==12 or yf ==1 or yf ==2):
if 200<ds<=450:
c = (ds-200)*0.638+200*0.588
if ds>450:
c = (ds-450)*0.888+(450-200)*0.638+200*0.588
#代码结束
print("用电度数{:.2f}电费{:.2f}".format(ds,c))
2.3.4 阶梯水价计算水费
问题:
编程要求
根据提示,在右侧编辑器补充代码,输入上月水表读数、本月水表读数、家庭人数、是否低保(y/n),计算并输出用水度数和水费。
测试说明
平台会对你编写的代码进行测试:
测试输入:输入上月水表吨数10
输入本月水表吨数40
输入家庭人数3
是否低保(y/n)y
预期输出:
用水吨数(减免后)24.00水费70.26
测试输入:输入上月水表吨数30
输入本月水表吨数80
输入家庭人数6
是否低保(y/n)n
预期输出:
用水吨数(减免后)50.00水费163.76
测试输入:输入上月水表吨数10
输入本月水表吨数13
输入家庭人数6
是否低保(y/n)y
预期输出:
用水吨数(减免后)-3.00水费0
代码:
sy=eval(input("输入上月水表吨数"))
by=eval(input("输入本月水表吨数"))
rs=eval(input("输入家庭人数"))
db=input("是否低保(y/n)")
#代码开始
if (db[:] in ['y']):
sl = by -sy -6
if sl <=0:
c = 0
else:
c = sl
else:
sl = by -sy
c = sl
if rs <= 4 :
if c <=15:
sf = sl*2.58
elif 15<c<22:
sf = (c-15)*3.34+15*2.58
else:
sf = (c-22)*4.09+7*3.34+15*2.58
else:
if (c/rs) <=4:
sf = c*2.58
elif 4<(c/rs)<5:
sf = c*3.34
else:
sf = c*4.09
#代码结束
print("用水吨数(减免后){:.2f}水费{:.2f}".format(sl,sf))
2.3.5 手机话费计算
题目:
测试说明
平台会对你编写的代码进行测试:
测试输入:
流量20
通话时间300
预期输出:
费用128
流量60
通话时间600
预期输出:
费用239
代码:
ll=eval(input("流量"))
thsj=eval(input("通话时间"))
#代码开始
if ll <=30:
a = 128
elif 30<ll<=33:
a = (ll-30)*5+128
else:
a=128+15+(ll-33)*3
if thsj<= 500:
b = 0
else:
b = (thsj-500)*0.15
c = a+b
print("费用%.2f"%c)
#代码结束
2.3.6 血压判断
问题:略
代码:
x=eval(input())
y=eval(input())
#代码开始
if (x>=90 or y>=140):
print("高血压")
elif (x<=60 or y<=90):
print("低血压")
else:
print("正常血压")
#代码结束
2.3.7 党费计算
问题:
本关任务:编写程序,输入是否退休(y或Y表示退休)和收入,输出应缴纳党费
注意:党费不是累进计算,而是直接按比例收取,例如,在职党员,收入8000,直接按1.5%收取
离退休党员,收入6000,直接按1%收取
测试说明
平台会对你编写的代码进行测试:
测试输入:n 8000
预期输出:120.00
测试输入:y 8000
预期输出:80.00
测试输入:n 2000
预期输出:10.00
测试输入:y 2000
预期输出:10.00
代码:
ch=input("")
s=eval(input(""))
#代码开始
if ch in ['y','Y']:
if s <= 5000:
df = s*0.005
else:
df = s*0.01
else:
if s <= 3000:
df = s*0.005
if 3000<s<= 5000:
df = s*0.01
if 5000<s<= 10000:
df = s*0.015
if s>10000:
df = s*0.02
#代码结束
print("{:.2f}".format(df))
2.3.8 周薪计算
问题:
测试说明
平台会对你编写的代码进行测试:
测试输入:
工资标准30
工作日工作时间50
休息日工作时间8
预期输出:
工资2250.00
测试输入:
工资标准20
工作日工作时间80
休息日工作时间40
预期输出:
工资4320.00
代码:
gzbz=eval(input("工资标准"))
gzr=eval(input("工作日工作时间"))
xxr=eval(input("休息日工作时间"))
#代码开始
if gzr>40:
gzg = gzbz*40+(gzr-40)*1.5*gzbz
else:
gzg = gzbz*gzr
if xxr <=4:
gzx = xxr*2*gzbz
else:
gzx = (xxr-4)*3*gzbz+4*2*gzbz
gz = gzg+gzx
#代码结束
print("工资{:.2f}".format(gz))
2.4 For循环
2.4.1 输出给定范围内的所有素数
问题:
相关知识
为了完成本关任务,你需要掌握:1.素数的概念,2.循环嵌套
素数
素数:除1与本身n以外没有其他约数。用2…n-1每个数去除n,都不能除尽。如2、3、5、7、11、 13等。
循环嵌套
循环结构可以嵌套使用。在嵌套的循环结构中,当外层循环进入下一次迭代时,内层循环将重新初始化并重新开始。使用嵌套循环结构时注意代码的缩进问题,否则会导致代码的逻辑发生问题。
编程要求
根据提示,在右侧编辑器补充代码。
测试说明
平台会对你编写的代码进行测试:
测试输入:
100
预期输出:
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97
代码:
#求给定范围内的所有素数
m=eval(input()) #输入范围
#代码开始
import math
sushu = True
shuzu=[]
for i in range(1,m+1):
sushu = True
for j in range(2,int(math.sqrt(i))+1):
if i%j==0:
sushu = False
break
if sushu:
shuzu.append(i)
n=10
for x in range(1,len(shuzu)):
print(shuzu[x], '',end='')
if(x)%10==0:
print('')
#代码结束
2.4.2 求表达式n项之和
结果保留6位小数。
相关知识
为了完成本关任务,你需要掌握:循环嵌套
编程要求
根据提示,在右侧编辑器补充代码。
测试说明
平台会对你编写的代码进行测试:
测试输入:
15
预期输出
1.875000
代码:
#求n项之和
#代码开始
import math
from fractions import Fraction
n=eval(input())
y=0
m=0
for i in range(1,n+1):
s=0
for j in range(1,i+1):
s=s+j
m=Fraction(1/s)
y=y+m
print('%.6f'%y)
#代码结束
2.4.3 n个钱买n只鸡的问题
问题:
相关知识
为了完成本关任务,你需要掌握:循环嵌套使用
编程要求
根据提示,在右侧编辑器补充代码。
测试说明
平台会对你编写的代码进行测试:
测试输入:
100
预期输出:
0 25 75
4 18 78
8 11 81
12 4 84
代码:
#n个钱买n只鸡问题
print("依次输出公鸡 母鸡 小鸡的数量:")
n=eval(input()) #n表示钱的总数和鸡的总数
#代码开始
for x in range(0, n // 5 + 1):
for y in range(0, n // 3 + 1):
s = n - 5 * x - 3 * y
z = s*3
p = x + y + z
if p == n:
print("%d" % x, '', end='')
print("%d" % y, '', end='')
print("%d" % z)
else:
continue
#代码结束
2.4.4 剩余材料最短
相关知识
为了完成本关任务,你需要掌握:循环嵌套
编程要求
根据提示,在右侧编辑器补充代码。
测试说明
平台会对你编写的代码进行测试:
测试输入:
100
预期输出:
切割方案:19米4段,23米1段,剩余1米.
代码:
#剩余材料最短
length=eval(input()) #输入钢管长度
n=0 #19米为n段
m=0 #23米为m段
rest=length #剩余材料长度
#代码开始
for j in range (1,length//19+1):
for i in range(1,length//23+1):
e=length-i*23-j*19
if e>=0 and (e<rest or e==rest and j<n):
rest=e
n=j
m=i
#代码结束
print("切割方案:19米{}段,23米{}段,剩余{}米.".format(n,m,rest))
2.4.5 打印图形
问题:
图形1
提示:
打印图案关键是找出其中的规律。
根据打印第几行,算出每行打印多少列。
输出的每一行包括三部分组成:空格、字符串和换行。
相关知识
为了完成本关任务,你需要掌握:1.字符与编码之间的转换,2.控制换行。
字符与编码之间的转换
ord():将字符转化为对应的编码。
chr():将编码转化为对应的字符。
ord(‘A’)为65
chr(65)为‘A’
chr(ord(‘A’)+1)对应字符’B’
控制换行
print():默认情况下会换行显示。
print(打印的内容,end=””)则不换行显示。
编程要求
根据提示,在右侧编辑器补充代码。
测试说明
平台会对你编写的代码进行测试:
测试输入:
5
预期输出:
图形2
代码:
#打印字母图形
n = eval(input()) #输入行数
#代码开始
m=0
for i in range(1,n+1):
s=n-i
for l in range(1, s+1):
print(' ', end='')
for j in range(1, i):
print(chr(ord('A') + i - j), end='')
m=m+1
for k in range(0, i):
print(chr(ord('A')+k),end='')
print("")
#代码结束
2.4.6 判断身份证号码是否有效
问题:
相关知识
为了完成本关任务,你需要掌握:1.校验码产生规则,2.嵌套循环。
校验码产生规则
身份证校验码产生的规则如下所示:
将前面的身份证号码17位数分别乘以不同的系数。
从第1位到第17位的系数分别为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2 ;
将这17位数字和系数相乘的结果相加;
用加出来和除以11,看余数是多少;
余数只可能有0、1、2、3、4、5、6、7、8、9、10这11个数字。其分别对应的最后一位身份证的号码为1、0、X、9、8、7、6、5、4、3、2,其中的X是罗马数字10;
通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ;如果余数是10,身份证的最后一位号码就是2。
编程要求
根据提示,在右侧编辑器补充代码。
测试说明
平台会对你编写的代码进行测试:
测试输入:
请输入身份证号:431234200102049932
预期输出:
正确校验码
代码:
#判断身份证号是否有效
id=input("请输入身份证号:")
#代码开始
def is_digits(ss):
for s in ss:
if not s.isdigit():
return False
return True
xs = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
ls = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
if len(id) != 18:
print('长度错误')
elif not is_digits(id[:17]):
print('有无效字符')
elif is_digits(id[:17]):
total = 0
for i in range(17):
total += int(id[i]) * xs[i]
z = total % 11
if ls[z] != id[17]:
print('错误校验码')
else:
print('正确校验码')
#代码结束