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)