python123练习题

本文包含一系列Python基础练习题,涉及鸡兔同笼问题、身份证号校验、同符号数学运算、完数、最大素数、分解质因数、N位水仙花数和阶乘累加和等,适合初学者提升技能。
摘要由CSDN通过智能技术生成

1、鸡兔同笼

大约在1500年前,《孙子算经》中就记载了这个有趣的问题。书中是这样叙述的:
今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?
这四句话的意思是:
有若干只鸡兔同在一个笼子里,从上面数,有35个头,从下面数,有94只脚。问笼中各有多少只鸡和兔?‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

请编一个程序,用户在同一行内输入两个整数,代表头和脚的数量,编程计算笼中各有多少只鸡和兔,假设鸡和兔都正常,无残疾。如无解则输出Data Error!

​a,b = map(int,input().split(' ')) 
x = -b//2+2*a
y = b//2-a
if(isinstance(x,int) and isinstance(y,int) and (x>=0) and (y>=0)):
	print(x ,y)
else:
	print('Data Error!')

2、身份证号校验

中国目前采用的是18位身份证号,其第7-10位数字是出生年,11-12位是出生月份,13-14是出生日期,第17位是性别,奇数为男性,偶数为女性,第18位是校验位。
如果身份证号码的其中一位填错了(包括最后一个校验位),则校验算法可以检测出来。如果身份证号的相邻2位填反了,则校验算法可以检测出来。校验规则如下:
1. 将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
  2. 将这17位数字和系数相乘的结果相加。
  3. 用加出来和除以11,看余数只可能是:0-1-2-3-4-5-6-7-8-9-10
分别对应的最后一位身份证的号码为:1-0-X-9-8-7-6-5-4-3-2
  4. 通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的X(大写英文字母X)。如果余数是10,身份证的最后一位号码就是2。
用户输入一个身份证号,校验其是否是合法的身份证号码。

​a = input()
b = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
c = '10X98765432'
j = 0
s = 0
for i in a[:-1]:
	s +=eval(i)*b[j] # 此处也可用int
	j += 1
if a[-1] == c[s%11]:
	print('身份证号码校验为合法号码!')
else:
	print('身份证校验位错误!')

‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪3、同符号数学运算

读入一个整数N,分别计算如下内容:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

  1. N的绝对值;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

  2. N与10进行同符号加法、减法和乘法运算,同符号运算指使用N的绝对值与另一个数进行运算,运算结果的绝对值被赋予N相同的符号,其中,0的符号是正号。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

将上述4项结果在一行输出,采用空格分隔,输出结果均为整数。

N = int(input())
a = abs(N)
b = a+10
c = a-10
d = a*10
if N >= 0:
	print(a ,b ,abs(c) ,d )
else:
	print(a ,-b ,-abs(c) ,-d )

4、完数

本题要求实现一个计算整数因子和的简单函数,并利用其实现另一个函数,输出最小的N(1 <= N <= 4)个完数。所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。

输入格式 一个正整数N(最小的前N个完数),如:1‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输出格式 如:6=1+2+3

def factorsum(n):	
	s = 0
	list=[] #存放因子
	for i in range(1,int(n/2)+1):
		if n%i == 0:
			s += i
			list.append(i)			
		if s == n and i == int(n/2): #确保遍历所有的因子
			return list
	return False

N = int(input())
j = 6
count = 0

while count<N:
	list = factorsum(j)
	if list:
		count += 1
		print('%d='%j,end='')
		for x in list:
			if x == list[-1]: #最后一个因子后面不加'+'
				print('%d'%x)
			else:
				print('%d+'%x,end='')
	j+=1;

当N为4时,输出为:
在这里插入图片描述

5、最大素数

用户输入一个正整数N,计算并输出小于N的最大素数

def isPrime(n):
	for i in range(2,int(n/2)):
		if n%i == 0:
			return False
			break
	return True
a = int(input())
i = a-1
while i >= 2:
	if isPrime(i):
		print (i)
		break
	i-=1

6、分解质因数

分解质因数只针对合数(非质数或者非素数,不包括1在内), 每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,叫做这个合数的分解质因数。
在这里插入图片描述

def isPrime(n):
	for i in range(2,int(n/2)+1):
		if n%i==0:
			return False
			break
	return True
n = int(input())
a = [] #存放质因子
s = n
i = 2
while i <= int(n/2):
	if s%i == 0 and isPrime(i):
		a.append(i)
		s/=i
		if isPrime(s): #说明找到合数的最后一个分解质因数
			a.append(int(s))
			break
		i=1 #为了每次从2开始
	i+=1
print(a)

7、N位水仙花数

水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。用户输入一个正整数N,输出所有N位的水仙花数。

#注意int、str类型
n=int(input())
for i in range(10**(n-1),10**n):
	s = 0
	for j in str(i):
		s += int(j)**n
	if s == i:
		print(i,end='\n')

8、计算阶乘的累加和

计算从1-n的阶乘之和。

a = int(input())
s = 1
c = 0
for j in range(a):
	for i in range(j+1):
		s*=(i+1)
	c += s
	s = 1
print(c)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值