python 经典100例(61-80)
 
'''
 
【程序61】
 
题目:打印出杨辉三角形(要求打印出10行如下图)   
 
1.程序分析:
 
'''
 
 
if __name__ == '__main__':
 
a = []
 
for i in range(10):
 
a.append([])
 
for j in range(10):
 
a[i].append(0)
 
for i in range(10):
 
a[i][0] = 1
 
a[i][i] = 1
 
for i in range(2,10):
 
for j in range(1,i):
 
a[i][j] = a[i - 1][j-1] + a[i - 1][j]
 
from sys import stdout
 
for i in range(10):
 
for j in range(i + 1):
 
stdout.write(a[i][j])
 
stdout.write(' ')
 
print
 
 
 
'''
 
【程序62】
 
题目:查找字符串。  
 
程序分析:无。
 
程序源代码:
 
#!/usr/bin/python
 
# -*- coding: UTF-8 -*-
 
 
sStr1 = 'abcdefg'
 
sStr2 = 'cde'
 
print sStr1.find(sStr2)
 
 
 
'''
 
【63】题目:画椭圆ellipse   
 
1.程序分析:
 
2.程序源代码:
 
'''
 
if __name__ == '__main__':
 
from Tkinter import *
 
x = 360
 
y = 160
 
top = y - 30
 
bottom = y - 30
 
 
canvas = Canvas(width = 400,height = 600,bg = 'white')
 
for i in range(20):
 
canvas.create_oval(250 - top,250 - bottom,250 + top,250 + bottom)
 
top -= 5
 
bottom += 5
 
canvas.pack()
 
mainloop()
 
 
 
'''
 
【64】题目:利用ellipse and rectangle 画图。
 
1.程序分析:
 
2.程序源代码:
 
'''
 
if __name__ == '__main__':
 
from Tkinter import *
 
canvas = Canvas(width = 400,height = 600,bg = 'white')
 
left = 20
 
right = 50
 
top = 50
 
num = 15
 
for i in range(num):
 
canvas.create_oval(250 - right,250 - left,250 + right,250 + left)
 
canvas.create_oval(250 - 20,250 - top,250 + 20,250 + top)
 
canvas.create_rectangle(20 - 2 * i,20 - 2 * i,10 * (i + 2),10 * ( i + 2))
 
right += 5
 
left += 5
 
top += 10
 
 
canvas.pack()
 
mainloop()
 
 
 
'''
 
【程序65】
 
题目:一个最优美的图案。   
 
1.程序分析:
 
2.程序源代码:
 
'''
 
import math
 
class PTS:
 
def __init__(self):
 
self.x = 0
 
self.y = 0
 
points = []
 
 
def LineToDemo():
 
from Tkinter import *
 
screenx = 400
 
screeny = 400
 
canvas = Canvas(width = screenx,height = screeny,bg = 'white')
 
 
AspectRatio = 0.85
 
MAXPTS = 15
 
h = screeny
 
w = screenx
 
xcenter = w / 2
 
ycenter = h / 2
 
radius = (h - 30) / (AspectRatio * 2) - 20
 
step = 360 / MAXPTS
 
angle = 0.0
 
for i in range(MAXPTS):
 
rads = angle * math.pi / 180.0
 
p = PTS()
 
p.x = xcenter + int(math.cos(rads) * radius)
 
p.y = ycenter - int(math.sin(rads) * radius * AspectRatio)
 
angle += step
 
points.append(p)
 
canvas.create_oval(xcenter - radius,ycenter - radius,
 
xcenter + radius,ycenter + radius)
 
for i in range(MAXPTS):
 
for j in range(i,MAXPTS):
 
canvas.create_line(points[i].x,points[i].y,points[j].x,points[j].y)
 
 
canvas.pack()
 
mainloop()
 
if __name__ == '__main__':
 
LineToDemo()
 
 
 
 
'''
 
【程序66】
 
题目:输入3个数a,b,c,按大小顺序输出。   
 
1.程序分析:利用指针方法。
 
2.程序源代码:
 
'''
 
if __name__ == '__main__':
 
n1 = int(raw_input('n1 = :\n'))
 
n2 = int(raw_input('n2 = :\n'))
 
n3 = int(raw_input('n3 = :\n'))
 
 
def swap(p1,p2):
 
return p2,p1
 
 
if n1 > n2 : n1,n2 = swap(n1,n2)
 
if n1 > n3 : n1,n3 = swap(n1,n3)
 
if n2 > n3 : n2,n3 = swap(n2,n3)
 
 
print n1,n2,n3
 
 
 
'''
 
【67】题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
 
1.程序分析:无      
 
2.程序源代码:
 
'''
 
def inp(numbers):
 
for i in range(9):
 
numbers.append(int(raw_input('input a number:\n')))
 
numbers.append(int(raw_input('input a number:\n')))
 
p = 0
 
def max_min(array):
 
max = min = 0
 
for i in range(1,len(array) - 1):
 
p = i
 
if array[p] > array[max] : max = p
 
elif array[p] < array[min] : min = p
 
k = max
 
l = min
 
array[0],array[l] = array[l],array[0]
 
array[9],array[k] = array[k],array[9]
 
 
def outp(numbers):
 
for i  in range(len(numbers)):
 
print numbers[i]
 
 
if __name__ == '__main__':
 
array = []
 
inp(array)
 
max_min(array)
 
outp(array)
 
 
 
'''
 
【程序68】
 
题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
 
1.程序分析:
 
2.程序源代码:
 
'''
 
if __name__ == '__main__':
 
n = int(raw_input('the total number is:\n'))
 
m = int(raw_input('back m:\n'))
 
 
def move(array,n,m):
 
array_end = array[n - 1]
 
for i in range(n - 1,-1,- 1):
 
array[i] = array[i - 1]
 
array[0] = array_end
 
m -= 1
 
if m > 0:move(array,n,m)
 
 
number = []
 
for i in range(n):
 
number.append(int(raw_input('input a number:\n')))
 
print 'orignal number:',number
 
 
move(number,n,m)
 
 
print 'after moved:',number
 
 
 
'''
 
 【程序69】
 
 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出
 
    圈子,问最后留下的是原来第几号的那位。
 
1. 程序分析:
 
2.程序源代码:
 
'''
 
if __name__ == '__main__':
 
nmax = 50
 
n = int(raw_input('please input the total of numbers:'))
 
num = []
 
for i in range(n):
 
num.append(i + 1)
 
 
i = 0
 
k = 0
 
m = 0
 
 
while m < n - 1:
 
if num[i] != 0 : k += 1
 
if k == 3:
 
num[i] = 0
 
k = 0
 
m += 0
 
i += 1
 
if i == n : i = 0
 
 
i = 0
 
while num[i] == 0: i += 1
 
print num[i]
 
 
 
'''
 
 【70】题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。   
 
1.程序分析:
 
2.程序源代码
 
 就这样吧
 
'''
 
 if __name__ == '__main__':
 
     s = raw_input('please input a string:\n')
 
     print 'the string has %d characters.' % len(s)
 
 
 
'''
 
 【程序71】
 
 题目:编写input()和output()函数输入,输出5个学生的数据记录。
 
1.程序分析:
 
2.程序源代码:
 
 使用list来模拟结构(不使用class)
 
stu = [string,string,list]
 
'''
 
N = 3
 
#stu
 
# num : string
 
# name : string
 
# score[4]: list
 
student = []
 
for i in range(5):
 
student.append(['','',[]])
 
 
def input_stu(stu):
 
for i in range(N):
 
stu[i][0] = raw_input('input student num:\n')
 
stu[i][1] = raw_input('input student name:\n')
 
for j in range(3):
 
stu[i][2].append(int(raw_input('score:\n')))
 
 
def output_stu(stu):
 
for i in range(N):
 
print '%-6s%-10s' % ( stu[i][0],stu[i][1] )
 
for j in range(3):
 
print '%-8d' % stu[i][2][j]
 
 
if __name__ == '__main__':
 
input_stu(student)
 
print student
 
output_stu(student)
 
 
 
'''
 
 【程序72】
 
 题目:创建一个链表。
 
1.程序分析:           
 
2.程序源代码:
 
'''
 
 if __name__ == '__main__':
 
     ptr = []
 
     for i in range(5):
 
         num = int(raw_input('please input a number:\n'))
 
         ptr.append(num)
 
     print ptr
 
 
 
'''
 
 【73】题目:反向输出一个链表。   
 
1.程序分析:
 
2.程序源代码:
 
 '''
 
 if __name__ == '__main__':
 
     ptr = []
 
     for i in range(5):
 
         num = int(raw_input('please input a number:\n'))
 
         ptr.append(num)
 
     print ptr
 
     ptr.reverse()
 
     print ptr
 
 
 
'''
 
 【程序74】
 
 题目:列表排序及连接。
 
 程序分析:排序可使用 sort()  方法,连接可以使用 + 号或 extend()  方法。
 
 程序源代码:
 
 实例
 
#!/usr/bin/python
 
# -*- coding: UTF-8 -*-
 
 
 if __name__ == '__main__':
 
     a = [1,3,2]
 
     b = [3,4,5]
 
     a.sort()     #  对列表 a 进行排序
 
     print a
 
     # 连接列表 a 与 b
 
     print a+b
 
     # 连接列表 a 与 b
 
     a.extend(b)
 
     print a
 
 
 
'''
 
 【程序75】
 
 题目:放松一下,算一道简单的题目。
 
1.程序分析:
 
2.程序源代码:67
 
'''
 
if __name__ == '__main__':
 
for i in range(5):
 
n = 0
 
if i != 1: n += 1
 
if i == 3: n += 1
 
if i == 4: n += 1
 
if i != 4: n += 1
 
if n == 3: print 64 + i
 
 
 
'''
 
 【程序76】
 
 题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数
 
    1/1+1/3+...+1/n(利用指针函数)
 
1.程序分析:
 
2.程序源代码:
 
'''
 
def peven(n):
 
i = 0
 
s = 0.0
 
for i in range(2,n + 1,2):
 
s += 1.0 / i
 
return s
 
 
def podd(n):
 
s = 0.0
 
for i in range(1, n + 1,2):
 
s += 1 / i
 
return s
 
 
def dcall(fp,n):
 
s = fp(n)
 
return s
 
 
if __name__ == '__main__':
 
n = int(raw_input('input a number:\n'))
 
if n % 2 == 0:
 
sum = dcall(peven,n)
 
else:
 
sum = dcall(podd,n)
 
print sum
 
 
 
'''
 
 【程序77】
 
 题目:填空练习(指向指针的指针)循环输出列表
 
1.程序分析:     
 
2.程序源代码:
 
 
'''
 
if __name__ == '__main__':
 
s = ["man","woman","girl","boy","sister"]
 
for i in range(len(s)):
 
print s[i]
 
 
 
 
'''
 
 【程序78】
 
 题目:找到年龄最大的人,并输出。请找出程序中有什么问题。
 
1.程序分析:
 
2.程序源代码
 
'''
 
if __name__ == '__main__':
 
person = {"li":18,"wang":50,"zhang":20,"sun":22}
 
m = 'li'
 
for key in person.keys():
 
if person[m] < person[key]:
 
m = key
 
 
print '%s,%d' % (m,person[m])
 
 
 
'''
 
 【程序79】
 
 题目:字符串排序。
 
1.程序分析:
 
2.程序源代码:
 
'''
 
if __name__ == '__main__':
 
str1 = raw_input('input string:\n')
 
str2 = raw_input('input string:\n')
 
str3 = raw_input('input string:\n')
 
print str1,str2,str3
 
 
if str1 > str2 : str1,str2 = str2,str1
 
if str1 > str3 : str1,str3 = str3,str1
 
if str2 > str3 : str2,str3 = str3,str2
 
 
print 'after being sorted.'
 
print str1,str2,str3
 
 
 
 
if __name__=='__main__':
 
list1=[]
 
str1=raw_input('请输入第一个字符串:')
 
str2=raw_input('请输入第二个字符串:')
 
str3=raw_input('请输入第三个字符串:')
 
list1.extend([str1,str2,str3])
 
list2=sorted(list1)
 
print '排序后的字符串为:'
 
for item in list2:
 
print item
 
 
 
'''
 
 【程序80】
 
 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只
 
    猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了
 
    一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,
 
    问海滩上原来最少有多少个桃子?
 
1.程序分析:
 
2.程序源代码:
 
'''
 
if __name__ == '__main__':
 
for i in range(4,10000,4):
 
count = 0
 
m = i
 
for k in range(5):
 
j = i / 4 * 5 + 1
 
i = j
 
if j % 4 == 0:
 
count += 1
 
else:
 
break
 
i = m
 
if count == 4:
 
print count
 
break
 
 
# 猴子分桃,最少问题分析:问最少有多少只桃子,则岸上最后剩的桃子数目越小,则原岸上的桃子越少
 
# 假设最后岸上还剩4x只桃子,可以利用递归方法求解
 
 
num=int(input("输入猴子的数目:"))
 
def fn(n):
 
if n==num:
 
return(4*x)       #最后剩的桃子的数目
 
else:
 
return(fn(n+1)*5/4+1)
 
 
x=1
 
while 1:
 
count=0
 
for i in range(1,num):
 
if fn(i)%4==0 :
 
count=count+1
 
if count==num-1:
 
print("海滩上原来最少有%d个桃子" % int(fn(0)))
 
break
 
else: