python基础练习
源地址Python基础练习题100例(Python 3.x) - 佛祖让我来巡山 - 博客园 (cnblogs.com)
1、有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
1 a=0 2 for i in range(1,5): 3 for j in range(1,5): 4 for k in range(1,5): 5 if(i!=j and j!=k and i!=k): 6 print(f"{i}{j}{k}") 7 a+=1 8 print(a)
2、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
1、x + 100 = n2, x + 100 + 168 = m2
2、计算等式:m2 - n2 = (m + n)(m - n) = 168
3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数
4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。
5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。
6、由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1。
1 for i in range(1,85): 2 if 168 % i == 0: 3 j = 168 / i; 4 if i > j and (i + j) % 2 == 0 and (i - j) % 2 == 0 : 5 m = (i + j) / 2 6 n = (i - j) / 2 7 x = n * n - 100 8 print(x)
3、输入某年某月某日,判断这一天是这一年的第几天?
1 import calendar 2 total=0 3 year=int(input()) 4 month=int(input()) 5 day=int(input()) 6 list=[31,28,31,30,31,30,31,31,30,31,30,31] 7 check_year = calendar.isleap(year) 8 9 for i in range(0,month-1): 10 total+=list[i] 11 total+=day 12 13 if check_year==True: 14 total+=1 15 print(total)
4、输入三个整数x,y,z,请把这三个数由小到大输出
1 l = []
2 for i in range(3):
3 x = int(input('Please input sorted number:\n'))
4 l.append(x)
5 l.sort()
6 print(l)
1 if __name__ == '__main__': 2 n1 = int(input('n1 = :')) 3 n2 = int(input('n2 = :')) 4 n3 = int(input('n3 = :')) 5 6 7 def swap(p1, p2): 8 return p2, p1 9 10 11 if n1 > n2: n1, n2 = swap(n1, n2) 12 if n1 > n3: n1, n3 = swap(n1, n3) 13 if n2 > n3: n2, n3 = swap(n2, n3) 14 15 print(n1, n2, n3)
5、输出了第10个斐波那契数列
1 list=[] 2 def fib(n): 3 if n == 1 or n == 2: 4 return 1 5 return fib(n - 1) + fib(n - 2) 6 7 8 # 输出了第10个斐波那契数列 9 print(fib(10))
6、输出 9*9 乘法口诀表
1 for i in range(1,10): 2 for j in range(i,10): 3 print(f"{i}*{j}={i*j}",end=" ") 4 if j==9: 5 print("\n")
7、暂停一秒输出,并格式化当前时间
1 from time import sleep 2 import time 3 # 优化格式化化版本 4 print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))) 5 sleep(1) 6 print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
8、判断101-200之间有多少个素数,并输出所有素数。
1 from math import sqrt 2 a=1 3 for i in range(101,201): 4 k=int(sqrt(i)) 5 for j in range(2,k+1): 6 if(i%j==0): 7 a=0 8 break 9 10 if(a==1): 11 print(i) 12 a=1
9、将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5
1 n=int(input()) 2 while n not in [1] : # 循环保证递归 3 4 for index in range(2, n + 1) : 5 if n % index == 0: 6 n //= index # n 等于 n//index 7 if n == 1: 8 print(index) 9 else : # index 一定是素数 10 print('{} * '.format(index),end="") 11 break
10、输出指定格式的日期
1 import datetime 2 3 if __name__ == '__main__': 4 # 输出今日日期,格式为 dd-mm-yyyy。更多选项可以查看 strftime() 方法 5 print(datetime.date.today().strftime('%d-%m-%Y')) 6 7 # 创建日期对象 8 date1 = datetime.date(1941, 1, 5) 9 10 print(date1.strftime('%d-%m-%Y')) 11 12 # 日期算术运算 13 date2 = date1 + datetime.timedelta(days=1) 14 15 print(date2.strftime('%d-%m-%Y')) 16 17 # 日期替换 18 date3 = date1.replace(year=date1.year + 1) 19 20 print(date3.strftime('%d-%m-%Y'))
11、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
1 s = input('请输入一个字符串:\n') 2 letters = 0 3 space = 0 4 digit = 0 5 others = 0 6 7 for i in s: 8 if i.isalpha(): 9 letters += 1 10 elif i.isspace(): 11 space += 1 12 elif i.isdigit(): 13 digit += 1 14 else: 15 others += 1 16 print(letters,space,digit,others)
12、求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制
1 a=int(input()) 2 b=int(input()) 3 sum=0 4 5 for i in range(1,b+1): 6 sum+=a 7 a=a*10+2 8 print(sum)
13、一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数
1 for i in range(2,1001): 2 sum=0 3 for j in range(1,i): 4 if(i%j==0): 5 sum+=j 6 7 if(sum==i): 8 print(i)
14、一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高
1 h=100 2 i=1 3 sum=0 4 while(i<=10): 5 i+=1 6 sum+=h*2 7 h/=2 8 print(h) 9 print(sum-100)
15、列表转换为字典
# 方法一: # 创建key值 list_key = ["a", "b", "c", "d", "c"] # 创建value list_value = [1, 2, 3, 4, 5] # 创建一个空的字典 dict = {} # 创建for循环,len()表示统计key的个数 for i in range(len(list_key)): # 字典赋值,左边为key,右边为value dict[list_key[i]] = list_value[i] # 输出字典dict print(dict) #方法二:使用zip生成字典 i = ['a', 'b'] l = [1, 2] # 使用zip转换为元组后,在将元组转换为字典。 print(dict(zip(i, l))) # 方法三:使用嵌套列表转为字典 list2 = [['key1','value1'],['key2','value2'],['key3','value3']] print(dict(list2))
1 i = ['a', 'b'] 2 l = [1, 2] 3 print(dict([i, l]))
16、有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中
1 if __name__ == '__main__': 2 import string 3 4 fp = open('text1.txt') 5 a = fp.read() 6 fp.close() 7 8 fp = open('text2.txt') 9 b = fp.read() 10 fp.close() 11 12 fp = open('text3.txt', 'w') 13 l = list(a + b) 14 l.sort() 15 s = '' 16 s = s.join(l) 17 fp.write(s) 18 fp.close()
17、计算字符串中子串出现的次数
1 str1=input() 2 str2=input() 3 ncount=str1.count(str2) 4 print(ncount)
18、从键盘输入一些字符,逐个把它们写到磁盘文件上,直到输入一个 # 为止
1 if __name__ == '__main__': 2 filename = input('输入文件名:') 3 fp = open(filename,"w") 4 ch = input('输入字符串:') 5 while ch != '#': 6 fp.write(ch) 7 print(ch) 8 ch = input('') 9 fp.close()
19、从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件"test"中保存
1 str=input() 2 3 a=str.upper() 4 5 with open(file='c.txt',mode='w',encoding='utf-8') as f: 6 f.write(a)
20、809*??=800*??+9*?? 其中??代表的两位数, 809*??为四位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果
1 list=[] 2 for i in range(10,1000): 3 if 809*i<=9999 and 8*i<=99 and 9*i<=999 and 9*i>=100: 4 list.append(i) 5 6 7 for j in list: 8 if(809*j==800*j+9*j): 9 print(j)
21、连接字符串
1 delimiter = ',' 2 mylist = ['Brazil', 'Russia', 'India', 'China'] 3 print(delimiter.join(mylist))
22、某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换
1 num=int(input()) 2 3 d=num%10 4 c=(num//10)%10 5 b=(num//100)%10 6 a=num//1000 7 print(a,b,c,d) 8 a=(a+5)%10 9 b=(b+5)%10 10 c=(c+5)%10 11 d=(d+5)%10 12 print(a,b,c,d) 13 a,d=d,a 14 b,c=c,b 15 print(a,b,c,d)
23、反向输出一个链表
1 if __name__ == '__main__': 2 ptr = [] 3 for i in range(5): 4 num = int(input('please input a number:')) 5 ptr.append(num) 6 print(ptr) 7 ptr.reverse() 8 print(ptr)
24、打印出杨辉三角形
1 if __name__ == '__main__': 2 a = [] 3 for i in range(10): 4 a.append([]) 5 for j in range(10): 6 a[i].append(0) 7 for i in range(10): 8 a[i][0] = 1 9 a[i][i] = 1 10 for i in range(2, 10): 11 for j in range(1, i): 12 a[i][j] = a[i - 1][j - 1] + a[i - 1][j] 13 for i in range(10): 14 for j in range(i + 1): 15 print(str(a[i][j]), end=" ") 16 print()
25、输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组
1 def inp(numbers): 2 for i in range(6): 3 numbers.append(int(input('输入一个数字:'))) 4 5 6 p = 0 7 8 9 def arr_max(array): 10 max = 0 11 for i in range(1, len(array)): 12 p = i 13 if array[p] > array[max]: max = p 14 k = max 15 array[0], array[k] = array[k], array[0] 16 17 18 def arr_min(array): 19 min = 0 20 for i in range(1, len(array)): 21 p = i 22 if array[p] < array[min]: min = p 23 l = min 24 array[5], array[l] = array[l], array[5] 25 26 27 def outp(numbers): 28 for i in range(len(numbers)): 29 print(numbers[i]) 30 31 32 if __name__ == '__main__': 33 array = [] 34 inp(array) # 输入 6 个数字并放入数组 35 arr_max(array) # 获取最大元素并与第一个元素交换 36 arr_min(array) # 获取最小元素并与最后一个元素交换 37 print('计算结果:') 38 outp(array)
26、有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
1 if __name__ == '__main__': 2 n = int(input('整数 n 为:\n')) 3 m = int(input('向后移 m 个位置为:\n')) 4 5 6 def move(array, n, m): 7 array_end = array[n - 1] 8 for i in range(n - 1, -1, - 1): 9 array[i] = array[i - 1] 10 array[0] = array_end 11 m -= 1 12 if m > 0: move(array, n, m) 13 14 15 number = [] 16 for i in range(n): 17 number.append(int(input('输入一个数字:\n'))) 18 print('原始列表:', number) 19 20 move(number, n, m) 21 22 print('移动之后:', number)
27、有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
1 if __name__ == '__main__': 2 nmax = 50 3 n = int(input('请输入总人数:')) 4 num = [] 5 for i in range(n): 6 num.append(i + 1) 7 8 i = 0 9 k = 0 10 m = 0 11 12 while m < n - 1: 13 if num[i] != 0: k += 1 14 if k == 3: 15 num[i] = 0 16 k = 0 17 m += 1 18 i += 1 19 if i == n: i = 0 20 21 i = 0 22 while num[i] == 0: i += 1 23 print(num[i])
28、模仿静态变量的用法
1 def varfunc(): 2 var = 0 3 print('var = %d' % var) 4 var += 1 5 6 7 if __name__ == '__main__': 8 for i in range(3): 9 varfunc() 10 11 12 # 类的属性 13 # 作为类的一个属性吧 14 class Static: 15 StaticVar = 5 16 17 def varfunc(self): 18 self.StaticVar += 1 19 print(self.StaticVar) 20 21 22 print(Static.StaticVar) 23 a = Static() 24 for i in range(3): 25 a.varfunc()
29、两个 3 行 3 列的矩阵,实现其对应位置的数据相加,并返回一个新矩阵
1 X = [[12,7,3], 2 [4 ,5,6], 3 [7 ,8,9]] 4 5 Y = [[5,8,1], 6 [6,7,3], 7 [4,5,9]] 8 9 Z=[] 10 for i in range(3): 11 Z.append([]) 12 for j in range(3): 13 Z[i].append(0) 14 15 16 for i in range(3): 17 for j in range(3): 18 19 Z[i][j]=X[i][j]+Y[i][j] 20 21 print(Z)
30、使用lambda来创建匿名函数
1 MAXIMUM = lambda x, y: (x > y) * x + (x < y) * y 2 MINIMUM = lambda x, y: (x > y) * y + (x < y) * x 3 4 if __name__ == '__main__': 5 a = 10 6 b = 20 7 print('The largar one is %d' % MAXIMUM(a, b)) 8 print('The lower one is %d' % MINIMUM(a, b))
31、按逗号分隔列表
1 L = [1, 2, 3, 4, 5] 2 s1 = ','.join(str(n) for n in L) 3 print(s1)
32、求100之内的素数
1 for i in range(2,101): 2 tag=False 3 for j in range(2,i): 4 if i%j==0: 5 tag=True 6 if tag==False: 7 print(i)
1 # 输出指定范围内的素数 2 3 # 用户输入数据 4 lower = int(input("输入区间最小值: ")) 5 upper = int(input("输入区间最大值: ")) 6 7 for num in range(lower, upper + 1): 8 # 素数大于 1 9 if num > 1: 10 for i in range(2, num): 11 if (num % i) == 0: 12 break 13 else: 14 print(num)
33、对10个数进行排序(选择法)
1 l=[3,5,2,6,7,8,5,10,9,12] 2 3 for i in range(len(l)): 4 min=i 5 for j in range(i+1,len(l)): 6 if l[min]>l[j]: 7 min=j 8 l[i], l[min] = l[min], l[i] 9 10 print(l)
34、求一个3*3矩阵主对角线元素之和
1 a=[] 2 for i in range(3): 3 a.append([]) 4 for j in range(3): 5 num=int(input()) 6 a[i].append(num) 7 sum=0 8 for i in range(3): 9 for j in range(3): 10 if i==j: 11 sum+=a[i][i] 12 print(sum)
35、有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
1 a = [1, 4, 6, 9, 13, 16, 19, 28, 40, 100, 0] 2 3 number=int(input()) 4 5 if number>a[9]: 6 a[10]=number 7 else: 8 for i in range(10): 9 if a[i]>number: 10 temp1=a[i] 11 a[i]=number 12 for j in range(i+1,11): 13 temp2=a[j] 14 a[j]=temp1 15 temp1=temp2 16 break 17 18 for i in range(11): 19 print(i)
36、将一个数组逆序输出
1 a = [9, 6, 5, 4, 1] 2 N = len(a) 3 print(a) 4 for i in range(len(a) // 2): 5 a[i], a[N - i - 1] = a[N - i - 1], a[i] 6 print(a)
37、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和
1 a = 2.0 2 b = 1.0 3 s = 0 4 for n in range(1, 21): 5 s += a / b 6 t = a 7 a = a + b 8 b = t 9 print(s)
38、求1+2!+3!+...+20!的和
1 n = 0 2 s = 0 3 t = 1 4 for n in range(1, 21): 5 t *= n 6 s += t 7 print('1! + 2! + 3! + ... + 20! = %d' % s)
39、利用递归方法求5!
1 def fact(j): 2 sum = 0 3 if j == 0: 4 sum = 1 5 else: 6 sum = j * fact(j - 1) 7 return sum 8 9 print(fact(5))
40、利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来
1 def output(s, l): 2 if l == 0: 3 return 4 print(s[l - 1]) 5 output(s, l - 1) 6 7 8 s = input('Input a string:') 9 l = len(s) 10 output(s, l)
41、一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同
1 a = int(input("请输入一个数字:\n")) 2 x = str(a) 3 flag = True 4 5 for i in range(len(x) // 2): 6 if x[i] != x[-i - 1]: 7 flag = False 8 break 9 if flag: 10 print("%d 是一个回文数!" % a) 11 else: 12 print("%d 不是一个回文数!" % a)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构