1.定义并实现Book类及其__del__函数
【问题描述】
图书馆里有很多的书, 请定义一个名为Book的类。该类的属性包括书名(字符串),书号(字符串),单价(浮点数);该类的构造函数接受书名,书号及单价三个参数并参成对象初始化;该类的__del__()函数则向终端打印如下信息:
Book destroyed-书名,书号,单价
注意:单价保留两位小数。
【样例输入】
Python Programming
888-999
43.678
【样例输出】
Book destroyed-Python Programming,888-999,43.68
代码:
classBook:def __init__(self,name,no,price):self.sName=nameself.sNo=noself.fPrice=pricedef __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
代码:
classStock:'Stock Information Class'def __init__(self,sCode,sName,priceYesterday,priceToday):self.Code=sCodeself.Name=sNameself.priceYesterday=priceYesterdayself.priceToday=priceTodaydef getCode(self):return self.Codedef getName(self):return self.Namedef getPriceYesterday(self):return self.priceYesterdaydef getPriceToday(self):return self.priceTodaydef setPriceYesterday(self,price):self.priceYesterday=pricedef getChangePercent(self):return (self.priceToday-self.priceYesterday)/self.priceYesterdaysCode=input()#StockCodesName=input()#StockNamepriceYesterday=float(input())#Price/YesterdaypriceToday=float(input())#PriceTodays=Stock(sCode,sName,priceYesterday,priceToday)print("Code:",s.getCode())print("Name:",s.getName())print("Price/Yesterday:%.2f\nPriceToday:%.2f"%(s.getPriceYesterday(),s.getPriceToday()))s.setPriceYesterday(50.25)print("EditPrice/YesterdayTo:%.2f"%50.25)print("PriceChangePercentage:%.2f%%"%(s.getChangePercent()*100))print(Stock.__doc__)
3.定义并实现身体质量指数类
【问题描述】
按图施工,设计下述BMI类,用于计算身体质量指数。该指数等于体重(kg)除以身高(米)的平方。
相应的判定标准如下表所示。
BMI underweight
18 <= BMI ideal
25 <= BMI overweight
27 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=sNameself.age=iAgeself.height=float(fHeight)self.weight=float(fWeight)def getBMI(self):return self.weight/self.height**2def 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())#inmeterfWeight=eval(input())#inkgbmi=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=0defshow(self,name):self.name=nameprint(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两个整数数,实现相加
代码:
classNumber():def__init__(self,n1,n2):self.__n1=n1self.__n2=n2defaddition(self):m1=self.__n1+self.__n2print('%d+%d=%d'%(self.__n1,self.__n2,m1))defsubtration(self):m2=self.__n1-self.__n2print("%d-%d=%d"%(self.__n1,self.__n2,m2))n1,n2,op=input().split(",")mm=Number(int(n1),int(n2))ifop=='add':mm.addition()elifop=='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.
代码:
defstrrindex(s,t):pos=0pos1=-1whileTrue:pos=s.find(t,pos)ifpos==-1:breakelse:pos1=pospos=pos+len(t)return pos1if__name__=="__main__":s=input()t=input()print(strrindex(s,t))
8.题库:换位思考
【问题描述】
对字符串由数字和 “*”星型字符两种字符无序构成的stra,,现在想把所有的星型字符挪到数组的左边,数字字符全部放到右边,数字字符之间的相互顺序不变。补充程序中所缺代码,完成上述功能。
【输入形式】
输入一个有数字和星号构成的字符串
【输出形式】
换位后的字符串
【样例输入】
12*23**567
【样例输出】
***1223567
代码:
defmain():stra=input()lista=list(stra)print(''.join(replace_stars(lista)))defreplace_stars(str_list):#将所有*号移动到数组的左侧j=len(str_list) - 1for i in range(j, -1, -1):ifstr_list[i]!='*':str_list[i],str_list[j]=str_list[j],str_list[i]j-=1returnstr_listmain()
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=0foriinrange(1,la+1):forjinrange(1,lb+1):ifa[i-1]==b[j-1]:res[i][j]=res[i-1][j-1]+1if(res[i][j]>mmax):#括号可以去掉mmax=res[i][j]print(mmax)
10.题库:大写字母转小写
【问题描述】
完成填空,程序功能是把输入的字符串的大写字母变成小写字母,小写字母变成大写字母,非字母的字符不作变换。输出变换后的结果。
【输入形式】
字符串,包含字母和非字母字符。
【输出形式】
字符串,字母的大小写已经发生变换。
【样例输入】
abcABC
【样例输出】
ABCabc
代码:
line=input()forsinline:ifs.isalpha():ifs.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)breakelse: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')breakelse: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 = 0if len(a)==18:for x in range(len(a)-1):b = int(a[x])*xi[x]c += bd = c%11m = n[d]if a[-1]==str(m):print('Correct')else:print('Wrong')else:print('Error')
15.题库 :字符串中的最长数字子串
【问题描述】
本题目要求读入一个字符串,输出字符串的最长数字子串。
【输入形式】
输入一个字符串
【输出形式】
输出最长数字子串,若有多个最长数字子串输出最后一个,若字符串无数字字符,则输出“No digits”。
【输入样例】
sdffsd123werrer456fgdgdg1dfgdf12
【样例输出】
456
代码:
a = input()n = 0b = []c = []def m(a):import rereturn 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 = 0b = '~!@#$%^&*()_=-/,.?;:[]{}|\\'if any(chr.isdigit() for chr in str1)==True:a += 1if any(chr.islower() for chr in str1)==True:a += 1if any(chr.isupper() for chr in str1)==True:a += 1if len(str1)>=8:a += 1for x in str1:if x in b:a += 1breakprint(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,''))