Python100道练习题
BIlibili
1、两数之和
num1 = 20num2 = 22result = num1 + num2print(result)
2、一百以内的偶数
list1 = []for i in range(1,100): if i % 2 == 0: list1.append(i)print(list1)
3、一百以内的奇数
# 方法一list1 = []for i in range(1,100): if i % 2 != 0: list1.append(i)print(list1)# 方法二list2 = [i for i in range(1,100) if i % 2 != 0]print(list2)# 方法三list3 = [i for i in range(1,100,2)]
4、判断素数
编写程序,判断某一个数是否为素数。所谓素数指的是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数:
a = 37flag = Truefor i in range(2,a): # 注意range 是左闭右开 if a % i == 0: flag = False break # 一旦判断成功后,后面就没必要继续了if flag: print('a不是素数')else: print('a是素数')
5、求阶乘
编写程序,求出某个自然数的阶乘。一个正整数的阶乘是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!
a = 5# 方法一if a == 0 or a == 1: print('阶乘为: 1')else: sum = 1 for i in range(2,a+1): # 包括本身 sum *= i print('阶乘为:',sum)# 方法二 递归def fun(x): if x == 1: return 1 else: return x * fun(x - 1)print(fun(a))# 方法三 math.factorial()import mathprint(math.factorial(a))
6、求圆的周长
程序编写:输入半径,求出圆的周长
圆的周长:2πr
import mathr = float(input('请输入圆的半径:'))girth = 2 * r * math.piprint('周长是',round(girth,2)) # round 保留两位小数
7、求圆的面积
程序编写:输入半径,求出圆的面积
圆的周长:πrr
import mathr = float(input('请输入圆的半径:'))girth = r * r * math.piprint('面积是',round(girth,2)) # round 保留两位小数
8、求直角三角形斜边的边长
编写程序:输入两个直角边,求出三角形斜边的长度
勾股定理:a2 + b2 = c2
import matha = 3b = 4cfang = math.pow(a,2) + math.pow(b,2)# 或者 math.pow(cfang,0.5) or cfang ** 0.5print('三角形斜边的长度: ',math.sqrt(cfang))
9、比较三个数大小
编写程序:输入三个数,从小到大输出三个数
a = int(input('请输入第一个数:'))b = int(input('请输入第二个数:'))c = int(input('请输入第三个数:'))lst = [a,b,c]# 方法一:list.sort() ,sort(reverse=False) 默认False 升序lst.sort()print(lst)# 方法二:sorted(lst)list1 = sorted([a,b,c])print(list1)
10、找出区间内的素数
编写程序,输入整数a、b表示一个闭区间,找出该区间内的所有素数并打印。
# 判断素数函数def prime(x): flag = True for i in range(2, x): if x % i == 0: flag = False break return flag# 闭区间a = 10 # 左端点b = 20 # 右端点num_list = []for i in range(a,b+1): if prime(i): num_list.append(i)print(num_list)
11、组合数字
有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
# 方法一str1 = '1234'for i in str1: for j in str1: for k in str1: if i == j or i == k or j == k: continue print(i+j+k)# 方法二for i in range(1,5): for j in range(1,5): for k in range(1,5): if not(i == j or i == k or j == k): print(f'{i}{j}{k}')
12、打印乘法口诀表
for i in range(1,10): for j in range(1,i+1): print(f'\t{j} * {i} = {i * j}',end=' ') print()
13、水仙花数
水仙花数:是一个三位数,各位数字立方和等于该数字本身。
import math# 水仙花数:是一个三位数,各位数字立方和等于该数字本身。num_list = []for i in range(100,1000): hundred = i // 100 ten = i // 10 % 10 piece = i % 10 if (math.pow(hundred,3) + math.pow(ten,3)+ math.pow(piece,3)) == i: num_list.append(i)print(num_list)
14、反向输出四位数
编写程序,输入一个四位整数,反对输出对应四位数
# 编写程序,输入一个四位整数,反对输出对应四位数st = input('请输入一个四位数')st = st[::-1]print(int(st))
15、判断字母
编写程序,输入字符,判断是否为字母
# 编写程序,输入字符,判断是否为字母a = input('请输入字符: ')result = a.isalpha() # 判断字母if result: print(f'{a}是字母')else: print(f'{a}不是字母')
16、判断三角形
编写程序,输入三组数据,判断能否构成三角形的三条边
a, b, c = [4, 5, 6]if a <= 0 or b <= 0 or c <= 0: print('输入的数据不合法')if a + b < c or a + c < b or b + c < a: print('不构成三角形')else: print('构成三角形')
17、完数
个数如恰好等于除了它以外的因子之和,这个数就称为“完数”。编程序找出1000以内的所有完数,(6是一个"完数",它的因子是1,2,3)。
for i in range(1,1000): sum = 0 for j in range(1,i): if i % j == 0: sum += j if sum == i: print(i,'是完数')
18、找出质数因子
输入一个正整数,输出它的所有质数因子(如180的质数因子为2、2、3、3、5)。
多个素数的乘积
从第一个数开始,也就是说从2开始,整除一下输入的数
a = int(input('请输入一个自然数:'))y = 2list1 = []while a != y: if a % y == 0: list1.append(y) a /= y else: y += 1list1.append(int(a)) # 最后剩下的aprint(list1)
19、海伦公式求三角形面积
海伦公式是利用三角形的三条边的边长直接求三角形面积的公式
p = ( a + b + c ) / 2 p = (a+b+c)/2 p=(a+b+c)/2
S = p ( p − a ) ( p − b ) ( p − c ) S = \sqrt{p(p-a)(p-b)(p-c)} S=p(p−a)(p−b)(p−c)
import matha = 10b = 10c = 10p = (a+b+c)/2S = math.sqrt(p * (p-a) * (p-b) * (p-c))print('三角形的面积是:',round(S,2))
20、判断某年某天
输入某年某月某日,判断这一天是这一年的第几天
import datetime# map 把年月日都转成 int类型year,month, day = map(int, input('请输入年月日: ').split('-'))# 拿到当年的第一天yundan = datetime.datetime(year,1,1) #now = datetime.datetime(year, month, day)print((now - yundan).days + 1)
21、斐波那契数列
# 递归def fib(x): if x == 1 or x == 2: return 1 else: return fib(x-1) + fib(x-2)print(fib(6))# 非递归n = 6fibs = [1,1]for i in range(2, n): # fibs.append(fibs[-1] + fibs[-2]) fibs.append(fibs[i - 1] + fibs[i - 2])print(fibs[n-1])
22、复制列表
将一个列表中的数据,复制到另一个列表中
import copylist1 = [1,2,3,4]list2 = copy.copy(list1)print(list2)list1 = [1,2,3,4]lsit2 = list1.copy()print(lsit2)
23、暂停后输出
暂停一段时间后输出
import timetime.sleep(1) # 以秒为单位print("Hello Python! ")
24、成绩if语句
利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示
score = int(input('请输入你的成绩: '))flag = ''if score >= 90: flag = "A"elif score >= 60: flag = "B"else: flag = 'C'print(flag)
25、统计字符
输入一行字符,分别统计出其中英文字母空格、数字和其它字符的个数。
# 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。string = input('请输入一段字符串:')char,space,number,other = 0,0,0,0# 方法一for i in string: if 'a' <= i <= 'z' or 'A' <= i <= 'Z': char += 1 elif i == ' ': space += 1 elif '0' <= i <= '9': number += 1 else: other += 1 # 方法二:for i in string: if i.isalpha(): # 判断字符串 char += 1 elif i.isdigit(): # 判断数字 number += 1 elif i.isspace(): # 判断空格 space += 1 else: other += 1print(f'英文字母有{char}个,数字有{number}个,空格有{space}个,其他字符有{other}个。')
26、落体反弹问题
球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
n = 100count = 0list1 = []# 方法一while count < 10: if count == 0: # 第一次弹跳,马上要落下来 list1.append(n) n /= 2 count += 1 else: list1.append(2 * n) # 这是一个 上下的距离 n /= 2 count += 1print(sum(list1))# 方法二# 球的高度height = 100# 落地的次数frequency = 10sum = 0for i in range(1,frequency): sum += height # 落下 height /= 2 sum += height # 上来 print(f'第{i}次下落,高度为:{height}')print(sum)
27、猴子吃桃问题
猴子吃桃问题:猴子第一天摘下若干个桃子当即吃了一半,还不瘾,又多吃了一个第天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少
# 每天吃了 一半 + 1, 第十天就剩下1个了, 求第一天摘了多少x = 1for i in range(1, 10): x = (x + 1) * 2print(x)
28、求指数数列的和
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
# 方法一fibs = [1,1]for i in range(20): fibs.append(fibs[-1] + fibs[-2]) sum = 0for i in range(2,22): sum += fibs[i] / fibs[i-1]print(sum)# 方法二sum = 0 # 最后的结果up = 2 # 分子down = 1 # 分母for i in range(20): sum += up/down up, down = down + up, upprint(sum)
29、求各个阶乘的和
求1+2!+3!+…+20!的和.
sum = 1# 方法一for i in range(2,21): target = 1 for j in range(1,i + 1): # 阶乘包括本身 target *= j sum += targetprint(sum)import mathsum = 0for i in range(1,21): sum += math.factorial(i)print(sum)
30、年龄急转弯
有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
def func(n): if n == 1: return 10 else: return func(n - 1) + 2 print(func(5))
31、判断回文数
输入一个数,判断它是不是回文数。12321是回文数,个位与万位相同,十位与千位相同。
number = '12321'# 方法一if number[0] == number[-1] and number[1] == number[-2]: print(True)else: print(False)# 方法二number = int(number)w = number // 10000q = number // 1000 % 10ten = number % 100 // 10g = number % 10if q == ten and w == g: print('是回文数')else: print('不是回文数')# 方法三a = '12321'b = a[::-1] # 字符串反转if a == b: print('是回文数')else: print('不是回文数')
32、判断星期几
请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
星期一 Monday、星期二 Tuesday、星期三Wednesday、星期四Thursday、星期五 Friday 、星期六 Saturday、星期日Sunday.
weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]first_letter = input("请输入星期几的第一个字母(大写):")matched_days = []for day in weekdays: if day[0] == first_letter: matched_days.append(day)if len(matched_days) == 1: print("是", matched_days[0])elif len(matched_days) > 1: second_letter = input("有多个匹配,请输入第二个字母(小写):") final_matched = [] for m_day in matched_days: if len(m_day) > 1 and m_day[1] == second_letter: final_matched.append(m_day) if len(final_matched) == 1: print("是", final_matched[0]) else: print("无法准确判断,请输入更详细信息")
33、相反顺序输出列表
按相反的顺序输出列表的值。
list1 = [1,2,3,4,5,6,7]list1.reverse() # 对原本的数据进行修改,没有返回值# 方法一print(list1)# 方法二print(list1[::-1])
34、对十个数进行排序
对十个数进行排序
a = map(int, input('请输入10个数字').split())a = list(a)a.sort()print(a)
35、求矩阵主对角线元素之和
求一个3*3矩阵主对角线元素之和
a = []index = 0sum = 0for i in range(3): a.append([]) for j in range(3): index += 1 a[i].append(index) # 求对角线元素之和 if i == j: sum += a[i][j]print(a)print(sum)# 方法二import numpy as nparr = np.arange(9).reshape(3,3)sum_list = np.diagonal(arr) # 把对角线取出来print(sum(sum_list))
36、有序列表添加数据
有一个已经排好的序列。现输入一个数,要求按原来的规律将它插入数组中。
list1 = [1,3,8,10,20,50]n = int(input('请输入数据:'))if list1[0] < list1[-2]: list1.append(n) list1.sort()else: list1.append(n) list1.sort(reverse=True)print(list1)
37、变量值互换
a = 5b = 10# 方法一a,b = b,a# 方法二temp = aa = bb = temp
38、产生随机数
生成随机数
import randoma = random.random() # [0,1) floatb = random.randint(1,10) # [1,10] intc = random.randrange(1,10,3) # 比 randint 多了一个步长print(a,b,c)
39、lambda表达式
使用lambda来创建匿名函数
fun = lambda x, y: x ** yprint(fun(2, 4))
40、温度转换
输入摄氏度,将其转为华氏度
输入华氏度,将其转为摄氏度。
华氏温度与摄氏温度转换公式为:
华氏温度=摄氏温度x1.8+32。
a = input('摄氏度请按1,华氏度请按2: ')if a == '1': b = float(input('请输入摄氏度: ')) result = b * 1.8 + 32 print(f'你输入的是摄氏度{b}, 转换为华氏度是{result}')if a == '2': b = float(input('请输入华氏度: ')) result = (b - 32) / 1.8 print(f'你输入的是华氏度{b}, 转换为摄氏度是{result}')
41、按位与
# 运算规则: 0&0=0 0&1=0 1&0=0 1&1=1'''3 => 00115 => 01013 & 5 => 0001 => 14 => 010012 => 11004 & 12 => 0100 =>4'''print(3 & 5) # 1print(4 & 12) # 4
42、按位或
# 运算规则: 0|0=0, 0|1=1, 1|0=1, 1|1=1'''3 => 00117 => 01113|7 => 0111 => 7'''print(3 | 7) # 7
43、按位异或
# 相同为0,不同为1# 0^0=0 0^1=1 1^0=1 1^1=0'''3 => 00119 => 10013^9 => 1010 => 10'''print(3 ^ 9) # 10
44、按位取反
# 按位取反运算符(~): 对数据的每个二进制位取反,即把0变成1,把1变成0# ~x = -(x+1)'''9 => 00001001 => 11110110 => 10001001 => 10001010 在这里加1 => -10'''print(~9) # -10print(~10) # -11print(~(-3)) # 2# 用十进制计算:正变负,负变正,然后减1
45、计算机字符串的长度
a = input()print(len(a))length = 0for i in a:length += 1print(length)
46、杨辉三角
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] = 1for i in range(2,10): for j in range(1,i): a[i][j] = a[i-1][j] + a[i-1][j-1]for i in range(10): print() for j in range(i+1): print(a[i][j], end=' ')
47、查找字符串
a = 'Hello World!'b = 'World'print(a.find(b))
48、猜数字游戏
import randomtarget = random.randint(0,99)times = 7print('猜数字游戏开始,请猜一百以内的整数~')while times != 0: num = int(input('请输入你要猜的数字: \n')) times -= 1 if num < target: print('猜小了') elif num > target: print('猜大了') else: print(f'恭喜你才对了,答案是{target}')if times == 0: print('很遗憾,机会用完了.')
49、第一个只出现一次的字符
在一个字符串中找到第一个只出现一次的字符,并返回它的位置,如果没有则返回 -1(需要区分大小写).(从0开始计数
string = 'Hello World'a = -1 # 默认为 -1mp = dict()for i in string: if i in mp: mp[i] += 1 else: mp[i] = 1for i in range(len(string)): if mp[string[i]] == 1: a = i breakprint(a)
50、最大公因数
求最大公因数
def fun1(a, b): # 枚举 if a == b: # 如果两个数一样的话,那么就是他们本身 return a num = min(a,b) # 记录最小的 while a % num != 0 or b % num != 0: num -= 1 return numprint(fun1(12,18))def fun2(a,b): while b != 0: # 除法求余 a,b = b,a % b return aprint(fun2(12,18))