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