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,''))