有不少同学学完Python
后仍然很难将其灵活运用。我整理 37 个Python
入门的小程序。在实践中应用Python
会有事半功倍的效果。
1.华氏温度转换为摄氏温度 华氏温度转摄氏温度的公式:C = (F - 32) / 1.8
。本例考察Python
的加减乘除运算符。
1 2 3 4 5 6 7 """ 将华氏温度转换为摄氏温度 """ f = float(input('输入华氏温度: ' )) c = (f - 32 ) / 1.8 print('%.1f 华氏度 = %.1f 摄氏度' % (f, c))
2. 计算圆的周长和面积 输入半径,计算圆的半径和面积,圆周长公式:2π r,面试公式:π*r^2
1 2 3 4 5 6 7 8 9 """ 半径计算圆的周长和面积 """ radius = float(input('输入圆的半径: ' )) perimeter = 2 * 3.1416 * radius area = 3.1416 * radius * radius print('周长: %.2f' % perimeter) print('面积: %.2f' % area)
3. 实现一元一次函数 实现数学里的一元一次函数:f(x) = 2x + 1
1 2 3 4 5 6 7 """ 一元一次函数 """ x = int(input('输入x:' )) y = 2 * x + 1 print('f(%d) = %d' % (x, y))
4. 实现二元二次函数 实现数学里的二元二次函数:f(x, y) = 2x^2 + 3y^2 + 4xy
,需要用到指数运算符**
1 2 3 4 5 6 7 8 9 """ 二元二次函数 """ x = int(input('输入x:' )) y = int(input('输入y:' )) z = 2 * x ** 2 + 3 * y ** 2 + 4 * x * y print('f(%d, %d) = %d' % (x, y, z))
5. 分离整数的个位数 将一个正整数的个位数,以及除个位数外的部分分离。需要用到模(取余数)
运算符%
,和整除
运算符//
1 2 3 4 5 6 7 8 9 10 11 """ 分离整数个位数 """ x = int(input('输入整数:' )) single_dig = x % 10 exp_single_dig = x // 10 print('个位数: %d' % single_dig) print('除个位数外: %d' % exp_single_dig)
6. 实现一个累加器 实现一个简单的累加器,可以接受用户输入3个数字,并将其累加。需要用到复合赋值运算符:+=
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 """ 累加器 v1.0 """ s = 0 x = int(input('输入整数:' )) s += x x = int(input('输入整数:' )) s += x x = int(input('输入整数:' )) s += x print('总和:%d' % s)
7. 判断闰年 输入年份,判断是否是闰年。闰年判断方法:能被4整除,但不能被100整除;或者能被 400 整除。需要用到算术运算符
和逻辑运算符
1 2 3 4 5 6 7 """ 判断闰年 """ year = int(input('输入年份: ' )) is_leap = year % 4 == 0 and year % 100 != 0 or year % 400 == 0 print(is_leap)
8. 判断奇偶数 输入一个数字,判断基数还是偶数,需要模
运算和if ... else
结构
1 2 3 4 5 6 7 8 9 10 """ 判断奇偶数 """ in_x = int(input('输入整数:' )) if in_x % 2 == 0 : print('偶数' ) else : print('奇数' )
9. 猜大小 用户输入一个 1-6 之间的整数,与程序随机生成的数字作比较。需要用到if ... elif ... else
结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 """ 猜大小 """ import randomin_x = int(input('输入整数:' )) rand_x = random.randint(1 , 6 ) print('程序随机数: %d' % rand_x) if in_x > rand_x: print('用户赢' ) elif in_x < rand_x: print('程序赢' ) else : print('打平' )
说明:random是Python的随机数模块,调用 random.randint 可以生成一个随机数,类型为 int。randint(1, 6) 表示生成 [1, 6] 之间的随机数。
10. 判断闰年 之前判断闰年是输出True
或False
,这次需要输出文字版闰年
或平年
1 2 3 4 5 6 7 8 9 """ 判断闰年 """ year = int(input('输入年份: ' )) if year % 4 == 0 and year % 100 != 0 or year % 400 == 0 : print('闰年' ) else : print('平年' )
11. 摄氏度与华氏度互转 之前做过华氏度转摄氏度,现在通过分支结构
实现二者互转。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 """ 摄氏度与华氏度互换 """ trans_type = input('输入转摄氏度还是华氏度:' ) if trans_type == '摄氏度' : f = float(input('输入华氏温度:' )) c = (f - 32 ) / 1.8 print('摄氏温度为:%.2f' % c) elif trans_type == '华氏度' : c = float(input('输入摄氏温度:' )) f = c * 1.8 + 32 print('华氏温度为:%.2f' % f) else : print('请输入 华氏度 或 摄氏度' )
12. 是否构成三角形 输入三个边长度,判断是否构成三角形。构成三角形的条件:两边之和大于第三边
。
1 2 3 4 5 6 7 8 9 10 """ 是否构成三角形 """ a = float(input('输入三角形三条边:\n a = ' )) b = float(input(' b = ' )) c = float(input(' c = ' )) if a + b > c and a + c > b and b + c > a: print('能够构成三角形' ) else : print('不能构成三角形' )
13. 输出成绩等级 输入成绩分数,输出分数对应的等级。
>=90分得A,[80, 90) 得B,[70, 80)得C,[60, 70)得D,< 60得E
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 """ 输出成绩等级 """ score = float(input('请输入成绩: ' )) if score >= 90 : grade = 'A' elif score >= 80 : grade = 'B' elif score >= 70 : grade = 'C' elif score >= 60 : grade = 'D' else : grade = 'E' print('成绩等级是:' , grade)
14. 计算提成 某企业的奖金根据销售利润按照如下规则计算提成。输入销售利润,计算奖金。
利润 <= 10万,奖金可提10%
10万 < 利润 <= 20万,高出10万的部分提 7.5%
20万 < 利润 <= 40万,高出20万元的部分提5%
40万 < 利润 <= 60万,高出40万元的部分提3%
利润 > 60万,超过60万的部分提1%
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 """ 计算提成 v1.0 """ profit = float(input('输入销售利润(元): ' )) if profit <= 100000 : bonus = profit * 0.1 elif profit <= 200000 : bonus = 100000 * 0.1 + (profit - 100000 ) * 0.075 elif profit <= 400000 : bonus = 100000 * 0.1 + 200000 * 0.075 + (profit - 200000 ) * 0.05 elif profit <= 600000 : bonus = 100000 * 0.1 + 200000 * 0.075 + 400000 * 0.05 + (profit - 400000 ) * 0.03 else : bonus = 100000 * 0.1 + 200000 * 0.075 + 400000 * 0.05 + 600000 * 0.03 + (profit - 600000 ) * 0.01 print('奖金:%.2f' % bonus)
15. 实现分段函数 数学中经常会见到分段函数,用程序实现如下分段函数
1 2 3 4 5 6 7 8 9 10 11 12 """ 分段函数 """ x = int(input('输入:' )) if x > 0 : y = 3 * x ** 2 + 4 else : y = 2 * x + 2 print('f(%d) = %d' % (x, y))
16. 1-n求和 输入正整数n,计算 1 + 2 + … + n的结果。
1 2 3 4 5 6 7 8 9 10 11 12 """ 1-n求和 """ n = int(input('输入n:' )) s = 0 while n >= 1 : s += n n -= 1 print('1-%d 求和结果: %d' % (n, s))
17. 累加器 v2.0 之前实现的累加器只能支持 3 个数相加,现在需要去掉该限制,可以无限相加。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 """ 累加器 v1.0 """ s = 0 while True : in_str = input('输入整数(输入q,则退出):' ) if in_str == 'q' : break x = int(in_str) s += x print('加和:%d' % s)
18. 猜数游戏 程序随机生成一个正整数,用户来猜,程序根据猜的大小给出相应的提示。最后,输出用户猜了多少次才猜中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 """ 猜数游戏 """ import randomanswer = random.randint(1 , 100 ) counter = 0 while True : counter += 1 number = int(input('猜一个数字(1-100): ' )) if number < answer: print('再大一点' ) elif number > answer: print('再小一点' ) else : print('猜对了' ) break print(f'共猜了{counter} 次' )
19. 打印乘法口诀表 1 2 3 4 5 6 7 """ 打印乘法口诀表 """ for i in range(1 , 10 ): for j in range(1 , i + 1 ): print(f'{i} *{j} ={i * j} ' , end='\t' )
20. 是否是素数 输入一个正整数,判断是否是素数。素数定义:大于1的自然数中,只能被1和它本身整除的自然数。如:3、5、7
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 """ 判断是否是素数 """ num = int(input('请输入一个正整数: ' )) end = int(num // 2 ) + 1 is_prime = True for x in range(2 , end): if num % x == 0 : is_prime = False break if is_prime and num != 1 : print('素数' ) else : print('不是素数' )
range(2, end) 可以生成 2, 3, … end序列,并依次赋值给 x 执行循环。range还有如下用法
range(10):生成 0, 1, 2, … 9 序列
range(1, 10, 2):生成 1, 3, 5, … 9 序列
21. 斐波那契数列 输入正整数 n,计算第 n 位的斐波那契数。斐波那契数列当前位置的数字等于前两个数字之和,1 1 2 3 5 8 ...
1 2 3 4 5 6 7 8 9 10 11 """ 斐波那契数列 v1.0 """ n = int(input('输入n: ' )) a, b = 0 , 1 for _ in range(n): a, b = b, a + b print(f'第 {n} 位斐波那契数是:{a} ' )
22. 水仙花数
水仙花数是一个3位数,该数字每个位上数字的立方和正好等于它本身,例如:
1 2 3 4 5 6 7 8 9 10 """ 水仙花数 """ for num in range(100 , 1000 ): low = num % 10 mid = num // 10 % 10 high = num // 100 if num == low ** 3 + mid ** 3 + high ** 3 : print(num)
23. 猴子吃桃
猴子第一天摘了 n 个桃子,当天吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,剩下一个桃子。求第一天共摘了多少。
反向思考:第 n-1 天的桃子 = (第n天桃子 + 1) * 2,从 第 10 天循环计算道第一天即可
1 2 3 4 5 6 7 8 """ 猴子吃桃 """ peach = 1 for i in range(9 ): peach = (peach + 1 ) * 2 print(peach)
24. 打印菱形 输出如下菱形图案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 """ 输出菱形 """ for star_num in range(1 , 7 , 2 ): blank_num = 7 - star_num for _ in range(blank_num // 2 ): print(' ' , end='' ) for _ in range(star_num): print('*' , end='' ) for _ in range(blank_num // 2 ): print(' ' , end='' ) print() for _ in range(7 ): print('*' , end='' ) print() for star_num in range(5 , 0 , -2 ): blank_num = 7 - star_num for _ in range(blank_num // 2 ): print(' ' , end='' ) for _ in range(star_num): print('*' , end='' ) for _ in range(blank_num // 2 ): print(' ' , end='' ) print()
25. 计算提成 v2.0 将 例子14:计算提成
改用列表+循环的方式,代码更简洁,并且可以处理更灵活。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 """ 计算提成 v2.0 """ profit = int(input('输入销售利润(元): ' )) bonus = 0 thresholds = [100000 , 200000 , 400000 , 600000 ] rates = [0.1 , 0.075 , 0.05 , 0.03 , 0.01 ] for i in range(len(thresholds)): if profit <= thresholds[i]: bonus += profit * rates[i] break else : bonus += thresholds[i] * rates[i] bonus += (profit - thresholds[-1 ]) * rates[-1 ] print('奖金:%.2f' % bonus)
26. 某天是一年中的第几天 输入某个日期,计算当天是一年中的第几天
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 """ 计算某天是一年中的第几天 """ months = [0 , 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 ] res = 0 year = int(input('年份: ' )) month = int(input('月份: ' )) day = int(input('几号: ' )) if year % 4 == 0 and year % 100 != 0 or year % 400 == 0 : months[2 ] += 1 for i in range(month): res += months[i] print(res+day)
27. 回文字符串 判断一个字符串是否是回文串
,回文串是一个正读和反读都一样的字符串,如:level
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 """ 判断是否是回文串 """ s = input('输入字符串:' ) i = 0 j = -1 s_len = len(s) flag = True while i != s_len + j: if s[i] != s[j]: flag = False break i += 1 j += -1 print('是回文串' if flag else '不是回文串' )
28. 个人信息输入输出 不定义类的情况下,可以将个人信息保存在元祖中
1 2 3 4 5 6 7 8 9 10 11 students = [] while True : input_s = input('输入学生信息(学号 姓名 性别),空格分隔(输入q,则退出):' ) if input_s == 'q' : break input_cols = input_s.split(' ' ) students.append((input_cols[0 ], input_cols[1 ], input_cols[2 ])) print(students)
29. 个人信息排序 个人信息保存在元组中,并按照学号、姓名或者性别排序。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 """ 个人信息排序 """ students = [] cols_name = ['学号' , '姓名' , '性别' ] while True : input_s = input('输入学生信息(学号 姓名 性别),空格分隔(输入q,则退出):' ) if input_s == 'q' : break input_cols = input_s.split(' ' ) students.append((input_cols[0 ], input_cols[1 ], input_cols[2 ])) sorted_col = input('输入排序属性:' ) sorted_idx = cols_name.index(sorted_col) print(sorted(students, key=lambda x: x[sorted_idx]))
30. 对输入的内容去重 对输入的内容去重,直接用 Python
中 Set
集合实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 """ 去重 """ input_set = set() while True : s = input('输入内容(输入q,则退出):' ) if s == 'q' : break input_set.add(s) print(input_set)
31. 输出集合交集 给定Python web工程师
和算法工程师
需要的技能,计算二者交集。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 """ 集合交集 """ python_web_programmer = set() python_web_programmer.add('python基础' ) python_web_programmer.add('web知识' ) ai_programmer = set() ai_programmer.add('python基础' ) ai_programmer.add('机器学习' ) inter_set = python_web_programmer.intersection(ai_programmer) print('技能交集:' , end='' ) print(inter_set)
Python set集合除了能计算交集,还可以计算并集、补集
32. 猜拳游戏 用程序实现石头剪刀布游戏。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 """ 猜拳游戏 """ import randomrule = {'布' : 0 , '剪刀' : 1 , '石头' : 2 } rand_res = random.randint(0 , 2 ) input_s = input('输入石头、剪刀、布:' ) input_res = rule[input_s] win = True if abs(rand_res - input_res) == 2 : if rand_res == 0 : win = False elif rand_res > input_res: win = False print(f'程序出:{list(rule.keys())[rand_res]} ,输入:{input_res} ' ) if rand_res == input_res: print('平' ) else : print('赢' if win else '输' )
33. 字典排序 字典的key是姓名,value是身高,现在需要按照身高对字典重新排序。
1 2 3 4 5 6 7 """ 字典排序 """ hs = {'张三' : 178 , '李四' : 185 , '王麻子' : 175 } print(dict(sorted(hs.items(), key=lambda item: item[1 ])))
34. 二元二次函数 v2.0 将二元二次函数封装在函数中,方便调用
1 2 3 4 5 6 7 8 9 """ 二元二次函数 v2.0 """ def f (x, y) : return 2 * x ** 2 + 3 * y ** 2 + 4 * x * y print(f'f(1, 2) = {f(1 , 2 )} ' )
35. 斐波那契数列 v2.0 使用递归函数的形式生成斐波那契数列
1 2 3 4 5 6 7 8 9 """ 递归版斐波那契数列 """ def fib (n) : return 1 if n <= 2 else fib(n-1 ) + fib(n-2 ) print(f'第 10 个斐波那契数是:{fib(10 )} ' )
36. 阶乘 定义一个函数,实现阶乘。n的阶乘定义:n! = 1*2*3* ... n
1 2 3 4 5 6 7 8 9 """ 阶乘函数 """ def fact (n) : return 1 if n == 1 else fact(n-1 ) * n print(f'10! = {fact(10 )} ' )
37. 实现 range 函数 编写一个类似于 Python
中的 range 功能的函数
1 2 3 4 5 6 7 8 9 10 11 """ range函数 """ def range_x (start, stop, step) : res = [] while start < stop: res.append(start) start += step return res