首页 > Python资料 博客日记
第九、十章作业
2024-06-25 22:00:05Python资料围观133次
1.定义并实现Book类及其__del__函数
【问题描述】
图书馆里有很多的书, 请定义一个名为Book的类。该类的属性包括书名(字符串),书号(字符串),单价(浮点数);该类的构造函数接受书名,书号及单价三个参数并参成对象初始化;该类的__del__()函数则向终端打印如下信息:
Book destroyed-书名,书号,单价
注意:单价保留两位小数。
【样例输入】
Python Programming
888-999
43.678
【样例输出】
Book destroyed-Python Programming,888-999,43.68
代码:
class Book:
def __init__(self,name,no,price):
self.sName=name
self.sNo=no
self.fPrice=price
def __del__(self):
print('Book destroyed-%s,%s,%.2f'%(self.sName,self.sNo,self.fPrice))
sName = input()
sNo = input()
fPrice = float(input())
b = Book(sName,sNo,fPrice)
2.设计一个股票类 -《Python编程基础及应用》习题9-6
【问题描述】
设计一个名为Stock的类来表示一个公司的股票,包括以下内容:
1)股票代码、股票名称、前一天股票价格、当天股票价格4个私有属性;
2)构造方法,需初始化代码、名称、前一天价格和当天价格等属性;
3)返回股票名字的get方法;
4)返回股票代码的get方法;
5)获取和设置股票前一天价格的get和set方法;
6)获取和设置股票当前价格的get和set方法;
7)名为getChangePercent()方法,返回前日收市价至当前价格的变化百分比;
8). 包括文档字符串,其内容为:"Stock Information Class"
说明:各方法的名称及参数要求请参见测试程序。
【样例输入】
601318
Chinese PINAN
63.21
64.39
【样例输出】
Code:601318
Name:Chinese PINAN
Price/Yesterday:63.21
Price/Today:64.39
Edit Price/Yesterday To:50.25
Price Change Percentage:28.14%
Stock Information Class
代码:
class Stock:
'Stock Information Class'
def __init__(self,sCode,sName,priceYesterday,priceToday):
self.Code=sCode
self.Name=sName
self.priceYesterday=priceYesterday
self.priceToday=priceToday
def getCode(self):
return self.Code
def getName(self):
return self.Name
def getPriceYesterday(self):
return self.priceYesterday
def getPriceToday(self):
return self.priceToday
def setPriceYesterday(self,price):
self.priceYesterday=price
def getChangePercent(self):
return (self.priceToday-self.priceYesterday)/self.priceYesterday
sCode = input() #Stock Code
sName = input() #Stock Name
priceYesterday = float(input()) #Price/Yesterday
priceToday = float(input()) #Price Today
s = Stock(sCode,sName,priceYesterday,priceToday)
print("Code:",s.getCode())
print("Name:",s.getName())
print("Price/Yesterday:%.2f\nPrice Today:%.2f" % (s.getPriceYesterday(),s.getPriceToday()))
s.setPriceYesterday(50.25)
print("Edit Price/Yesterday To:%.2f" %50.25)
print("Price Change Percentage:%.2f%%" % (s.getChangePercent()*100))
print(Stock.__doc__)
3.定义并实现身体质量指数类
【问题描述】
按图施工,设计下述BMI类,用于计算身体质量指数。该指数等于体重(kg)除以身高(米)的平方。
相应的判定标准如下表所示。
BMI < 18 --> underweight
18 <= BMI < 25 --> ideal
25 <= BMI < 27 --> overweight
27 <= BMI --> obesity
BMI类接口定义:
class BMI:
...
其中,name为姓名,age为年龄,height为身高,单位为米,weight为体重,单位为kg。
getBMI()函数返应计算所得的身体质量指数;
getStatus()返回评价结果,其值应为underweight/ideal/overweight/obesity之一。
【输入形式】
【输出形式】
【样例输入】
Alex
27
1.75
68
【样例输出】
Name: Alex
Age: 27
BMI = 22.204
Result = ideal
代码:
class BMI:
def __init__(self,sName,iAge,fHeight,fWeight):
self.name=sName
self.age=iAge
self.height=float(fHeight)
self.weight=float(fWeight)
def getBMI(self):
return self.weight/self.height**2
def getStatus(self):
if self.weight/self.height**2 < 18:
return 'underweight'
elif 18 <= self.weight/self.height**2 < 25:
return 'ideal'
elif 25 <= self.weight/self.height**2 < 27:
return 'overweight'
else:
return 'obesity'
sName = input()
iAge = int(input())
fHeight = eval(input()) #in meter
fWeight = eval(input()) #in kg
bmi=BMI(sName,iAge,fHeight,fWeight)
print("Name:",bmi.name)
print("Age:",bmi.age)
print("BMI = %.3f" % bmi.getBMI())
print("Result =",bmi.getStatus())
4.题库:创建Person类及其对象
【问题描述】
创建Person类,包含count属性和show方法;创建Person类对象p1,调用p1的show方法完成输出;
【输入形式】
输入变量name;
【输出形式】
输出方法执行结果;
【样例输入】
zhangsan
【样例输出】
0
zhangsan test!!!
代码:
#创建Person类
class Person:
count = 0
def show(self, name):
self.name = name
print(self.name,"test!!!")
p1 = Person()
#输入name变量
name=input()
print(p1.count)
#调用show方法完成输出
p1.show(name)
5.题库:模拟简单加减计算器
【问题描述】定义名为Number的类,其中有两个整型数据成员__n1和__n2。编写__init__方法,外部接收n1和n2,再为该类定义加(addition)、减(subtration)等成员方法,分别对两个成员变量执行加、减的运算。创建Number类的对象,调用各个方法,并显示计算结果。
【输入形式】以逗号分割输入两个数及运算符;
【输出形式】运算符add表示加,sub表示减,其他的运算符输出字符串"error!"。
【样例输入】1,2,add
【样例输出】1+2=3
【样例说明】输入1和2两个整数数,实现相加
代码:
class Number():
def __init__(self, n1, n2):
self.__n1 = n1
self.__n2 = n2
def addition(self):
m1 = self.__n1 + self.__n2
print('%d+%d=%d' % (self.__n1,self.__n2,m1))
def subtration(self):
m2 = self.__n1 - self.__n2
print("%d-%d=%d"%(self.__n1,self.__n2,m2))
n1, n2, op = input().split(",")
mm = Number(int(n1), int(n2))
if op == 'add':
mm.addition()
elif op == 'sub':
mm.subtration()
else:
print("error!")
6.题库:身份证信息提取和掩码输出
【问题描述】
小常识:身份证号码18位数字,按从左到右数1-6位表示出生地编码,7-10位出生年份,11、12位出生月份,13、14位出生日期,15、16位出生顺序编号,17位性别标号,18位效验码。其中的字母X是用来代替数字“10”。输入一个身份证号码,提取出生年月日,并用*代替出生年月日输出。
【样例输入】
510212200010150315
【样例输出】
2000-10-15
510212********0315
代码:
icard = input()
birthday = icard[6:10]+'-'+icard[10:12]+'-'+icard[12:14]
mask = icard[0:6]+'********'+icard[14:]
print(birthday)
print(mask)
7.题库:字符串位置查询(此题重复,可跳过)
【问题描述】补充完整函数strrindex(s,t),其功能用于返回字符串t在字符串s中最右边出现的位置.该位置从0开始计数,如果s中不含有t,那么返回-1;在你编写的程序中,使用strrindex(s,t)函数,输入t,s,输出t在s最右边的位置.
【输入形式】控制台分行输入字符串s,t.
【输出形式】控制台输出一个整数,是t在s最右边出现的位置.
【样例输入】The strdup() function new returns a pointer to a new string
new
【样例输出】49
【样例说明】输入的第一行为字符串s,第二行为字符串t="new".t在s中出现过两次,其中在最右边出现的位置中"new"的第一个字符“n”;在s中所在的位置为49.
代码:
def strrindex(s,t):
pos = 0
pos1 = -1
while True:
pos = s.find(t,pos)
if pos == -1:
break
else:
pos1 = pos
pos = pos + len(t)
return pos1
if __name__ == "__main__":
s=input()
t=input()
print(strrindex(s,t))
8.题库:换位思考
【问题描述】
对字符串由数字和 “*”星型字符两种字符无序构成的stra,,现在想把所有的星型字符挪到数组的左边,数字字符全部放到右边,数字字符之间的相互顺序不变。补充程序中所缺代码,完成上述功能。
【输入形式】
输入一个有数字和星号构成的字符串
【输出形式】
换位后的字符串
【样例输入】
12*23**567
【样例输出】
***1223567
代码:
def main():
stra = input()
lista= list(stra)
print(''.join(replace_stars(lista)))
def replace_stars(str_list): # 将所有*号移动到数组的左侧
j = len(str_list) - 1
for i in range(j, -1, -1):
if str_list[i] != '*':
str_list[i],str_list[j]=str_list[j],str_list[i]
j -= 1
return str_list
main()
9.题库:最长公共子串
【问题描述】
最长公共子串,题目描述:a b两个字符串,求a b的最长公共子串长度,输出最长公共子串长度。子串与子序列不同,子串必须是连续的,而子序列可以不连续。
【输入形式】
分两行输入两个字符串
【输出形式】
一行输出长度
【样例输入】
abcccabccsccs
abcabcabccs
【样例输出】
6
代码:
a = input()
b = input()
la = len(a)
lb = len(b)
#建立二维列表,行数la+1,列数lb+1,初值为0
# res = [[0]*(lb+2)]*(la+2) 这种尽量不要用
res = [[0 for i in range(lb+2)]for j in range(la+2)]
lc = []
mmax = 0
for i in range(1,la+1):
for j in range(1,lb+1):
if a[i-1] == b[j-1]:
res[i][j] = res[i-1][j-1] + 1
if(res[i][j]>mmax): #括号可以去掉
mmax = res[i][j]
print(mmax)
10.题库:大写字母转小写
【问题描述】
完成填空,程序功能是把输入的字符串的大写字母变成小写字母,小写字母变成大写字母,非字母的字符不作变换。输出变换后的结果。
【输入形式】
字符串,包含字母和非字母字符。
【输出形式】
字符串,字母的大小写已经发生变换。
【样例输入】
abcABC
【样例输出】
ABCabc
代码:
line = input()
for s in line:
if s.isalpha():
if s.islower():
print(s.upper(),end='')
else:
print(s.lower(), end='')
else:
print(s,end='')
11.题库:取出字符串中第一个没有重复的字符
【问题描述】
给定一个字符串,取出第一个没有重复的字符,如果输入为空则输出"None"。
【输入形式】
从标准输入得到一串字符串,可以为空
【输出形式】
第一个没有重复的字符,如果输入为空则输出"None"
【样例输入】
helloworldhahaha!
【样例输出】
e
【样例说明】
e和w都没有重复,但是e是第一个出现的,所以输出e
代码:
a = str(input())
for x in a:
if a.count(x)==1:
print(x)
break
else:
print('None')
12.题库:解密码
【问题描述】
有一行电文,已按下面规律译成密码:
A--Z a--z
B--Y b--y
C--X c--x
......
即第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字母; 非字母字符不变。编写程序把密码译回原文,并输出密码和原文。
【输入形式】
输入一串密码
【输出形式】
首先输出密码,然后换行后输出原文
【样例输入】
4sdf&13TBD
【样例输出】
4sdf&13TBD
4hwu&13GYW
代码:
a = input()
print(a)
for x in a:
if x.isalpha():
if x.islower():
x=chr(25-ord(x)+ord('a')*2)
print(x,end='')
else:
x=chr(25-ord(x)+ord('A')*2)
print(x,end='')
else:
print(x,end='')
13.题库:“变位词”判断
【问题描述】
所谓“变位词”是指两个词之间存在组成字母的重新排列关系。如:heart和earth,python和typhon,1234与2134。
编程实现对输入的两个字符串判断是否为“变位词”,是输出True,不是输出False。
【输入形式】
输入两个字符串,一行一个字符串
【输出形式】
输出逻辑True或False
【样例输入】
heart
earth
【样例输出】
True
【样例说明】
11234与2134不是“变位词”
代码:
a = input()
b = input()
if len(a)==len(b):
for x in a:
if a.count(x)!=b.count(x):
print('False')
break
else:
print('True')
else:
print('False')
14.题库:身份证验证
【问题描述】
一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。中国居民身份证校验码算法如下:
将身份证号码前面的17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
将这17位数字和系数相乘的结果相加。用加出来和除以11,取余数。
余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字, 其分别对应的最后一位身份证的号码为1-0-X-9-8-7-6-5-4-3-2。余数和校验码的对应关系可以用公式:m=(12-n) mod 11计算,其中mod为求余运算,m为校验码,n为之前计算出来的余数。如果之前计算出的余数是3,第18位的校验码就是9。如果余数是2那么对应的校验码就是X,X实际是罗马数字10。
编写程序,判断一个身份证的最后一位校验码是否正确,这里并不检验前17位是否合理。
【输入形式】
一个18位身份证号
【输出形式】
不是18位,输出:Error;校验码正确,输出:Correct;校验码错误,输出:Wrong
【样例输入】
53010219200508011X
【样例输出】
Correct
【样例说明】
身份证号码为53010219200508011X, 我们看看这个身份证是不是合法的身份证。首先我们得出前17位的乘积和【(57)+(39)+(010)+(15)+(08)+(24)+(12)+(91)+(26)+(03)+(07)+(59)+(010)+(85)+(08)+(14)+(1*2)】是189,然后用189除以11得出的结果是189/11=17----2,也就是说其余数是2。最后通过对应规则就可以知道余数2对应的检验码是X。所以,可以判定这是一个正确的身份证号码。
代码:
a = input()
xi = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
n = [1,0,'X',9,8,7,6,5,4,3,2]
c = 0
if len(a)==18:
for x in range(len(a)-1):
b = int(a[x])*xi[x]
c += b
d = c%11
m = n[d]
if a[-1]==str(m):
print('Correct')
else:
print('Wrong')
else:
print('Error')
15.题库 :字符串中的最长数字子串
【问题描述】
本题目要求读入一个字符串,输出字符串的最长数字子串。
【输入形式】
输入一个字符串
【输出形式】
输出最长数字子串,若有多个最长数字子串输出最后一个,若字符串无数字字符,则输出“No digits”。
【输入样例】
sdffsd123werrer456fgdgdg1dfgdf12
【样例输出】
456
代码:
a = input()
n = 0
b = []
c = []
def m(a):
import re
return bool(re.search(r'\d',a))
if m(a) == True:
for x in range(len(a)):
if a[x].isnumeric():
b.append(a[x])
d = b.copy()
c.append(d)
if len(b)>n:
n = len(b)
else:
b.clear()
c.sort(key=len)
print(''.join(c[-1]))
else:
print('No digits')
16.题库:密码强度
【问题描述】
编写程序,对输入的密码(长度不超过28)进行强度检测。密码强度规定为:
1) 含有数字字符;
2) 含有小写字母;
3)含有大写字母;
4)密码长度不低于8;
5)至少含有~!@#$%^&*()_=-/,.?<>;:[]{}|\中的一个字符
规定密码满足上列任意条件即加一星,程序输出密码的星级
【输入形式】
长度在28以内的任意字符串。
【输出形式】
根据密码强度要求,输出密码强度星级,用整数表示
【样例输入】
123.aq.Aw!
【样例输出】
5
代码:
str1 = input()
a = 0
b = '~!@#$%^&*()_=-/,.?<>;:[]{}|\\'
if any(chr.isdigit() for chr in str1)==True:
a += 1
if any(chr.islower() for chr in str1)==True:
a += 1
if any(chr.isupper() for chr in str1)==True:
a += 1
if len(str1)>=8:
a += 1
for x in str1:
if x in b:
a += 1
break
print(a)
17.题库:删除子串
【问题描述】
编写一个程序,当在一个字符串中出现指定子串时就删除它。
【输入形式】
用户在第一行输入一个字符串,用户在第二行输入一个子串。
【输出形式】
程序在下一行输出删除其中所有子串后的字符串。如果字符串不包含子串则输出原字符串本身。
【样例输入】
I am a boy!
a
【样例输出】
I m boy!
【样例说明】用户首先输入字符串I am a boy!,然后输出子串a,程序会寻找字符串中的子串删除它,最后 将删除后的结果输出:I#m##boy! #表示空格。
代码:
a = input()
b = input()
print(a.replace(b,''))
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj