第九、十章作业

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)除以身高(米)的平方。

第九、十章作业_第1张图片

相应的判定标准如下表所示。

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作业记录,python,开发语言)