1、Python编写一个输出小于N的所有素数的程序
编程要求
- 程序运行时,提示“N=”,用户输入一个正整数后(要对输入的数进行校验,不是一个大于2的正整数,则提示’error!input again:’,并重新提示输入:’N=’,直到输入了满足要求的数);
- 把小于N的所有素数存储在一个列表data;
- 输出data中的全部元素,按每行8个数,每两个数之间用1个空格隔开的格式输出。
- 根据列表求所有素数之和及平均值(保留小数点后面3位有效数字);
定义一个空列表存放素数
import numpy as np
data = []
while True:
s = input('N=')
if s.isdigit():
N = int(s)
if(int(s)<=2):
print('error!input again:')
continue
break
else:
print('error!input again:')
continue
for i in range(2,N+1):
for j in range(2,i):
if i % j == 0:
break
else:
data.append(i)
for a in range(len(data)):
print(data[a],end=' ')
if (a+1)%8 == 0:
print('')
print('\nsum=%.0f,average=%.2f'%(sum(data), np.mean(data)))
2、Python输出小于任意给定的正整数N(N>20)的所有完美数
任务:本关任务:输出小于任意给定的正整数N(N>20)的所有完美数所谓完美数是:若大于0且小于正整数M的所有能整除M的因子的和等于M,则M为完美数,例如:6=1+2+3,因此,6是完美数
编程要求
- 此程序对运行时间有要求,必须尽可能减小算法时间复杂度。
- 本程序最佳的代码不会超过15行,如果你的代码超过15行,你得考虑是不是要优化一下(参考代码只有9行)
- 本题不需要像第1题那样进行合法性检查,假设你的输入都是合法的,即N>20
- 完美数的输出格式为:a=fact1+fact2+…,fact1,fact2,…因子按升序排序
N=int(input('N='))
for num in range(6,N):
factors=[m for m in range(2,int(num**0.5)+1) if num%m==0]
factors+=[num//n for n in factors]
factors.append(1)
if sum(factors)==num:
factors.sort()
s='+'.join(map(str,factors))
print(f'{num}={s}')
3、Python编写评委评分
任务:学校举行校园歌手大赛,请了N个评委给选手打分,你负责设计一个程序:依次输入N个评委的评分,去掉1个最高分和1个最低分,以其余平均分作为选手最终得分。
编程要求
编程要求
- 分数为连续输入的方式,相邻两个数之间用逗号(中文,英文逗号均可)或空格作为分隔符都可以识别。只要输入不合法,就提示重新输入。
输入合法的条件是:(A)输入的数据都是数值(B)位于区间(0,10]上的数值个数大于或等于5。 - 将最终输入的有效数值显示出来,基于最终的有效评分进行计算:去掉1个最高、1个最低分,求剩下的平均分作为最终得分。
- 最终得分保留小数点后3位有效数字。
- 尽量以最简洁的代码完成任务。
while True:
s=input('input score:')
seps=',锛 '
for sep in seps:
s=s.replace(sep,' ')
s=s.split()
try:
data=list(map(float,s))
data=[num for num in data if 0<num<=10]
if len(data)>=5:
break
except:
continue
print('valid scores:'+str(data))
max_score=max(data)
min_score=min(data)
avg_score=(sum(data)-max_score-min_score)/(len(data)-2)
print('max={0},min={1},score={2:.3f}'.format(max_score,min_score,avg_score))
4、Python函数的应用: 输出斐波那契数列
任务:给定一个整数N(N>=10),从1开始,输出元素个数为N的斐波那契数列
编程要求
(1)本程序的主程序代码已经给出,如下:
data=fibdata()
outputdata(data)
N = getint()
M = getint()
data = fibdata(N)
outputdata(data,M)
上面的fibdata用于生成一个斐波那契数列,getint用于获取用户从键盘输入的整数(必须为正整数,内部要进行校验,不合法就要求重新输入),outputdata用于根据每行多少个数据输出该数列
(2)请在读懂上述主程序代码的基础上,完成各个函数的定义(你只需要完成定义的代码,上面的调用代码不要求你输入(不过你可以把这段代码复制到你的本机开发环境进行测试)
#-*- coding: utf-8 -*-
def fibdata(n=10):
a, b = 0, 1
data=[1]
while n > 1:
a, b = b, a + b
n -= 1
data.append(b)
return data
def getint():
while True:
a=input('input a positive int:')
if a.isdigit():
break
else:
continue
return int(a)
def outputdata(data,M=5):
for i in range(len(data)):
print(data[i],end=' ')
if (i+1)%M == 0:
print('')
5、Python类的定义与使用:一元二次方程求解
编程要求
(1)以下是主程序文件(test.py)中的完整代码:
from myclass import *
if __name__=='__main__':
while True:
try:
a,b,c=eval(input('please input three float number:'))
equation=QuadraticEquation(a,b,c)
except:
equation=QuadraticEquation() #使用默认参数a=1,b=1,c=1初始化
#注意,这个返回结果必须是一个字典对象{'x1':1,'x2':2,'state':1},其项目依次对应根
#x1,x2,根的状态(0表示相等实根,1表示不等实根,2表示复数根
result=equation.getroot()
equation.outputresult(result) #调用对象的方法更友好地显示结果
print(result.keys(),',state={}'.format(result['state'])) #显示字典对象的键和根的状态
if input('continue(y/n)?').lower()!='y':
break
(2)在读懂主程序的基础上,在右侧代码区中完成myclass.py文件中的代码,从而使主程序文件能够执行,并输出期望的结果。
#-*- coding:utf-8 -
class QuadraticEquation():
def __init__(self,a=1,b=1,c=1):
self.a=a
self.b=b
self.c=c
def getroot(self):
dirt={}
x1=(-self.b+(self.b*self.b-4*self.a*self.c)**0.5)/(2*self.a)
x2=(-self.b-(self.b*self.b-4*self.a*self.c)**0.5)/(2*self.a)
dirt['x1']=x1
dirt['x2']=x2
if isinstance(x1,complex):
state=2
elif x1==x2:
state=0
else:
state=1
dirt['state']=state
return dirt
def outputresult(self , result):
if(result['state']==2):
print("{0}x+{1}x**2+{2}=0 has two complex roots x1={3:.3f},x2={4:.3f}"
.format(self.a,self.b,self.c,result['x1'],result['x2']))
elif result['state']==1:
print("{0}x+{1}x**2+{2}=0 has two inequal real roots:x1={3:.3f},x2={4:.3f}"
.format(self.a,self.b,self.c,result['x1'],result['x2']))
else:
print("{0}x+{1}x**2+{2}=0 has two equal roots x1=x2={3:.3f}"
.format(self.a,self.b,self.c,result['x1']))
6、字符串、正则表达式与文件操作:字符串加密与解密
任务描述
加密:给定一串原始的文本和一个编码字符串(例如utf-8),加密算法为:把原始内容转换为字节串,然后把字节串中的每一个元素对应的10进制整数转换为对应的字符串,各个字符串用1个小写字母作为分隔符连接起来,最终构成的字符串为加密后的字符串。分隔符的确定规则如下:
当前的分割字母在字母表中的顺序与它前面的那个数字对应,若那个数字为0,则为字母a,为1,则为字母b,…,。
例如,“china 中国”用编码’utf-8’加密后为“99j104e105f110a97h32c228i184e173d229j155f189j”
解密:给定上述加密后的字符串,反向解码为原始的字符串。
编程要求
(1)编写一个可复用的类Encryptionlock,实现上述功能。
(2)主程序通过使用Encryptionlock,实现对一个输入的字符串进行加密,及对一个输入的加密后的字符串进行解密,代码如下:
if name == ‘main‘:
s=input(‘输入待加密的字符串:’)
coding=input(‘输入编码字符串:’)
s_encrpt=Encryptionlock.encrypt(s,coding)
print(‘加密后为:’+s_encrpt)
s_decrpt=Encryptionlock.decrypt(s_encrpt,coding)
print(‘解密后为:’+s_decrpt)
#-*- coding: utf-8 -*-
import string
class Encryptionlock():
'''使用常用编码进行文本的加密和解密
'''
@staticmethod
def encrypt(originstr: str, coding: str = 'utf-8'):
'''对一个字符串进行加密,返回加密后的字符串
'''
result = originstr.encode(coding)
result = bytearray(result)
seq = string.ascii_lowercase
result = ''.join([str(s) + seq[s%10] for s in result])
return result
@staticmethod
def decrypt(encrypedstr: str, coding: str = 'utf-8'):
'''对一个字符串进行解密,返回解密后的字符串
'''
result= encrypedstr
seq = string.ascii_letters
for s in seq:
result = result.replace(s, ' ')
result = result.split(' ')
result.pop()
result = bytes(map(int,result))
return result.decode(coding)
7、数学库numpy的使用
任务描述
编写一个程序:输入任意一个矩阵,求它的转置矩阵,并判断其是否为奇异矩阵,若不是,则输出其行列式和逆矩阵。
相关知识
程序的运行结果画面类似如下:
请输入一个N×N矩阵:[[1,6],[3,9]]
该矩阵的转置矩阵为:
[[1 3]
[6 9]]
该矩阵的行列式为:-9.00
该矩阵的逆矩阵为:
[[-1. 0.66666667]
[ 0.33333333 -0.11111111]]
import numpy as np
c=eval(input("请输入一个N×N矩阵:"))
a=np.asarray(c)
print("该矩阵的转置矩阵为:")
print(a.T)
if(a.shape[0]==a.shape[1] and abs(np.linalg.det(a))!=0):
print("该矩阵的行列式为:{0:.2f}".format(np.linalg.det(a)))
print("该矩阵的逆矩阵为:\n{0}".format(np.linalg.inv(a)))
else:
print("这是奇异矩阵")