> 技术文档 > 【Python】Python 100题 分类入门练习题 - 新手友好_python基础题库100题及答案

【Python】Python 100题 分类入门练习题 - 新手友好_python基础题库100题及答案


Python 100题 分类入门练习题 - 新手友好篇 - 整合篇

  • 一、数学问题
    • 题目1:组合数字
    • 题目2:利润计算
    • 题目3:完全平方数
    • 题目4:日期天数计算
    • 题目11:兔子繁殖问题
    • 题目18:数列求和
    • 题目19:完数判断
    • 题目21:猴子吃桃
    • 题目24:分数序列求和
    • 题目25:阶乘累加
    • 题目26:阶乘递归
    • 题目28:年龄推理
    • 题目80:猴子分桃问题
    • 题目83:奇数组合数
    • 题目85:9的倍数验证
    • 题目81:数学等式验证
  • 二、字符串操作
    • 题目13:水仙花数
    • 题目17:字符统计
    • 题目33:列表转字符串
    • 题目62:子串查找
    • 题目89:加密算法
    • 题目96:子串计数
    • 题目98:大小写转换
    • 题目60:字符串长度
    • 题目86:字符串连接
    • 题目31:星期判断
  • 三、列表与字典操作
    • 题目5:三数排序
    • 题目38:矩阵对角线
    • 题目44:矩阵相加
    • 题目68:数组循环移位
    • 题目69:约瑟夫环问题
    • 题目72:创建链表
    • 题目73:反向链表
    • 题目100:列表转字典
    • 题目39:数组插入排序
    • 题目67:数组极值交换
    • 题目79:字符串排序
    • 题目66:数组逆序输出
    • 题目40:数组逆序
  • 四、文件操作
    • 题目97:写入文件
    • 题目98:文件保存
    • 题目99:文件合并排序
  • 五、日期时间处理
    • 题目10:格式化时间
    • 题目16:日期输出
    • 题目95:日期解析
    • 题目91:时间函数示例1
    • 题目92:时间函数示例2
    • 题目93:时间函数示例3
    • 题目94:反应速度测试
  • 六、图形绘制
    • 题目56:圆形绘制
    • 题目57:直线绘制
    • 题目58:方形绘制
    • 题目59:综合图形
    • 题目63:椭圆绘制
    • 题目64:图形组合
    • 题目65:艺术图案
    • 题目23:菱形打印
  • 七、算法与数据结构
    • 题目6:斐波那契数列
    • 题目12:素数筛选
    • 题目20:小球弹跳计算
    • 题目22:比赛名单排列
    • 题目61:杨辉三角生成
    • 题目76:分段函数计算
    • 题目77:循环输出列表
    • 题目78:最大年龄查找
    • 题目84:列表极值交换
    • 题目8:九九乘法表
    • 题目9:延时输出
    • 题目14:质因数分解
    • 题目15:成绩分级
  • 八、位运算
    • 题目51:按位与
    • 题目52:按位或
    • 题目53:按位异或
    • 题目54:位截取
    • 题目55:按位取反
    • 题目82:八进制转十进制
  • 九、其他编程问题
    • 题目27:递归逆序
    • 题目29:数字拆分统计
    • 题目30:回文数判断
    • 题目32:列表逆序输出
    • 题目34:三次输出函数
    • 题目35:文本颜色设置
    • 题目36:素数筛选
    • 题目37:十数排序
    • 题目41:静态变量
    • 题目42:自动变量
    • 题目43:静态变量案例
    • 题目45:数字累加
    • 题目46:平方阈值判断
    • 题目47:变量交换
    • 题目48:数字比较
    • 题目49:匿名函数
    • 题目50:随机数生成
    • 题目71:学生数据IO
    • 题目87:结构体变量传递
    • 题目88:星号打印

一、数学问题

题目1:组合数字

题目1: 有四个数字:1234,能组成多少个互不相同且无重复数字的三位数?各是多少?# 正常 num =[]for a in range(1,5): for b in range(1,5): for c in range(1,5): if (a != b and a!= c and b!=c) : # if a != b != c 只判断了a不等于b,b不等于c,没有判断a和c的关系  num.append(a*100 + b*10 + c)print(num) # 简写: x = [1,2,3,4]num = [i*100 + j*10 + k for i in x for j in x for k in x if (j != i and k != j and k != i)]# itertools ,结果需处理 import itertoolsnum = [] x=[1,2,3,4]for i in itertools.permutations(x,3): num.append(i)print(num) 

题目2:利润计算

题目2:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%20万到40万之间时,高于20万元的部分,可提成5%40万到60万之间时高于40万元的部分,可提成3%60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?\"\"\"# 比较简单,直接上答案 def get_bonus(profit): bonus = 0 if profit <= 100000: bonus = profit*0.1 # 不能写百分数7.5%,需转化为小数点 elif 100000 < profit <= 200000: bonus = get_bonus(100000) + (profit-100000)*0.075 elif 200000 < profit <= 400000: bonus = get_bonus(200000) + (profit-200000)*0.05 elif 400000 < profit <= 600000: bonus = get_bonus(400000) + (profit-400000)*0.03 elif 600000 < profit <= 1000000: bonus = get_bonus(600000) + (profit-600000)*0.015 else : bonus = get_bonus(1000000) + (profit-1000000)*0.01 return bonusget_bonus(1000000)

题目3:完全平方数

题目3:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?\"\"\"分析: a + 100 = b**2 + 168 = c**2 168 = c**2 - b**2 因为b小于c,且b,c都属于168,所以b∈c for c in range(1,168): for b in range(1,c): if c**2-b**2 == 168: a = b**2 - 100 print(a)\"\"\"

题目4:日期天数计算

题目4:输入某年某月某日,判断这一天是这一年的第几天?\"\"\"分析:1. 月份 += 天数;2. 1,4,9,11月 固定30天,35681012月 固定31, 2月闰年28天,非润29;3. 考虑系统语言计算差会存在1天误差,所以起始天数为1; def get_days(year,month,day): days = [31,28,31,30,31,60,31,31,30,31,30,31] sum = 1 # 不能是0,日期从1开始算 if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0) : days[2] = days[2]+1 else: days[2] = days[2] for i in range(month-1): sum += days[i] return sum get_days(2021,3,1)

题目11:兔子繁殖问题

题目11:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?\"\"\"分析: 每一对新兔子的第3个月会数量裂变,所以这一对兔子第n月生的兔子数为: sum = 2+(n-2)*2; 第二个兔子对也遵循这个逻辑;month = [1,2,3,4,5,6,7,8...]rab_1 = [2,2,2,2,2,2,2,2...]rab_2 = [0,0,2,2,4,6,8,10...]rab_3 = [0,0,0,2,2,4,6,8...]rab_4 = [0,0,0,0,2,2,4,6...]rab_5 = [0,0,0,0,0,2,2,4]rab_6 = [0,0,0,0,0,0,2,2]rab_7 = [0,0,0,0,0,0,0,2]...汇总 = [2,2,4,6,10,16,26,42...]从汇总可得,符合斐波那契数列的变式, 从官网看得理解题目和答案不匹配,一对=2 而不是1; def rabbits(n): if n==1 or n==2: return 2 return rabbits(n-1)+rabbits(n-2)rabbits(7)

题目18:数列求和

题目18:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制.\"\"\" 分析:传入2个参数 1.总的几个数相加即最长的长度: len = 5 2.传入的n 是什么:2 22 222 2222 22222 找规律:2 = 2*10**0 n = 2= (len-1) 22 = 2*10**1+2222 = 2*10**2 + 222222 = 2*10**3 + 222得公式: tmp = n*10**(len-1) + tmp def get_sum(n,len): sum = 0 # 输出和  tmp = 0 # 分解的值  for a in range(1,len+1): # a 浮标 = 幂  tmp = n*10**(a-1) + tmp sum += tmp return sum get_sum(2,5) 

题目19:完数判断

题目19:一个数如果恰好等于它的因子之和,这个数就称为\"完数\"。例如6=123.编程找出1000以内的所有完数。\"\"\" 分析:14先找因子 然后 n = sum(因子和)for a in range(1, 1000): sum = 0 for b in range(1, a): if a % b == 0: sum += b if sum == a: print(a)

题目21:猴子吃桃

题目21:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个. 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。 以后每天早上都吃了前一天剩下的一半零一个。 到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。\"\"\" 分析: 每次1/2+1,倒推即最后剩下的(n+1)*2 = n 前一天的 即1 1534/2-1 = 766 2 766/2-1 = 382 3 382/2-1 = 190 4 190/2-1 = 94 5 94/2 -1 = 46 6 46/2 -1 = 22 7 22/2 -1 = 10 8 10/2 -1 = 4 9 4/2 -1 = 1 def peach(rest): rest = 1 for a in range(1,11): # 第10天剩1个,实际是第九天吃完后还剩1个 a = 循环天数 if a <= 9: rest = (rest+1)*2 a = a + 1 else: break return rest peach(10)

题目24:分数序列求和

题目24:有一分数序列:2/13/25/38/513/821/13...求出这个数列的前20项之和。\"\"\" 分析:2 3 5 8 13 211 2 3 5 8 1320项之和首先得得到第20个数是什么,然后每个数相加 def add_sum(n): # n第几个数 a = 1 # 分母  b = 1 # 分子 sum = 0 for i in range(1,n+1): a,b = b,a+b sum += b/a return sum add_sum(20) 

题目25:阶乘累加

题目25:求1+2!+3!+...+20!的和。\"\"\" 分析:24题是累加的概念,这里是累乘 def mul_sum(n): # n第几个数 sum = 0 tmp = 1 for x in range(1,n+1): tmp *= x sum += tmp return sum mul_sum(3) 

题目26:阶乘递归

题目26:利用递归方法求5!。\"\"\" 分析:25题是累乘,26是简单化了def mul_sum(n): # n第几个数 tmp = 1 for x in range(1,n+1): tmp *= x return tmp mul_sum(5) 

题目28:年龄推理

题目28:有5个人坐在一起. 问第五个人多少岁?他说比第4个人大2岁。 问第4个人岁数,他说比第3个人大2岁。 问第3个人,又说比第2人大2岁。 问第2个人,说比第1个人大2岁。 最后问第一个人,他说是10岁。请问第五个人多大?\"\"\" 分析: 递归思想 每前1个人+2岁即可; age = 10for i in range(1,5): if i <=4: age += 2 else: age print(age)

题目80:猴子分桃问题

题目80:海滩上有一堆桃子,五只猴子来分。 第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。 第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份. 第三、第四、第五只猴子都是这样做的. 问海滩上原来最少有多少个桃子?\"\"\" 分析:21题相似 每5份多14,连续5,此外,要考虑分摊除尽的问题,桃子没法分成小于1; def monekys(n): if n==num: return(4*x) #最后剩的桃子的数目 else: return(monekys(n+1)*5/4+1)x=1while 1: count=0 for i in range(1,num): if monekys(i)%4==0 : count=count+1 if count==num-1: print(\"海滩上原来最少有%d个桃子\" % int(monekys(0))) break else: x=x+1

题目83:奇数组合数

题目83:求07所能组成的奇数个数。\"\"\" 分析:0-78个数,个位奇数为13572位数及以上首位不可以为0;: 组成1位数是4个 组成2位数是7*4个 组成3位数是7*8*4个 组成4位数是7*8*8*4.... 依次类推 L = []sum = 0 for i in range(1,9): # i等于位数  if i == 1 : num = 4 sum += num if i >=2: num = 4*7*8**(i-2) sum += numprint(sum)

题目85:9的倍数验证

题目85:输入一个奇数,然后判断最少几个 9 除于该数的结果为整数。\"\"\" i = int(input(\'输入奇数: \'))sum = 9 while sum % i != 0: sum = sum * 10 + 9 # 循环赋值  print(sum)

题目81:数学等式验证

题目81809*??=800*??+9*?? 其中??代表的两位数, 809*??为四位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。\"\"\" 分析: 809*ab 四位数 得到ab<=12 8*ab 两位数 得到ab<=12 9*ab 三位数 得到ab>11 所以ab = 12 for i in range(10,101): if 809 * i == 800 * i + 9 * i: if 8 * i < 100 : if 9 * i > 100 and 9 * i < 1000: print(i ,809 * i)

二、字符串操作

题目13:水仙花数

题目13:打印出所有的\"水仙花数\",所谓\"水仙花数\"是指一个三位数,其各位数字立方和等于该数本身。 例如:153是一个\"水仙花数\",因为153=1的三次方+5的三次方+3的三次方。\"\"\"// 取整 % 取余 num = []for n in range(100,1000): a = n//100 b = n//10%10 c = n%10 if n == a**3 + b**3 + c**3 : num.append(n)print(num)

题目17:字符统计

题目17:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。\"\"\"考察string包的用法, 举个例子: \"kobe 8&24\"英文:4 数字:3 空格:1 其他字符:1要自己写的话,逻辑写入0-9/大小写一致a-z/\" \"空格/其他 先定义; import stringdef get_str(n): letters = 0 space = 0 digit = 0 others = 0 for a in n: if a.isalpha(): # 是否字母  letters += 1 elif a.isspace(): # 是否空格 space += 1 elif a.isdigit(): # 是否数字 digit += 1 else: others += 1 print (\'char = %d,space = %d,digit = %d,others = %d\' % (letters,space,digit,others))get_str(\"Kobe 8&24\")

题目33:列表转字符串

题目33:按逗号分隔列表。\"\"\" L = [1,2,3,4,5]a = \',\'.join(str(i) for i in L )print (a)L = repr(L)[1:-1]print(L)

题目62:子串查找

题目62:查找字符串。   \"\"\" 分析: 基础运用 str_1 = \'abcdefg\'str_2 = \'cde\'print(str_1.find(str_2))

题目89:加密算法

题目89:某个公司采用公用电话传递数据,数据是四位的整数. 在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。\"\"\" 分析: 即不断赋值和替换的过程。 n = 12345: 6789/10: 6789 # 题目表达不清 交换: 9876 n = str(input())a = []for i in range(4): a.append((int(n[i])+5)%10)a[0],a[3] = a[3],a[0]a[1],a[2] = a[2],a[1]print(\"\".join(\'%s\' %s for s in a))

题目96:子串计数

题目96:计算字符串中子串出现的次数。\"\"\" str1 = input(\"请输入一个字符串:\")str2 = input(\"请输入一个子字符串: \")print(str1.count(str2))

题目98:大小写转换

题目98:从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件\"test\"中保存。\"\"\" import sysstr = input(\'请输入一个字符串:\\n\')with open(\'test1.txt\',\'w\') as f: f.write(str.upper())

题目60:字符串长度

题目60:计算字符串长度。  \"\"\" str = \'abc\'print(len(str))

题目86:字符串连接

题目86:两个字符串连接程序。\"\"\" a = \"Kobe\"b = \"24\"c = a + bprint(c)

题目31:星期判断

题目31:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。\"\"\" 分析: week=[\'Monday\',\'Tuesday\',\'Wednesday\',\'Thursday\',\'Friday\',\'Saturday\',\'Sunday\']特殊情况即首字母为T 和S的情况,简单判断即可; fir = input(\"第1个字母:\")if fir == \'M\': print(\"周一\")elif fir == \'W\': print(\"周三\")elif fir == \'F\': print(\"周五\")elif fir == \'T\': s = input(\"第2个字母:\") if s == \'u\': print(\"周二\") elif s == \'h\': print(\"周四\")elif fir == \'S\': s = input(\"第2个字母:\") if s == \'a\': print(\"周六\") elif s == \'u\': print(\"周日\")else : print(\"输入错误\")

三、列表与字典操作

题目5:三数排序

题目5:输入三个整数x,y,z,请把这三个数由小到大输出。\"\"\"def px_3(a,b,c): num = [a,b,c] num.sort() return numpx_3(1,8,2)

题目38:矩阵对角线

题目38:求一个3*3矩阵主对角线元素之和。\"\"\" 分析: 1.主对角线元素之和 ---> 知道定义很重要 在一个n阶方阵(或是n阶行列式)中,从左上角到右下角这一斜线方向上的n个元素所在的对角线,叫做n阶方阵(或行列式)的主对角线。2.设置一个双重for循环控制输入二维数组,再将n[i][j]累加后输出.# 未知矩阵if __name__ == \'__main__\': a = [] sum = 0.0 for i in range(3): a.append([]) for j in range(3): a[i].append(float(input(\"input num:\\n\"))) for i in range(3): sum += a[i][i] print (sum)# 已知矩阵 m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]sum = 0for i in range(0, 3): sum += m[i][i] print(sum)

题目44:矩阵相加

题目44:两个 33 列的矩阵,实现其对应位置的数据相加,并返回一个新矩阵:\"\"\" X = [[12,7,3], [4 ,5,6], [7 ,8,9]]Y = [[5,8,1], [6,7,3], [4,5,9]]分析:38一样; z = []for i in range(3): z.append([]) for i in range(3): for j in range(3): z[i].append(x[i][j]+y[i][j])print(z)

题目68:数组循环移位

题目68:有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数\"\"\" 分析: 因为总长度不变,即最后一项变为第一个,最后第二个变为整数第二个 即a[i] = a[i+m] , a[len(a)-1] = a[i]逻辑和方法对了,其实就很简单了 a = [1,2,3,4,5,6,7] # 测试列表m = 5  # 设置向后移动 3 位for i in range(m): a.insert(0, a.pop()) # pop 剔除默认最后一位,insert加入指定位置指定数;print(a)

题目69:约瑟夫环问题

题目69:有n个人围成一圈,顺序排号。从第一个人开始报数(从13报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。\"\"\" n = [i+1 for i in range(20)]i = 1 while len(n) > 1: if i % 3 == 0: n.pop(0) else: n.insert(len(n),n.pop(0)) # 同68 考验逻辑 i += 1print(n) 

题目72:创建链表

题目72:创建一个链表。\"\"\" l=[ input(\"please input a number:\\n\") for i in range(5)]print(l)

题目73:反向链表

题目73:反向输出一个链表。\"\"\" l=[ input(\"please input a number:\\n\") for i in range(5)]l.reverse()print(l)

题目100:列表转字典

题目100:列表转换为字典。\"\"\" # 从列表创建字典i = [\'a\',\'b\',\'c\']l = [1,2,3]b=dict(zip(i,l))print(b)

题目39:数组插入排序

题目39:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。\"\"\" 分析: 题目其实说的不太明确,所以要挖掘隐藏条件: 已经排好序则代表按顺序大小排, 新输入的数,也需要从小到大排; 所以思路整体上就是循环比大小; a = [1,2,3,5,6,7]插入数字 4 a.append(4)sorted(a)但显然题目考察的是希望自己能写这个逻辑,纯循环遇上数字较多的效率会比较低,所以可以折半选取再循环; a = [1,2,3,5,6,7]b = 4for i in range(len(a)-1): if b >= a[i] and b <= a[i+1]: a.insert(i+1, b) break elif i == (len(a)-2): a.append(b) breakprint(a)

题目67:数组极值交换

题目67:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。\"\"\" 分析: 利用下标和max,min即可; a = [1,2,3,4,5]for i in range(len(a)): if a[i] == max(a): a[0],a[i]=a[i],a[0] # 不可分开写,否则会变成[6, 3, 4, 5, 6] 先后赋值; if a[i] == min(a): a[len(a)-1],a[i]=a[i],a[len(a)-1]print(a) # 法2 a = [1,3,4,5,6]print(a)# 最小的放到最后min = min(a)a.remove(min)a.append(min)# 最大的放到最前面max = max(a)a.remove(max)a.insert(0,max)print(a)

题目79:字符串排序

题目79:字符串排序。\"\"\" # 字符串输入寄了 L = []L.sort()print(L)

题目66:数组逆序输出

题目66:输入3个数a,b,c,按大小顺序输出。  \"\"\" 分析: 也没懂这个题顺序是怎么来的,感觉一堆乱... 前面太多一样的,这里就不写了.. 

题目40:数组逆序

题目40:将一个数组逆序输出。\"\"\" 分析:2932一样,python3中直接可输出; a = [\"x\",\"y\",\"z\"]b = a[::-1]

四、文件操作

题目97:写入文件

题目97:从键盘输入一些字符,逐个把它们写到磁盘文件上,直到输入一个 # 为止。\"\"\" filename = input(\'输入文件名:\\n\')fp = open(filename , \"w+\")ch = \'\'while \'#\' not in ch: fp.write(ch) ch = input(\'输入字符串:\\n\')fp.close()

题目98:文件保存

题目98:从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件\"test\"中保存。\"\"\" import sysstr = input(\'请输入一个字符串:\\n\')with open(\'test1.txt\',\'w\') as f: f.write(str.upper())

题目99:文件合并排序

题目99:有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中。\"\"\" with open(\'test1.txt\') as f1, open(\'test2.txt\') as f2, open(\'2.txt\', \'w\') as f3: for a in f1: b = f2.read() c = list(a + b) c.sort() d = \'\' d = d.join(c) f3.write(d)

五、日期时间处理

题目10:格式化时间

题目10:暂停一秒输出,并格式化当前时间。\"\"\"# 主要考察time的使用 2个函数# 获取当前时间: time.localtime(time.time())# 格式化时间: time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime()) import time time.sleep(1)print(time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime()))

题目16:日期输出

题目16:输出指定格式的日期。\"\"\"和第10题一样,考验datetime包的用法import datetimeprint(datetime.date.today()) print(datetime.date.today().strftime(\'%d/%m/%Y\'))print(datetime.date(1941,1,5))

题目95:日期解析

题目95:字符串日期转换为易读的日期格式。\"\"\" from dateutil import parserdt = parser.parse(\"Aug 24 2022 12:00AM\")print(dt)

题目91:时间函数示例1

题目91:时间函数举例1\"\"\" import timeprint time.ctime(time.time())print time.asctime(time.localtime(time.time()))print time.asctime(time.gmtime(time.time()))

题目92:时间函数示例2

题目92:时间函数举例2\"\"\" import timestart = time.time()for i in range(3000): print(i)end = time.time()print (end - start)

题目93:时间函数示例3

题目93:时间函数举例3\"\"\" if __name__ == \'__main__\': import time start = time.clock() for i in range(100): print(i) end = time.clock() print(\'different is %6.3f\' % (end - start))

题目94:反应速度测试

题目94:时间函数举例4,一个猜数游戏,判断一个人反应快慢。 别看代码长,其实不难\"\"\" if __name__ == \'__main__\': import time import random play_it = input(\'do you want to play it.(\\\'y\\\' or \\\'n\\\')\') while play_it == \'y\': c = input(\'input a character:\\n\') i = random.randint(0,2**32) % 100 print (\'please input number you guess:\\n\') start = time.clock() a = time.time() guess = int(input(\'input your guess:\\n\')) while guess != i: if guess > i: print(\'please input a little smaller\') guess = int(input(\'input your guess:\\n\')) else: print(\'please input a little bigger\') guess = int(input(\'input your guess:\\n\')) end = time.clock() b = time.time() var = (end - start) / 18.2 print (var) # print \'It took you %6.3 seconds\' % time.difftime(b,a)) if var < 15: print (\'you are very clever!\') elif var < 25: print (\'you are normal!\') else: print (\'you are stupid!\') print (\'Congradulations\') print (\'The number you guess is %d\' % i) play_it = input(\'do you want to play it.\')

六、图形绘制

题目56:圆形绘制

题目56:画图,学用circle画圆形。  \"\"\" 分析: 主要为turtle包的使用 import turtleturtle.title(\"打开画图软件\")turtle.setup(800,600,0,0)pen=turtle.Turtle()pen.color(\"blue\")pen.width(5)pen.shape(\"turtle\")pen.speed(10)pen.circle(100)

题目57:直线绘制

题目57:画图,学用line画直线。\"\"\" 分析: 主要为turtle包的使用 import turtledef drawline(n): t=turtle.Pen() t.color(0.3,0.8,0.6) #设置颜色,在0--1之间 t.begin_fill() #开始填充颜色 for i in range(n): #任意边形 t.forward(50) t.left(360/n) t.end_fill() #结束填充颜色drawline(4)

题目58:方形绘制

题目58:画图,学用rectangle画方形。   \"\"\" 分析: 考察tkinter包的使用from tkinter import *root = Tk()root.title(\'Canvas\')canvas = Canvas(root,width = 400,height = 400,bg = \'yellow\')x0 = 263y0 = 263y1 = 275x1 = 275for i in range(19): canvas.create_rectangle(x0,y0,x1,y1) x0 -= 5 y0 -= 5 x1 += 5 y1 += 5canvas.pack()root.mainloop()

题目59:综合图形

题目59:画图,综合例子。  \"\"\" 分析: 考察tkinter包的使用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()

题目63:椭圆绘制

题目63:画椭圆。 \"\"\" 分析: 考察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()

题目64:图形组合

\"\"\"题目64:利用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()

题目65:艺术图案

题目65:一个最优美的图案。   \"\"\" import mathclass PTS: def __init__(self): self.x = 0 self.y = 0points = []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()

题目23:菱形打印

题目23:打印出如下图案(菱形): * *** ************ ***** *** *\"\"\" def pic(n): for i in range(0,n): a = abs(i - int(n/2)) b = n - abs(i - int(n/2)) print(\" \"*a+\"*\"*(b-a))pic(7)

七、算法与数据结构

题目6:斐波那契数列

题目6:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0112358132134、……。\"\"\"从第3个数起,每一个数等于前2个数的和; num = f(n-1)+f(n-2) (n>=2)def Fibonacci_sequence(n): a, b = 0, 1 while n>0: a, b, n = b, a + b, n - 1 print(a)Fibonacci_sequence(10)

题目12:素数筛选

题目12:判断101-200之间有多少个素数,并输出所有素数。    \"\"\"分析: 判断素数x方法:2-->(x-1)之间能有一个数被整除 则非素数; num = []for a in range(101,200): for b in range(2,a-1): if a%b == 0 : break else: # 这里位置不能写错,不然容易陷入无限循环;  num.append(a)print(num) 

题目20:小球弹跳计算

题目20:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?\"\"\" 落下高度 返回高度 落地时经过距离 第一次 100 50 100 第二次 50 25 100 + 100 = 200 第三次 25 12.5 50 + 100 + 100 = 250 第四次 12.5 6.25 25 + 100 + 100 +50 = 275 可以看到规律 第n次 分析找出规律即可 def fall(n): height = 100 far = 100 for i in range(2, n+1): far = far + height height = height / 2 return far,height/2fall(10) 

题目22:比赛名单排列

题目22:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。 a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。\"\"\" 分析: 直接可以得出答案,c和y, a和z,b和x ,用变成实现则将判断逻辑写下即可; for a in [\'x\',\'y\',\'z\']: for b in [\'x\', \'y\', \'z\']: for c in [\'x\', \'y\', \'z\']: if(a!=b)and(b!=c)and(c!=a) and (a!=\'x\') and (c!=\'x\') and (c!=\'z\'): print(\'a和%s比赛,b和%s比赛,c和%s比赛\' %(a,b,c))2: m=[\'a\',\'b\',\'c\']n=[\'x\',\'y\',\'z\']L=[]for i in range(0,3): for j in range(0,3): L.append(m[i]+n[j])L.remove(\'ax\') L.remove(\'ay\')L.remove(\'by\')L.remove(\'bz\')L.remove(\'cx\')L.remove(\'cz\')print(L) 

题目61:杨辉三角生成

题目61:打印出杨辉三角形(要求打印出10行如下图)。  \"\"\" 分析: 首先要理解什么是杨辉三角,这是非常经典的一个题目; 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.第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。2.每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。 即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,这也是组合数的性质之一。即 C(n+1,i)=C(n,i)+C(n,i-1)def Yh_triangles(): L = [1] while True: yield L L = [sum(i) for i in zip([0]+L, L+[0])]def Yh_triangles(num = 10): L = [[1]] for i in range(1,num): L.append([(0 if j== 0 else L[i-1][j-1])+ (0 if j ==len(L[i-1]) else L[i-1][j]) for j in range(i+1)]) return L

题目76:分段函数计算

题目76:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n\"\"\" # 比较简单,直接上代码 def num(n): sum = 0 if n%2 == 0 : for i in range(1,int(n/2)+1): sum += 1/(2*i) return sum if n%2 != 0 : for i in range(1,int((n+1)/2)+1):  sum += 1/(2*i-1) return sum num(5) # 同理,应用range()的步长会更高效; def num(n): sum_tmp = [1/i for i in range(n,0,-2)] return sum(sum_tmp) num(4) 

题目77:循环输出列表

题目77:循环输出列表\"\"\" ls = [\'Kobe\',\'24\',\'8\']for i in range(len(ls)): print(ls[i])

题目78:最大年龄查找

题目78:找到年龄最大的人,并输出。请找出程序中有什么问题。\"\"\" person_age = {\"li\":18,\"wang\":50,\"zhang\":20,\"sun\":22}def get_max(dict): max_age = 0 for key, value in dict.items(): if value > max_age: max_age = value name = key print(name) print(max_age)get_max(person_age)

题目84:列表极值交换

题目84:连接字符串。\"\"\" list1 = [\'Kobe\',\'8\',\'24\']list2 = [\'Iverson\',\'3\']print(list1 + list2)

题目8:九九乘法表

题目8:输出 9*9 乘法口诀表。\"\"\"1*1=12*1=2 2*2=43*1=3 3*2=6 3*3=94*1=4 4*2=8 4*3=12 4*4=165*1=5 5*2=10 5*3=15 5*4=20 5*5=256*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=367*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=498*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=649*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81for a in range(1,10): for b in range(1,10): print( str(a),\"*\",str(b),\"=\",a*b )

题目9:延时输出

题目9:暂停一秒输出。程序分析:使用 time 模块的 sleep() 函数。\"\"\"# 没有具体要求,能实现延迟即可; import time id = [1,2,3]for i in range(len(id)): print(i) time.sleep(2)

题目14:质因数分解

题目14:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5\"\"\"分析:要找出全部因数比较容易,第一次写输出的是[235],没有考虑到重复因子的情况,所以要加while判断的逻辑;def get_factor(n): print (\'{} = \'.format(n), end=\" \") if not isinstance(n, int) or n <= 0 : # 判断变量是否是已知字段类型, 字符串可迭代  print (\'请输入一个正确的数字 !\') exit(0) elif n in [1] : print (\'{}\'.format(n)) while n not in [1] : # 循环保证递归 for a in range(2, n + 1) : if n % a == 0:  n //= a  if n == 1: # 这步很重要,判断关键   print (a) else : # index 一定是素数  print (\'{} *\'.format(a), end=\" \") breakget_factor(10) 

题目15:成绩分级

题目15:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。\"\"\"def score(n): if n>=90: print(\"A\") elif 60<n<=89: print(\"B\") else: print(\"C\")score(90)

八、位运算

题目51:按位与

题目51-53:学习使用按位与&, 按位或 |, 按位异或 ^ \"\"\" 按位与: & 双目运算符.其功能是参与运算的两数各对应的二进位相与.只有对应的两个二进位都为1,结果位才为1.参与运算的两个数均以补码出现.按位或: | 双目运算符.只有对应的两个二进位都为1,结果位才为1按位异或: 如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。取反 : ~ 在补码表示中,最高位为符号位,正数的符号位为0,负数为1右移 : >>左移 : << 分析: 0&0=0; 0&1=0; 1&0=0; 1&1=1 分析: 0|0=0; 0|1=1; 1|0=1; 1|1=1分析: 0^0=0; 0^1=1; 1^0=1; 1^1=0

题目52:按位或

同上

题目53:按位异或

同上

题目54:位截取

题目54:取一个整数a从右端开始的47位。\"\"\" 分析: 首先这个整数得满足>=7位,然后取右端开始的4-7, 考核截取字符串; num = input(\"输入整数: \")num = list(num)[-7:-3]举一反三: str = \'0123456789\'print(str[:]) # 截取字符串的全部字符print(str[0:3]) # 截取第1位到第3位的字符print(str[6:]) # 截取第7个字符到结尾print(str[:-3]) # 截取从头开始到倒数第3个字符之前print(str[2]) # 截取第3个字符print(str[-1]) # 截取倒数第1个字符print(str[::-1]) # 创造1个与原字符串顺序相反的字符串print(str[-3:-1]) # 截取倒数第3位到倒数第1位之前的字符print(str[-3:]) # 截取倒数第3位到结尾print(str[:-5:-2]) # 逆序截取==> 先截取,再进行逆序.逆序为下标 https://blog.csdn.net/weixin_41613094/article/details/122325983?spm=1001.2014.3001.5501value: 0120123456789678901234562998765432107878997逆袭截取解释: str = \'abcdefghijklmn\'位置编号: 012345678910111213对应编号: -14-13-12-11-10-9-8-7-6-5-4-3-2-1 # 官方方法分析: (1)先使a右移4位。(2)设置一个低4位全为1,其余全为0的数。可用~(~0<<4)(3)将上面二者进行&运算。a = int(input(\'输入一个数字: \'))b = 0 # 0b = ~b # 1b = b<<4 # 10000b = ~b # 1111c = a>>4d = c&bprint(\'a:\',bin(a))print(\'b:\',bin(b))print(\'c:\',bin(c))print(\'d:\',bin(d))

题目55:按位取反

题目55:学习使用按位取反~\"\"\" 二进制数在内存中以补码的形式存储。按位取反:二进制每一位取反,0110。最高位为符号位,正数的符号位为 0,负数为 1。对正数来说,最高位为 0,其余各位代表数值本身(以二进制表示),如 +42 的补码为 00101010。对负数而言,把该数绝对值的补码按位取反,然后对整个数加 1,即得该数的补码。如 -42 的补码为 11010110(00101010 按位取反11010101+111010110)~9 的计算步骤:转二进制:0 1001计算补码:0 1001按位取反:1 0110转为源码: 按位取反:1 1001 末位加 11 1010符号位为 1 是负数,即 -10a = 7b = ~a # -8c = -7d = ~c # 6 print (\'变量 a 取反结果为: %d\' % b)print (\'变量 c 取反结果为: %d\' % d)

题目82:八进制转十进制

题目82:八进制转换为十进制\"\"\" n = 0p = input(\'input a octal number:\\n\')for i in range(len(p)): n = n * 8 + ord(p[i]) - ord(\'0\')print(n) 

九、其他编程问题

题目27:递归逆序

题目27:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。\"\"\" 分析: 相反顺序,加个负号即可解决; def desc_string(s): if(len(s) > 0): print(s[-1])  desc_string(s[0:-1]) desc_string(\"abcde\")

题目29:数字拆分统计

题目29:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。\"\"\" 分析: 本质考察如何拆解字符串# 最简单写法 tmp = input(\"输入一个数字\")len(tmp) list(tmp)[::-1] # list可拆解字符串str(tmp)[::-1] # str 不拆解# 普通写法 n = int(input(\"请输入一个数:\\n\"))a = n%10000 # 万位b = (n/1000)%10 # 千位 c = (n/100)%10 # 百位 d = (n/10)%10 # 十位 e = (n/1)%10 # 个位 if a != 0: print (\"5 位数:\",e,d,c,b,a)elif b != 0: print (\"4 位数:\",e,d,c,b)elif c != 0: print (\"3 位数:\",e,d,c)elif d != 0: print (\"2 位数:\",e,d)else: print (\"1 位数:\",e)

题目30:回文数判断

题目30:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。\"\"\" 分析:29def is_hw(tmp): tmp = list(tmp) if tmp[0] == tmp[4] and tmp[1] == tmp[3]: print(\"是\") else : print(\"不是\")is_hw(\"12321\") 

题目32:列表逆序输出

题目32:按相反的顺序输出列表的值。\"\"\" 分析: 同样的考察字符串处理; a = [\"x\",\"y\",\"z\"]b = a[::-1]

题目34:三次输出函数

题目34:使用函数,输出三次 RUNOOB 字符串。\"\"\" 分析: 考察def的写法: def reo_3(): for i in range(1,4): print(\"RUNOOB\")reo_3()

题目35:文本颜色设置

题目35:文本颜色设置。\"\"\" 分析: 这个不会了...啊,好吧.. 系统设定颜色 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)

题目36:素数筛选

题目36:求100之内的素数。\"\"\" 分析:12题做过如何判断素数,一模一样; num = []for a in range(1,100): for b in range(2,a-1): if a%b == 0 : break else: # 这里位置不能写错,不然容易陷入无限循环;  num.append(a)print(num) 

题目37:十数排序

题目37:对10个数进行排序。\"\"\" 分析: 和第五题一样依次输入10个数字; def px_3(a,b,c....): num = [a,b,c] num.sort() return num同样方法:num=[] for i in range(1,11): a=int(input(\'int%d: \'%(i))) num.append(a)num.sort()

题目41:静态变量

题目41:模仿静态变量的用法。\"\"\" 分析: 官方写法参考 def varfunc(): var = 0 print (\'var = %d\' % var) var += 1if __name__ == \'__main__\': for i in range(3): varfunc()# 类的属性# 作为类的一个属性吧class Static: StaticVar = 5 def varfunc(self): self.StaticVar += 1 print (self.StaticVar)print (Static.StaticVar)a = Static()for i in range(3): a.varfunc()

题目42:自动变量

题目42:学习使用auto定义变量的用法。\"\"\" 分析: 官方写法参考 num = 2def autofunc(): num = 1 print (\'internal block num = %d\' % num) num += 1for i in range(3): print (\'The num = %d\' % num) num += 1 autofunc()

题目43:静态变量案例

题目43:模仿静态变量(static)另一案例。\"\"\" 分析:41class Num: nNum = 1 def inc(self): self.nNum += 1 print (\'nNum = %d\' % self.nNum)if __name__ == \'__main__\': nNum = 2 inst = Num() for i in range(3): nNum += 1 print (\'The num = %d\' % nNum) inst.inc()

题目45:数字累加

题目45:统计 1100 之和。\"\"\" a = 100 b = 1sum = (a+b)*50

题目46:平方阈值判断

题目46:求输入数字的平方,如果平方运算后小于 50 则退出。\"\"\" while True: x = int(input(\'input a num :\')) x *= x print(\'结果为:{}\'.format(x)) if x > 50: breakdef is_50(n): if 判断即可; 

题目47:变量交换

题目47:两个变量值互换。\"\"\" def exchange(a,b): a,b = b,a return a,b

题目48:数字比较

题目48:数字比较。\"\"\" 分析: 简单比较3种情况即可def compare(a,b): if a>b: ... 简单比较即可compare(2,2)

题目49:匿名函数

题目49:使用lambda来创建匿名函数。\"\"\" 分析: 没规定函数内容,任意都可,主要了解lambda(即λ)是啥; lambda x,y:x+y # 参数x,y : 后跟函数 https://www.runoob.com/python/python-functions.htmlS = lambda x,y:x+yS(10,20)

题目50:随机数生成

题目50:输出一个随机数。\"\"\" 分析: https://www.runoob.com/python/func-number-random.htmlimport randomprint (random.uniform(10, 20)) #生成 10 到 20 之间的随机数random.uniform(10, 20) 

题目71:学生数据IO

题目87:结构体变量传递

题目87:回答结果(结构体变量传递)。\"\"\" if __name__ == \'__main__\': class student: x = 0 c = 0 def f(stu): stu.x = 20 stu.c = \'c\' a= student() a.x = 3 a.c = \'a\' f(a) print a.x,a.c

题目88:星号打印

题目88:读取7个数(150)的整数值,每读取一个值,程序打印出该值个数的*。\"\"\" 分析: 值为多少,取多少个*即可; for i in range(3): print(\'*\'*int(input(\'input a number: \')))