python简单代码input-Python简单程序的练习

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(' sum=%.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

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("该矩阵的逆矩阵为: {0}".format(np.linalg.inv(a)))

else:

print("这是奇异矩阵")

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值