
实例 021 :猴子偷桃
题目 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半, 又多吃了一个。 以后每天早上都吃了前一天剩下的一
半零一个。到第 10 天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
程序分析 按规则反向推断:猴子有一个桃子,他偷来一个桃子,觉得不够又偷来了与手上等量的桃子,一共偷了 9 天。
peach=1
for i in range(9):
peach=(peach+1)*2 print(peach)
1234
实例 022 :比赛对手
题目 两个乒乓球队进行比赛,各出三人。甲队为 a,b,c 三人,乙队为 x,y,z 三人。已抽签决定比赛名单。有人向队员打听比赛的名单。 a 说他不和 x 比, c 说他不和 x,z 比,请编程序找
出三队赛手的名单。
程序分析 找到条件下不重复的三个对手即可。
a=set('x','y','z')
b=set('x','y','z')
c=set('x','y','z')
c-=set(('x','z'))
a-=set('x')
for i in a:
for j in b:
for k in c:
if len(set((i,j,k)))==3:
print('a:%s,b:%s,c:%s'%(i,j,k)) 12345678910
实例 023 :画菱形
题目 打印出如下图案(菱形) :
*
***
*****
*******
*****
***
*
程序分析 递归调用即可。
def draw(num):
a="*"*(2*(4-num)+1)
print(<a.center>(9,' '))
if num!=1:
draw(num-1)
print(<a.center>(9,' '))
draw(4)
1234567
实例 024 :斐波那契数列 II
题目 有一分数序列: 2/1 ,3/2 ,5/3 ,8/5 , 13/8 ,21/13 ...求出这个数列的前 20 项之和。程序分析 就是斐波那契数列的后一项除以前一项。
a = 2.0 b = 1.0 s = 0
for n in range(1,21):
s += a / b
a,b = a + b,a print (s)
12345678
实例 025 :阶乘求和
题目 求 1+2!+3!+...+20!的和。
程序分析 1+2!+3!+ ...+20!=1+2(1+3(1+4( ...20(1)))) res=1
for i in range(20,1,-1):
res=i*res+1 print(res)
1234
实例 026:递归求阶乘
题目 利用递归方法求 5!。
程序分析 递归调用即可。
def factorial(n):
return n*factorial(n-1) if n>1 else 1 print(factorial(5))
123
实例 027 :递归输出
题目 利用递归函数调用方式,将所输入的 5 个字符,以相反顺序打印出来。
程序分析 递归真是蠢方法。
def rec(string):
if len(string)!=1:
rec(string1:)
print(string[0](#0),end='')
rec(input('string here:')) 123456
实例 028 :递归求等差数列
题目 有 5 个人坐在一起,问第五个人多少岁?他说比第 4 个人大 2 岁。问第 4 个人岁数,
他说比第 3 个人大 2 岁。问第三个人, 又说比第 2 人大两岁。问第 2 个人, 说比第一个人大两岁。最后问第一个人,他说是 10 岁。请问第五个人多大?
程序分析 就一等差数列。
def age(n):
if n==1:
return 10
return 2+age(n-1)
print(age(5)) 12345
实例 029 :反向输出
题目 给一个不多于 5 位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
程序分析 学会分解出每一位数 ,用字符串的方法总是比较省事。
n=int(input(' 输入一个正整数: '))
n=str(n)
print('%d 位数 '%len(n))
print(n::-1) 1234
实例 030 :回文数
题目 一个 5 位数,判断它是不是回文数。即 12321 是回文数,个位与万位相同,十位与千位相同。
程序分析 用字符串比较方便 ,就算输入的不是数字都 ok。
n=input(" 随便你输入啥啦: ") a=0
b=len(n)-1
flag=True
while a<b:
if na!=nb:
print(' 不是回文串 ')
flag=False
break
a,b=a+1,b-1 if flag:
print(' 是回文串 ') 123456789101112
实例 031 :字母识词
题目 请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
程序分析 这里用字典的形式直接将对照关系存好。
weekT={'h':'thursday',
'u':'tuesday'} weekS={'a':'saturday', 'u':'sunday'}
week={'t':weekT,
's':weekS,
'm':'monday', 'w':'wensday',
'f':'friday'}
a=weekstr(input(' 请输入第一位字母 :')).lower() if a==weekT or a==weekS:
print(astr(input(' 请输入第二位字母 :')).lower()) else:
print(a)
123456789101112131415
实例 032 :反向输出 II
题目 按相反的顺序输出列表的值。
程序分析 无。
a = 'one', 'two', 'three' print(a::-1)
12
实例 033:列表转字符串题目 按逗号分隔列表。
程序分析 无。 L = [1](#1),[2](#2),[3](#3),[4](#4),[5](#5)
print(','.join(str(n) for n in L)) 12
实例 034 :调用函数 题目 练习函数调用。
程序分析 无。
def hello():
print('Hello World!')
def helloAgain():
for i in range(2):
hello()
if name ==' main ':
helloAgain()
12345678
实例 035 :设置输出颜色 题目 文本颜色设置。
程序分析 无。
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
print(bcolors.WARNING + " 警告的颜色字体 ?" + bcolors.ENDC) 12345678910
实例 036 :算素数
题目 求 100 之内的素数。
程序分析 用 else 执行 for 循环的奖励代码(如果 for 是正常完结,非 break)。 lo=int(input(' 下限: '))
hi=int(input(' 上限: '))
for i in range(lo,hi+1):
if i > 1:
for j in range(2,i):
if (i % j) == 0:
break
else:
print(i)
123456789
实例 037:排序
题目 对 10 个数进行排序。
程序分析 同实例 005。
raw=\[\]
for i in range(10):
x=int(input('int%d: '%(i)))
raw.append(x)
for i in range(len(raw)):
for j in range(i,len(raw)):
if rawi>rawj:
rawi,rawj=rawj,rawi print(raw)
1234567891011
实例 038 :矩阵对角线之和
题目 求一个 3*3 矩阵主对角线元素之和。
程序分析 无。
mat=\[1,2,3, [3](#3),[4](#4),[5](#5),
[4](#4),[5](#5),[6](#6)
]
res=0
for i in range(len(mat)):
res+=matii print(res)
12345678
实例 039 :有序列表插入元素
题目 有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
程序分析 首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
lis=[1](#1),[10](#10),[100](#100),[1000](#1000),[10000](#10000),[100000](#100000) n=int(input('insert a number: '))
lis.append(n)
for i in range(len(lis)-1):
if lisi>=n:
for j in range(i,len(lis)):
lisj,lis-1=lis-1,lisj
break
print(lis)
123456789
实例 040 :逆序列表
题目 将一个数组逆序输出。
程序分析 依次交换位置,或者直接调用 reverse 方法。
lis=[1](#1),[10](#10),[100](#100),[1000](#1000),[10000](#10000),[100000](#100000) for i in range(int(len(lis)/2)):
lisi,lislen(lis)-1-i=lislen(lis)-1-i,lisi print(' 第一种实现: ')
print(lis)
lis=[1](#1),[10](#10),[100](#100),[1000](#1000),[10000](#10000),[100000](#100000) print(' 第二种实现: ')
lis.reverse()
print(lis)
123456789101112
实例 041 :类的方法与变量 题目 模仿静态变量的用法。
程序分析 构造类,了解类的方法与变量。
def dummy():
i=0
print(i)
i+=1
class cls:
i=0
def dummy(self): print(self.i) self.i+=1
a=cls()
for i in range(50): dummy()
a.dummy()
123456789101112131415
实例 042 :变量作用域
题目 学习使用 auto 定义变量的用法。程序分析 python 中的变量作用域。
i=0
n=0
def dummy(): i=0
print(i) i+=1
def dummy2(): global n print(n)
n+=1
print(' 函数内部的同名变量 ')
for j in range(20):
print(i)
dummy()
i+=1
print('global 声明同名变量 ')
for k in range(20):
print(n)
dummy2()
n+=10
1234567891011121314151617181920
实例 043:作用域、类的方法与变量
题目 模仿静态变量 (static) 另一案例。程序分析 综合实例 041 和实例 042。
class dummy:
num=1
def Num(self):
print('class dummy num:',self.num) print('global num: ',num)
self.num+=1
n=dummy()
num=1
for i in range(5):
num*=10
n.Num()
123456789101112
实例 044 :矩阵相加
题目 计算两个矩阵相加。
程序分析 创建一个新的矩阵,使用 for 迭代并取出 X 和 Y 矩阵中对应位置的值,相加后放到新矩阵的对应位置中。
X = \[12,7,3, [4](#4) ,[5](#5),[6](#6),
[7](#7) ,[8](#8),[9](#9)\]
Y = \[5,8,1, [6](#6),[7](#7),[3](#3),
[4](#4),[5](#5),[9](#9)\]
res=\[0,0,0, [0](#0),[0](#0),[0](#0),
[0](#0),[0](#0),[0](#0)\]
for i in range(len(res)):
for j in range(len(res[0](#0))):
resij=Xij+Yij
print(res)
12345678910111213141516
实例 045 :求和
题目 统计 1 到 100 之和。
程序分析 无
res=0
for i in range(1,101):
res+=i print(res) 1234
实例 046 :打破循环
题目 求输入数字的平方,如果平方运算后小于 50 则退出。
程序分析 无
while True:
try:
n=float(input(' 输入一个数字: '))
except:
print(' 输入错误 ')
Continue
dn=n**2
print(' 其平方为: ',dn)
if dn<50:
print(' 平方小于 50,退出 ')
break
1234567891011
实例 047 :函数交换变量
题目 两个变量值用函数互换。
程序分析 无def exc(a,b):
return (b,a) a=0
b=10
a,b=exc(a,b)
print(a,b) 123456
实例 048 :数字比大小 题目 数字比较。
程序分析 无
a=int(input('a='))
b=int(input('b='))
if a<b:
print('a<b') elif a>b:
print('a>b') else:
print('a=b')
12345678
实例 049 : lambda
题目 使用 lambda 来创建匿名函数。程序分析 无
Max=lambda x,y:x*(x>=y)+y*(y>x)
Min=lambda x,y:x*(x<=y)+y*(y<x)
a=int(input('1:'))
b=int(input('2:'))
print(Max(a,b))
print(Min(a,b)) 12345678
实例 050 :随机数
题目 输出一个随机数。
程序分析 使用 random 模块。 import random
print(random.uniform(10,20)) 12
实例 051 :按位与
题目 学习使用按位与 & 。
程序分析 0&0=0; 0&1=0; 1&0=0; 1&1=1 。
a=0o77 print(a) b=a&3 print(b) b=b&7 print(b) 123456
实例 052 :按位或
题目 学习使用按位或 | 。
程序分析 0|0=0; 0|1=1; 1|0=1; 1|1=1 a=0o77
print(a|3)
print(a|3|7) 123
实例 053 :按位异或
题目 学习使用按位异或 ^ 。
程序分析 0^0=0; 0^1=1; 1^0=1; 1^1=0 a=0o77
print(a^3)
print(a^3^7) 123
实例 054 :位取反、位移动
题目 取一个整数 a 从右端开始的 4? 7 位。
程序分析 可以这样考虑:
(1)先使 a 右移 4 位。
(2)设置一个低 4 位全为 1,其余全为 0 的数。可用 (0<<4)
(3)将上面二者进行 &运算。
a=int(input(' 输入一个数字 : '))
b=0 # 0
b=~b # 1
b=b<<4 # 10000
b=~b # 1111
c=a>>4 d=c&b
print('a:',bin(a))
print('b:',bin(b))
print('c:',bin(c))
print('d:',bin(d)) 1234567891011
实例 055 :按位取反
题目 学习使用按位取反 ~。
程序分析 ~0=1; ~1=0;
print(~234)
print(~~234) 12
实例 056 :画圈
题目 画图,学用 circle 画圆形。
程序分析 无。
from tkinter import *
canvas=Canvas(width=800,height=600,bg='yellow')
canvas.pack(expand=YES,fill=BOTH) k=1
j=1
for i in range(26):
canvas.create_oval(310-k,250-k,310+k,250+k,width=1) k+=j
j+=0.3
mainloop()
12345678910
实例 057 :画线
题目 画图,学用 line 画直线。
程序分析 无。
if name == ' main ': from tkinter import *
canvas = Canvas(width=300, height=300, bg='green') canvas.pack(expand=YES, fill=BOTH)
x0 = 263
y0 = 263
y1 = 275
x1 = 275
for i in range(19):
canvas.create_line(x0,y0,x0,y1, width=1, fill='red') x0 = x0 - 5
y0 = y0 - 5
x1 = x1 + 5
y1 = y1 + 5
x0 = 263
y1 = 275
y0 = 263
for i in range(21):
canvas.create_line(x0,y0,x0,y1,fill = 'red')
x0 += 5
y0 += 5
y1 += 5
mainloop()
1234567891011121314151617181920212223242526
实例 058 :画矩形
题目 画图,学用 rectangle 画方形。
程序分析 无。
if name == ' main ': from tkinter import *
root = Tk()
root.title('Canvas')
canvas = Canvas(root,width = 400,height = 400,bg = 'yellow') x0 = 263
y0 = 263
y1 = 275
x1 = 275
for i in range(19):
canvas.create_rectangle(x0,y0,x1,y1)
x0 -= 5
y0 -= 5
x1 += 5
y1 += 5
canvas.pack()
root.mainloop()
123456789101112131415161718
实例 059 :画图(丑)
题目 画图,综合例子。
程序分析 丑。
if name == ' main ': from tkinter import *
canvas = Canvas(width = 300,height = 300,bg = 'green') canvas.pack(expand = YES,fill = BOTH)
x0 = 150
y0 = 100
canvas.create_oval(x0 - 10,y0 - 10,x0 + 10,y0 + 10)
canvas.create_oval(x0 - 20,y0 - 20,x0 + 20,y0 + 20)
canvas.create_oval(x0 - 50,y0 - 50,x0 + 50,y0 + 50) import math
B = 0.809
for i in range(16):
a = 2 * math.pi / 16 * i
x = math.ceil(x0 + 48 * math.cos(a))
y = math.ceil(y0 + 48 * math.sin(a) * B)
canvas.create_line(x0,y0,x,y,fill = 'red')
canvas.create_oval(x0 - 60,y0 - 60,x0 + 60,y0 + 60)
for k in range(501):
for i in range(17):
a = (2 * math.pi / 16) * i + (2 * math.pi / 180) * k x = math.ceil(x0 + 48 * math.cos(a))
y = math.ceil(y0 + 48 + math.sin(a) * B)
canvas.create_line(x0,y0,x,y,fill = 'red') for j in range(51):
a = (2 * math.pi / 16) * i + (2* math.pi / 180) * k - 1 x = math.ceil(x0 + 48 * math.cos(a))
y = math.ceil(y0 + 48 * math.sin(a) * B)
canvas.create_line(x0,y0,x,y,fill = 'red')
mainloop()
12345678910111213141516171819202122232425262728293031
实例 060 :字符串长度
题目 计算字符串长度。
程序分析 无。
s='zhangguang101'
print(len(s))
12