基础练习-5
1. 打印出杨辉三角形(要求打印出10行如下图)
程序分析:无。 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(str(a[i][j])) stdout.write(' ') print() # 以上实例输出结果为: ''' 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 '''
2. 查找字符串。
程序分析:无。 sStr1 = 'abcdefg' sStr2 = 'cde' print( sStr1.find(sStr2)) # 以上实例输出结果为: ''' 2 '''
3. 画椭圆。
程序分析:使用 Tkinter。 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()
4. 利用ellipse 和 rectangle 画图。。
程序分析:无。 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()
5. 一个最优美的图案。
程序分析:无。 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()
6. 输入3个数a,b,c,按大小顺序输出。
程序分析:无。 if __name__ == '__main__': n1 = int(input('n1 = :\n')) n2 = int(input('n2 = :\n')) n3 = int(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) # 以上实例输出结果为: ''' n1 = : 123 n2 = : 456 n3 = : 789 123 456 789 '''
7. 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
程序分析:无。 def inp(numbers): for i in range(6): numbers.append(int(input('输入一个数字:\n'))) p = 0 def arr_max(array): max = 0 for i in range(1,len(array) - 1): p = i if array[p] > array[max] : max = p k = max array[0],array[k] = array[k],array[0] def arr_min(array): min = 0 for i in range(1,len(array) - 1): p = i if array[p] < array[min] : min = p l = min array[5],array[l] = array[l],array[5] def outp(numbers): for i in range(len(numbers)): print( numbers[i]) if __name__ == '__main__': array = [] inp(array) # 输入 6 个数字并放入数组 arr_max(array) # 获取最大元素并与第一个元素交换 arr_min(array) # 获取最小元素并与最后一个元素交换 print( '计算结果:') outp(array) # 以上实例输出结果为: ''' 输入一个数字: 1 输入一个数字: 2 输入一个数字: 3 输入一个数字: 7 输入一个数字: 9 输入一个数字: 8 计算结果: 9 2 3 7 8 1 '''
8. 有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数
程序分析:无。 if __name__ == '__main__': n = int(input('整数 n 为:\n')) m = int(input('向后移 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(input('输入一个数字:\n'))) print( '原始列表:',number) move(number,n,m) print( '移动之后:',number) # 以上实例输出结果为: ''' 整数 n 为: 8 向后移 m 个位置为: 5 输入一个数字: 2 输入一个数字: 8 输入一个数字: 6 输入一个数字: 1 输入一个数字: 78 输入一个数字: 45 输入一个数字: 34 输入一个数字: 2 原始列表: [2, 8, 6, 1, 78, 45, 34, 2] 移动之后: [1, 78, 45, 34, 2, 2, 8, 6] '''
9. 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
程序分析:无。 if __name__ == '__main__': nmax = 50 n = int(input('请输入总人数:')) 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 += 1 i += 1 if i == n : i = 0 i = 0 while num[i] == 0: i += 1 print( num[i]) # 执行以上代码,输出结果: ''' $ python test.py 请输入总人数:34 10 '''
10. 写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
程序分析:无。 if __name__ == '__main__': s = input('please input a string:\n') print( 'the string has %d characters.' % len(s)) # 以上实例输出结果为: ''' please input a string: abc the string has 3 characters. '''
11. 编写input()和output()函数输入,输出5个学生的数据记录。
程序分析:无。 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] = input('input student num:\n') stu[i][1] = input('input student name:\n') for j in range(3): stu[i][2].append(int(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) # 以上实例输出结果为: ''' input student num: 2 input student name: aaa score: 89 score: 98 score: 67 input student num: bbb input student name: ccc score: 87 score: 45 score: 68 input student num: ddd input student name: eee score: 56 score: 78 score: 56 [['2', 'aaa', [89, 98, 67]], ['bbb', 'ccc', [87, 45, 68]], ['ddd', 'eee', [56, 78, 56]], ['', '', []], ['', '', []]] 2 aaa 89 98 67 bbb ccc 87 45 68 ddd eee 56 78 56 '''
12. 创建一个链表。
程序分析:无。 if __name__ == '__main__': ptr = [] for i in range(5): num = int(input('please input a number:\n')) ptr.append(num) print( ptr) # 以上实例输出结果为: ''' please input a number: 3 please input a number: 5 please input a number: 7 please input a number: 8 please input a number: 2 [3, 5, 7, 8, 2] '''
13. 反向输出一个链表。
程序分析:无。 if __name__ == '__main__': ptr = [] for i in range(5): num = int(input('please input a number:\n')) ptr.append(num) print( ptr) ptr.reverse() print( ptr) # 以上实例输出结果为: ''' please input a number: 6 please input a number: 5 please input a number: 3 please input a number: 4 please input a number: 8 [6, 5, 3, 4, 8] [8, 4, 3, 5, 6] '''
14. 列表排序及连接。
程序分析:排序可使用 sort() 方法,连接可以使用 + 号或 extend() 方法。 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) ''' [1, 2, 3] [1, 2, 3, 3, 4, 5] [1, 2, 3, 3, 4, 5] '''
15. 放松一下,算一道简单的题目。
程序分析:无。 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) # 以上实例输出结果为: ''' 67 '''
16. 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n
程序分析:无。 def peven(n): i = 0 s = 0.0 for i in range(2,n + 1,2): s += 1.0 / i # Python里,整数除整数,只能得出整数,所以需要使用 浮点数 1.0 return s def podd(n): s = 0.0 for i in range(1, n + 1,2): s += 1.0 / i # Python里,整数除整数,只能得出整数,所以需要使用 浮点数 1.0 return s def dcall(fp,n): s = fp(n) return s if __name__ == '__main__': n = int(input('input a number:\n')) if n % 2 == 0: sum = dcall(peven,n) else: sum = dcall(podd,n) print( sum) #以上实例输出结果为: ''' input a number: 6 0.916666666667 '''
17. 循环输出列表
程序分析:无。 if __name__ == '__main__': s = ["man","woman","girl","boy","sister"] for i in range(len(s)): print( s[i]) # 以上实例输出结果为: ''' man woman girl boy sister '''
18. 找到年龄最大的人,并输出。请找出程序中有什么问题。
程序分析:无。 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])) # 以上实例输出结果为: ''' wang,50 '''
19. 字符串排序。
程序分析:无。 if __name__ == '__main__': str1 = input('input string:\n') str2 = input('input string:\n') str3 = 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) # 以上实例输出结果为: ''' input string: abcde input string: efdis input string: adk abcde efdis adk after being sorted. abcde adk efdis '''
20. 海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
程序分析:无。 if __name__ == '__main__': i = 0 j = 1 x = 0 while (i < 5) : x = 4 * j for i in range(0,5) : if(x%4 != 0) : break else : i += 1 x = (x/4) * 5 +1 j += 1 print( x) # 以上实例输出结果为: ''' 3121 '''