全国计算机等级考试⼆级Python教材实例程序及编程习题第⼀章程序设计基本⽅法
实例1.1斐波那契数列计算
#CalFibonacci.py
a,b=0,1
while a<1000:
print(a,end=',')
a,b=b,a+b
实例1.2 圆⾯积的计算
#CalCircleArea.py
r=25
area=3.1415*r*r
print(area)
print("{:.2f}".format(area))
实例1.3绘制五⾓红星
1#DrawStar.py
2from turtle import*
3 color('red','red')
4 begin_fill()
5for i in range(5):
6    fd(200)
7    rt(144)
8 end_fill()
9 done()
实例1.4 程序运⾏计时
1#CalRunTime.py
2import time
3 limit=10*1000*1000
4 start=time.perf_counter()
5while True:
6    limit-=1
7if limit<=0:
8break
9 delta=time.perf_counter()-start
10print("程序运⾏时间是:{}秒。".format(delta))
实例1.5绘制七彩圆圈
1#DrawSevenColorfulCircles.py
2import turtle
3 colors=['red','orange','yellow','green','blue','indigo','purple']
4for i in range(7):
5    c=colors[i]
6    lor(c,c)
7    turtle.begin_fill()
8    (360/7)
9    turtle.circle(50)
10    d_fill()
11 turtle.done()
习题-基本编程题:
⒈悄悄话:
name=input('请输⼊对⽅名字:')
s=input('请输⼊悄悄话的内容:')
print("{},听我说句悄悄话:{}".format(name,s*3))
⒉九九乘法表
for i in range(1,10):
for j in range(1,i+1):
print("{}*{}={:2} ".format(j,i,i*j),end="")
print("")
⒊同切圆
import turtle
turtle.pensize(3)
turtle.circle(20)#绘制半径为20像素的圆
turtle.circle(40)#绘制半径为40像素的圆
turtle.circle(80)#绘制半径为80像素的圆
turtle.circle(160)#绘制半径为160像素的
4.三个⼩爱好
hobbies=""
for i in range(3):
s=input('请输⼊你的⼩爱好(最多三个,按Q或q结束):')
if s.upper()=='Q':
break
hobbies +=s+''
print('你的⼩爱好是:',hobbies)
⒌名字的幸运数
import random
str1=input("请输⼊你的名字:")
print("Hello!{}".format(str1))
guard=ord(str1[0])%100
print("你的幸运数字是",random.choice(range(guard)))
第⼆章 Python语⾔基本语法元素
s=input("请输⼊⼀段⽂本:")
i=len(s)-1
while i>=0:
print(s[i],end="")
i=i-1
实例2.2
s=input("请输⼊⼀段⽂本:")
i=-1
while i>=-1*len(s):
print(s[i],end="")
i=i-1
实例2.3
s=input("请输⼊⼀段⽂本:")
print(s[::-1])
习题-编程题:
⒈获得⽤户输⼊的⼀个整数l N,计算并输出N的32次⽅。
s=eval(input("请输⼊⼀个数字:"))
print("{}的32次⽅是{}。".format(s,s**32))
⒉获得⽤户输⼊的⼀段⽂字,将这段⽂字进⾏垂直输出。
s = input("请输⼊⼀段⽂字:")
for c in s:
print(c)
⒊获得⽤户输⼊的⼀个合法算式,例如:1.2+3.4,输出运算结果。
result = eval(input("请输⼊⼀个合法算式(不含等号):"))
print(result)
醋溜土豆丝⒋获得⽤户输⼊的⼀个⼩数,提取并输出其整数部分。
a = eval(input("请输⼊⼀个⼩数:"))
print(int(a))
⒌下⾯这段代码能够获得⽤户输⼊的⼀个整数N,计算并输出1到N相加的和。然⽽,这段代码存在多处语法错误,请指出错误所在并纠正。
1 n=input(“请输⼊整数N:”):
2 sum=0
3for I in range(n)
4 sum+=i+1
5print(“1到N求和结果:”.format(sum))
纠正的代码:
n = eval(input("请输⼊整数N:"))
sum = 0
for i in range(n):
sum += i+1
print("1到N求和结果:{}".format(sum))
第三章基本数据类型
实例解析——恺撒密码
实例3.1
1#CaesarEncode.py
2 ptxt=input("请输⼊明⽂⽂本:")
3for p in ptxt:
4if"a"<=p<="z":
5print(chr(ord("a")+(ord(p)-ord("a")+3)%26),end='')
6elif"A"<=p<="Z":
7print(chr(ord("A")+(ord(p)-ord("A")+3)%26),end='')
8else:
9print(p,end='')
实例3.2
1#CaesarDecode.py
2 ptxt=input("请输⼊加密后⽂本:")
3for p in ptxt:
4if"a"<=p<="z":
5print(chr(ord("a")+(ord(p)-ord("a")-3)%26),end='')
6elif"A"<=p<="Z":
7print(chr(ord("A")+(ord(p)-ord("A")-3)%26),end='')
8else:
9print(p,end='')
实例3.3理科一本大学排名
1 s = """Gur Mra bs Clguba, ol Gvz Crgref
2
3Ornhgvshy vf orggre guna htyl.
4Rkcyvpvg vf orggre guna vzcyvpvg.
5Fvzcyr vf orggre guna pbzcyrk.
6Pbzcyrk vf orggre guna pbzcyvpngrq.
7Syng vf orggre guna arfgrq.
8Fcnefr vf orggre guna qrafr.
9Ernqnovyvgl pbhagf.
10Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf.
11Nygubhtu cenpgvpnyvgl orngf chevgl.
12Reebef fubhyq arire cnff fvyragyl.
13Hayrff rkcyvpvgyl fvyraprq.
14Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff.
15Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg.
16Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu.
17Abj vf orggre guna arire.
18Nygubhtu arire vf bsgra orggre guna *evtug* abj.
23 d = {}
24for c in (65, 97):
25for i in range(26):
26        d[chr(i+c)] = chr((i+13) % 26 + c)
27print("".join([d.get(c, c) for c in s]))
实例3.4
1#CaesarChineseEncode.py
2 ptxt=input("请输⼊明⽂⽂本:")
3for p in ptxt:
4if"a"<=p<="z":
5print(chr(ord("a")+(ord(p)-ord("a")+3)%26),end='')
6elif"A"<=p<="Z":
7print(chr(ord("A")+(ord(p)-ord("A")+3)%26),end='')
8elif 0x4E00<=ord(p)<= 0x9FA5:        #中⽂字符加密处理
9print(chr(ord(p)+3),end='')
10else:
11print(p,end='')
不完美的她日版
习题-编程题
⒊⒈获得⽤户输⼊的⼀个整数,输出该整数百位及以上的数字
1 s=input("请输⼊⼀个整数:")
2 s=int(s)
3if 0<s<100:
4print("请重新输⼊⼀个三位数的整数")
5else:
6    s//=100
7print(s)
⒊⒉获得⽤户输⼊的⼀个字符串,将字符串按照空格分割,然后逐⾏打印出来。
a=input("请输⼊⼀串字符:")
a=a.split()
for i in range(len(a)):
print(a[i])
⒊⒊程序计⼊⼀个表⽰星期⼏的数字(1—7),输出对应的星期字符串名称。例如:输⼊3,返回“星期三”。
weeks = ['', '星期⼀', '星期⼆', '星期三', '星期四', '星期五', '星期六', '星期⽇']
n = int(input('请输⼊⼀个表⽰星期⼏的数字(1——7): '))
print(weeks[n])
1 weeks = {'1': '星期⼀', '2': '星期⼆',
2'3': '星期三', '4': '星期四',
3'5': '星期五', '6': '星期六',
4'7': '星期⽇'
5          }
6
7 n = input('请输⼊⼀个表⽰星期⼏的数字(1——7): ')
(n))
⒊⒋设n是⼀任意⾃然数,如果n的各位数字反向排列所得⾃然数与n相等,则n被称为回⽂数。从键盘输⼊⼀个5位数字,请编写程序判断这个数字是不是回⽂数。
n=eval(input("请输⼊⼀个整数n:"))
if str(n)==str(n)[::-1]:
print("n为回⽂数")
else:
print("n不是回⽂数")
⒊⒌输⼊⼀个⼗进制整数,分别输出其⼆进制、⼋进制、⼗六进制字符串。
n = int(input('请输⼊⼀个⼗进制整数:'))
print('对应的⼆进制:', bin(n))
print('对应的⼋进制:', oct(n))
print('对应的⼗六进制:', hex(n))
num = int(input('输⼊⼀个⼗进制整数:'))
m = "{:b}".format(num)# ⼆进制
n = "{:o}".format(num)# ⼋进制
k = "{:x}".format(num)# ⼗六进制
print('对应的⼆进制:', m)
print('对应的⼋进制:', n)
print('对应的⼗六进制:', k)
的控制结构
程序的控制结构
第4章程序
⽰例:
4.2.1单分⽀结构:if
⒈判断⾮奇偶
#判断⽤户输⼊数字的奇偶性
s = eval(input("请输⼊⼀个整数:"))
if s%2==0:
print("这是个偶数")
print("输⼊数字是:",s)
⒉判定数字特定性质
#判断⽤户输⼊数字的特定
s = eval(input("请输⼊⼀个整数:"))
4.2.2⼆分⽀结构:if-else
⒈判断数字的某个属性⑴王亦丰整容
#判断⽤户输⼊数字的某个属性
s = eval(input("请输⼊⼀个整数:"))
if s%3==0and s%5==0:
print("这个数能够同时被3和5整除")
else:
print("这个数字不能够同时被3和5整除")
⒉判断数字的某个属性⑵
#判断⽤户输⼊数字的某个属性
s = eval(input("请输⼊⼀个整数:"))
token=""if s%3==0and s%5==0 else"不"
print("这个数{}能够同时被3和5整除".format(token))
4.2.3 多分⽀结构:if-elif-else
⒈将百分制成绩转换为五分制成绩(逻辑错误)
1#将百分制成绩转换为五分制成绩
2 score = eval(input("请输⼊⼀个百分制成绩:"))
3if score>=60.0:
4    grade="D"
5elif score >= 70.0:
6    grade="C"
7elif score>=80.0:
8    grade="B"
9elif score>=90.0:
10    grade="A"
11else:
二级VB
12    grade="E"
13print("对应的五分制成绩是:{}".format(grade))
输⼊80分会显⽰显然D,显然百分制80分不应该是等级D,上述代码运⾏正确但逻辑存在错误,弄错了多个逻辑条件的先后关系⒉将百分制成绩转换为五分制成绩(正确)
1#将百分制成绩转换为五分制成绩
2 score = eval(input("请输⼊⼀个百分制成绩:"))
3if score>=90.0:
4    grade="A"
5elif score >= 80.0:
6    grade="B"
7elif score>=70.0:
8    grade="C"
9elif score>=60.0:
10    grade="D"
11else:
12    grade="E"
13print("对应的五分制成绩是:{}".format(grade))
4.3.1遍历循环:for
⒈竖向输出字符串
for c in"Python":
print(c)
⒉竖向输出数字
for i in range(5):
print(i)
⒊遍历循环
for s in"PY":
print("循环执⾏中:"+s)
else:
s="循环正常结束。"
print(s)
4.3.2 ⽆限循环:whil
⒈输出10以内的3的倍数
n=0
while n<10:
print(n)
n=n+3
⒉顺序输出字符串内容
1 s, idx="PY",0
2while idx<len(s):
3print("循环执⾏中:"+s[idx])
4    idx+=1
5else:
6    s="循环正常结束"
7print(s)
4.3.3循环控制:break和continue
⒈特定条件退出程序
while True:
s=input("请输⼊⼀个名字(按Q退出):")
if s=="Q":#必须是⼤写
break
print("输⼊的名字是:",s)
print("程序退出")
⒉break退出最内层循环
1while True:
2    s=input("请输⼊⼀个名字(按Q退出):")
3if s=="Q":
7break#退出for循环但不退出while循环
8print(c,end="")
9print("程序退出")
⒊continue⽤来结束当前当次循环,即跳出循环体中下⾯尚未执⾏的语句,但不跳出当前循环。
非诚勿扰朱晓牵手
for s in"PYTHON":
if s=="Y":
continue
print(s,end="")
4.4程序的异常处理
当执⾏正常程序语句块1发⽣异常时,则执⾏excpet保留字后⾯的语句块2
⒈计算输⼊值的3次⽅
try:
n=eval(input("请输⼊⼀个数字:"))
print("输⼊数字的3次⽅的值为:",n**3)
except:
print("输⼊错误,请输⼊⼀个数字!")
⒉除零错误
try:
for i in range(5):
print(10/i,end="")
except:
print("某种原因,出错了!")
⒊增加指定错误类型
try:
for i in range(5):
print(10/i,end="")
except ZeroDivisionError:
print("除数为零,产⽣了除零错误!")
except:
print("某种原因,出错了!")
4.5实例解析——猜数字游戏
实例4.1
1import random
2 target=random.randint(1,1000)
3 count=0
4while True:
5    guess=eval(input('请输⼊⼀个猜测的整数(1⾄1000):'))
6    count=count+1
7if guess>target:
8print('猜⼤了')
9elif guess<target:
10print('猜⼩了')
11else:
12print('猜对了')
13break
14print("此轮的猜测次数是:",count)
实例4.2——增加异常处理,增加程序鲁棒性。
1import random
2 target=random.randint(1,1000)
3 count=0
4while True:
5try:
6        guess=eval(input('请输⼊⼀个猜测的整数(1⾄1000):'))
7except:
8print('输⼊有误,请重试,不计⼊猜测次数哦!')
9continue
10    count=count+1
11if guess>target:
12print('猜⼤了')
13elif guess<target:
14print('猜⼩了')
15else:
16print('猜对了')
17break
18print("此轮的猜测次数是:",count)
习题-编程题
⒈判断润年
输⼊⼀个年份,输出是否为闰年。#闰年条件:能被4整除但不能被100整除,或者能被400整除的年份都是闰年。
1 years = int(input("请输⼊查询的年份: "))
2if years % 4 == 0 and years % 100 != 0:
3print(years, "普通闰年")
4elif years % 400 == 0:
5print(years, "是世纪闰年")
6else:
7print("不是闰年")
years = int(input("请输⼊查询的年份: "))
if (years % 4 == 0 and years % 100 != 0) or (years % 400 == 0):
print(years, "是闰年")
else:
print(years, "不是闰年")
⒉最⼤公约数计算。
最⼤公约数计算。获得两个整数,求出这两个整数的最⼤公约数和最⼩公倍数。最⼤公约数的计算⼀般使⽤辗转相除法,最⼩公倍数则使⽤两个数的乘积除以最⼤公约数。
1 s1=int(input("请输⼊第⼀个整数:"))
2 s2=int(input("请输⼊第⼆个整数:"))