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)
复制代码

 

posted @   handsome_bad_boy  阅读(132)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示