Python-练习题目(1-20)
1.题目1:输入A、B,输出A+B。
#input: 12 45 #output:57 c = input().split() #将输入以空格为分隔符返回一个字符串列表 a,b = map(int,c) sum1 = a + b print(sum1)
2.题目2:求1+2+3+...+n的值。
#input:4 #output:10 print(sum(range(1,int(input()) + 1)))
3.题目3:给定圆的半径r,求圆的面积。
#input:4 #output:50.2654825 import math print(round(math.pi*float(input())**2,7))
4.题目4:
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
#input:10 #output:55 import numpy as np n = int(input()) a = np.zeros((1,n),dtype = "int") a[0][0] = 1 for i in range(1,n): a[0][i] = a[0][i-1] + a[0][i-2] print(a[0][n-1]%10007) ''' def fei(n): if n == 0: return 0 elif n == 1: return 1 else: return fei(n-1)%10007 + fei (n-2)%10007 n = int(input())#项数 print(fei(n)) '''
5.题目5:
给定一个年份,判断这一年是不是闰年。
当以下情况之一满足时,这一年是闰年:
1. 年份是4的倍数而不是100的倍数;
2. 年份是400的倍数。
其他的年份都不是闰年。
#input:2013 #output:no year = int(input()) if (year>=1990 and year<=2050) and (year%400 == 0 or (year%4 == 0 and year%100 !=0)): print("yes") elif year<1990 or year>2050: print("输入错误") else: print("no")
6.题目6:
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
for i in range(32): print("{:05b}".format(i,'b'))
7.题目7:
利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
#input:5 7 #output: ''' ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC ''' m, n = map(int, input().split()) letters = '' # 1.产生所有字母 for i in range(26): letters += chr(ord("A") + i) # 2. 产生第一行代码 x = letters[:n] for i in range(1,m+1): try: print(x) x = letters[i] + x[0:n-1] except: pass ''' try: n, m = map(int, input().split()) letter = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' x = letter[:m] for i in range(1, n + 1): print(x) x = letter[i] + x[0:-1] except: pass #本文版权归作者和博客园共有,来源网址:https://www.cnblogs.com/xiaolan-Lin 欢迎各位转载, #未经作者本人同意转载文章时,必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利! ''' ''' import numpy as np m,n = map(int,input().split()) #输入原始矩阵 mx = np.ones((m,n),dtype="str") print(mx) #产生所有字母的列表 letters = [] for i in range(26): letters.append(chr(ord("A") + i)) # print(ord("A"))#65 某个字符串对应的ascii码;chr ascii码转字符串 '''
8.题目8:
给出n个数,找出这n个数的最大值,最小值,和。
第一行为整数n,表示数的个数。
第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。
输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。
#input:5 # 1 3 -2 4 5 #output: #5 #-2 #11 # 给出n个数,找出这n个数的最大值,最小值,和。 n = int(input()) #几个数 a = input().split() #注意不能直接将列表转换类型 a = [int(i) for i in a] #>>> input().split() #4 5 6 #['4', '5', '6'] #>>> print(max(a)) print(min(a)) print(sum(a))
9.题目9:
给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
第一行包含一个整数n。
第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。
第三行包含一个整数a,为待查找的数。
如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。
#input: #6 #1 9 4 8 3 9 #9 #output: #2 n = int(input()) # 几个数 a = input().split() a = [int(i) for i in a] # 输入的列表 b = int(input()) # 待查找的数 try: print(a.index(b) + 1) #待查找数的下标,加一代表位置 except: print(-1)
10.题目10:
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。
它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。
下面给出了杨辉三角形的前4行:
1
1 1
1 2 1
1 3 3 1
给出n,输出它的前n行。
杨辉三角:给定一个数n,判断n第一次出现是在杨辉三角数字的第几个(杨辉三角3)?
#input:4 #output: #1 #1 1 #1 2 1 #1 3 3 1 #思想:列表相加 + 观察 n = int(input()) def yanghui(p): p = [1] + [p[i] + p[i+1] for i in range(len(p) - 1)] + [1] return p #1.将每一行输出一个列表 p = [1] #print(p) p_s = [] for i in range(n): p_s.append(p) p = yanghui(p) #p.append(0) #增加一个元素,因为下一行比上一行多一个,#不用了,上面p迭代呢 #print(p) #2.输出 for i in p_s: #print(i) #将列表元素这样输出:1 3 3 1 for j in i: print(j,end=' ') print("\t") #回车不换行
#关键:后面一行除了前面和后面的1,中间的数是前面一行数的滑动两个数的和 #1.产生杨辉三角 n = int(input()) begin = [[1],[1,1]] for i in range(n-2):#因为前面两个要加的数字是空的 newend = begin[-1] new = [1] new = new + [newend[j]+newend[j+1] for j in range(len(newend) - 1)] + [1] begin.append(new) a = str(begin)[1:-1] #2.格式化字符串 import re b = re.split(r'], ',a) # 分开每一个 c = [i + ']' for i in b[:]] # 加右括号 d = [] #将[]都去掉,之后将,转换为空格 for i in range(len(c)): if i == len(c)-1: e = c[i][1:-2] else: e = c[i][1:-1] f = e.replace(',',' ') # str.replace(old, new[, max]) d.append(f) #print(d) #3.输出 h = n + 2*(n -1) #最后一行的长度 for i in d: s = ' '*((h-len(i))//2) print(s + i + s) ''' #3.输出(最后一行是n + n-1个长度) h = n + 2*(n -1) for i in d: print('{:^hs}'.format(i)) #精度保存时候是不能作为变量修改的 '''
n = int(input()) begin = [[1],[1,1]] begin_last = [1,1] index = 2 sum_index = 1 + 2 if n == 1: print(1) else: while(n not in begin_last): new_end = begin_last new = [1,] + [new_end[j] + new_end[j+1] for j in range(len(new_end) -1)] + [1,] begin_last = new index += 1 sum_index += index print(sum_index - index + new.index(n) + 1)
11.题目11:
153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3*3。编程求所有满足这种条件的三位十进制数。
#按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。 #153是一个非常特殊的数,它等于它的每位数字的立方和, #即153=1*1*1+5*5*5+3*3*3。编程求所有满足这种条件的三位十进制数。 for i in range(100,1000): gewei = i%10 shiwei = (i//10)%10 baiwei = (i//100)%10 if i == gewei**3 + shiwei**3 + baiwei**3: print(i)
12.题目12:
1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。
#按从小到大的顺序输出满足条件的四位十进制数。 for i in range(10000): gewei = i%10 shiwei = (i//10)%10 baiwei = (i//100)%10 qianwei = (i//1000)%10 if qianwei == 0: continue elif gewei == qianwei and shiwei == baiwei: print(i)
13.题目13:
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入一行,包含一个正整数n。
按从小到大的顺序输出满足条件的整数,每个整数占一行。
#input:52 #output: #899998 #989989 #998899 num1 = int(input()) for i in range(10000,999999): gewei = i%10 shiwei = (i//10)%10 baiwei = (i//100)%10 qianwei = (i//1000)%10 wanwei = (i//10000)%10 shiwanwei = (i//100000)%10 sum1 = gewei + shiwei + baiwei + qianwei + wanwei + shiwanwei tiaojian1 = (shiwanwei==0 and wanwei==gewei and shiwei==qianwei and num1==sum1)#5位数 tiaojian2 = (shiwanwei==gewei and shiwei==wanwei and baiwei==qianwei and num1==sum1)#6位数 if tiaojian1 or tiaojian2: print(i,end=" ") print("\t")
14.题目14:
(1)给出一个非负整数,将它表示成十六进制的形式。
(2)从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
(3)给定n个十六进制正整数,输出它们对应的八进制数。
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出n行,每行为输入对应的八进制正整数。
#给出一个非负整数,将它表示成十六进制的形式。 #10进制转16进制:hex(n) 将10进制整数转换成16进制,以字符串形式表示。 #10进制转8进制oct(n) #10进制转二进制:bin(n) #8进制转16进制:hex(int(n,8)) #8进制转换成10进制:int(n,8) #8进制转换成2进制:bin(int(n,8)) #2进制转换成16进制:hex(int(n,2)) #2进制转换成8进制:oct(int(n,2)) #2进制转换成10进制:int(n,2) #30 1E 10进制转16进制 #n = int(input()) #s = hex(n)[2:] #print(s.upper()) ''' str = "www.runoob.com" print(str.upper()) # 把所有字符中的小写字母转换成大写字母 print(str.lower()) # 把所有字符中的大写字母转换成小写字母 print(str.capitalize()) # 把第一个字母转化为大写字母,其余小写 print(str.title()) # 把每个单词的第一个字母转化为大写,其余小写 ''' #16进制转10进制 FFFF 65535 #a = input() #a = '0x' + a #print(int(a,16)) #注意:int最终输出为10进制 #16进制转8进制 n = int(input()) #想要转换的数的个数 l1 = [] #存储要输出的转换后的8进制字符串 for i in range(n): a = input() #接收转换的数 a = '0x' + a b = int(a,16) #16进制对应的10进制数 s = oct(b)[2:] l1.append(s) #输出: for i in l1: print(i)
15.问题15(这个的知道内存的知识):
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。
第一行为一个整数n。
第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出一行,按从小到大的顺序输出排序后的数列。
5
8 3 6 4 9
3 4 6 8 9
n = int(input()) #列表的长度 l1 = input().split()#接收传入的数字,转为列表 l1 = [int(i) for i in l1] #print(l1) #list.sort(cmp=None, key=None, reverse=False) ''' l1ed = l1.sort() print(id(l1ed),id(l1.sort()),id(l1)) print(l1ed) #这块的话:l1ed指向那个l1排序后的那个空间, #而sort的话是在原内存上面进行的,那边是空的 #list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list, #而不是在原来的基础上进行的操作。 ''' l1.sort() for i in l1: print(i,end = ' ')
16. 题目16:时间转换,将秒换为时分秒的形式
#eg: input:3661 #(t最大为86399,其 < 60**3) #output: 1:1:1 t = int(input()) shi = 0 fen = 0 miao = 0 if t < 60: miao = t elif t < 60**2: fen = t//60 miao = t - fen*60 else: shi = t//(60**2) fen = (t - shi*3600)//60 miao = t - shi*3600 - fen*60 print(str(shi) + ":" + str(fen) + ":" + str(miao))
17. 题目17:
#给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一:
#1:两个字符串长度不等。比如 Beijing 和 Hebei
#2:两个字符串不仅长度相等,而且相应位置上的字符完全一致(区分大小写),比如 Beijing 和 Beijing
#3:两个字符串长度相等,相应位置上的字符仅在不区分大小写的前提下才能达到完全一致(也就是说,它并不满足情况2)。比如 beijing 和 BEIjing
#4:两个字符串长度相等,但是即使是不区分大小写也不能使这两个字符串一致。比如 Beijing 和 Nanjing
#编程判断输入的两个字符串之间的关系属于这四类中的哪一类,给出所属的类的编号。
''' print(str.upper()) # 把所有字符中的小写字母转换成大写字母 print(str.lower()) # 把所有字符中的大写字母转换成小写字母 print(str.capitalize()) # 把第一个字母转化为大写字母,其余小写 print(str.title()) # 把每个单词的第一个字母转化为大写,其余小写 ''' s1 = input() s2 = input() if len(s1) != len(s2): print(1) elif s1 == s2: print(2) elif s1 != s2 and s1.upper() == s2.upper(): print(3) else: print(4)
18.题目18:
因式分解:输入范围[a b],输出其中所有数字的因式分解。
3 10
3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5
#str = "-"; #seq = ("a", "b", "c") #print(str.join( seq )) #a-b-c a, b = map(int, input().split()) for num in range(a,b+1): e = num #备份num m = [] #用来存储各个分式 while e != 1: for i in range(2,num+1): if e%i == 0: m.append(str(i)) e //= i break #因为例如4 = 2*2,试了2之后还要试2 print("{}=".format(num),end="") print("*".join(m)) #原文地址:https://blog.csdn.net/weixin_43937790/article/details/105024479
19.题目19(这个测试数据是正确的,但是我真不知道问题出在哪里):
给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
例如:
A =
1 2
3 4
A的2次幂
7 10
15 22
接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值
import numpy as np m,n = map(int,input().split())# m阶矩阵,n次幂 mx = np.zeros((m,m),dtype="int") #存储矩阵元素 i = 0 #遍历每一行时候的指针 mx_row_str = [] #存储矩阵元素每一行的字符串形式 mx_row_int = [] #存储矩阵元素每一行的数字形式 #1.循环写入矩阵 while i < m: mx_row_str = input().split() mx_row_int = [int(j) for j in mx_row_str] mx[i] = mx_row_int i += 1 #2.将array转为mat(矩阵)形式,因为矩阵有运算 mx = np.mat(mx) mx_out = mx**n #print(mx_out) #3.输出为指定格式 mx_out = mx_out.tolist() #这个输出格式这块注意一下 for i in mx_out: for j in i: print(j,end = ' ') print("\t") #print(mx_out)
20.题目20:
在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
#原文链接:https://www.pythonf.cn/read/12682 #用个list转换就可以: s1 = list(map(float, input().split())) s2 = list(map(float, input().split())) if s1[0] > s1[2]: s1[0],s2[2] = s1[2],s1[0] #交换x轴 if s1[1] > s1[3]: s1[1],s2[3] = s1[3],s1[1] #交换y轴 if s2[0] > s2[2]: s2[0],s2[2] = s2[2],s2[0] #交换x轴 if s1[1] > s1[3]: s2[1],s2[3] = s2[3],s2[1] #交换y轴 #print(s1,s2) temp_x1 = max(s1[0],s2[0]) #中间矩形的横坐标(左) temp_y1 = max(s1[1],s2[1]) temp_x2 = min(s1[2],s2[2]) #中间矩形的横坐标(右) temp_y2 = min(s1[3],s2[3]) if temp_x1 > temp_x2 or temp_y2 < temp_y1: r = 0 else: r = abs(temp_x1-temp_x2)*abs(temp_y1-temp_y2) print("{:.2f}".format(r))