【数据结构(Python语言描述)】第一章练习题

1、编写一个程序,以球体的半径(浮点型)作为输入,并并且输出球体的直径、表面积和体积

PI = 3.14
r = float(input("please input a r:")) #输入圆的半径
d = 2 * r
S = 4 * PI * (r**2)
V = 4 * PI * (r**3) / 3
print("球体的直径:",d)
print("球体的表面积:",S)
print("球体的体积:",V)

2.一个雇员一周的总薪水,等于其每个小时的薪水乘以一周正常工作的小时数,再加上加班费。加班费等于总的加班时间乘以每个小时薪水的1.5倍。

编写一个程序,以每小时的薪水、总的常规工作时间和总的加班时间作为参数,并显示一个雇员的总周薪。

 

def weeklyPay(hourlypay,worktime,overtime):
return hourlypay * worktime + 1.5 * hourlypay * overtime
print(weeklyPay(8,40,8))

3.一个标准的科学实验是:抛球并且看它能够弹跳多高。一旦求的“弹跳性”已经确定了,这个比率值就会给出弹跳性的指数。例如,如果球从10米高落下
弹跳到6米高,这个索引就是0.6,并且球在一次弹跳之后总的运动距离是16米。如果球继续弹跳,两次他了之后的距离将会是10米+6米+6米+3.6米=25.6米。
注意,每次后续的弹跳运动的距离,都是到地板的距离加上这个距离的被,这被就是球反弹回来的距离。编写一个程序,让用户输入球的一个初始高度以及允许球持续弹跳的次数。输出应该是球所运动的总距离。
h = float(input("请输入球的初始高度为:"))
n = int(input("请输入允许球持续弹跳次数为:"))
def sum_high(h,n):
if n > 0:
n = n - 1
return 1.6 * h + sum_high(0.6 * h,n)
else:
return 0

sum = sum_high(h,n)

print("球所运动的总高度为%.2f"%sum)
4.德国数学家Gottfrid Leibniz为求取pi的值开发了如下方法:
pi/4=1-1/3+1/5-1/7+...
编写一个程序,让用户指定在这种近似的方法中使用迭代的次数,并且显示最终的结果
n = int(input("请输入迭代的次数:"))
sum = 0
for i in range(n):
sum = sum + float(1/((2*i+1)*((-1)**i)))
print("PI近似值为:",4 * sum)
5、略
6、工资部门将每个支付周期的雇员信息的列表保存到一个文本文件,

        每一行的格式:<last name><hourly wage><hours worked>

        编写一个程序,让用户输出文件名并且最终向终端输出报表。

自行创建一个txt文件,如下图所示:

import xlwt
text=[]
fileName=input("请输入文件名:")
f=open(fileName,'r')
content=f.readlines()
print(content)
for line in content:
line=line.split()
text.append(line)
f.close()
print(len(text))
print(len(text[0]))

workbook =xlwt.Workbook(encoding = 'utf-8') #创建一个工作簿
worksheet =workbook.add_sheet('MySalary') #创建一个工作表
for i in range(len(text)):
for j in range(len(text[0])):
worksheet.write(i, j, text[i][j])
workbook.save('salary.xls')
7、在名为stats.py的模块中定义一些函数:计算列数字的中位数、众数和平均数,以列表为参数,返回一个单个的数字
#中位数
def median(lst):
lst = sorted(lst)
if len(lst) % 2 == 1:
return lst[len(lst) // 2]
else:
return (lst[len(lst) // 2-1] + lst[len(lst) // 2]) / 2.0
lst=[1,2,3]
print("这组数据的中位数为:{}".format(median(lst)))

#众数
'''
一般来说,一组数据中,出现次数最多的数就叫这组数据的众数。
例如:1,2,3,3,4的众数是3。
但是,如果有两个或两个以上个数出现次数都是最多的,那么这几个数都是这组数据的众数。
例如:1,2,2,3,3,4的众数是2和3。
还有,如果所有数据出现的次数都一样,那么这组数据没有众数。
例如:1,2,3,4,5没有众数。
'''
def grade_mode(list):
list_set = set(list) #去重,得到list中不重复的元素
frequency_dict = {}
dict_value = []
grade_mode = []
if len(list) == 0: #如果列表元素的个数为0,这组数据没有众数
return "No mode"
elif len(list) == 1:#如果列表元素的个数为1,众数就是这个数
return list[0]
else:
#列表元素的个数是2个及以上
if(len(set(list)) == 1): #如果列表去重之后,只有一个元素,则这个元素就是这组数据的众数
return list[0]
else:#列表去重之后有2个及以上元素
for i in list_set: # 遍历每一个list_set的元素,得到该元素何其对应的个数list.count(i)
frequency_dict[i] = list.count(i) # 创建dict; new_dict[key]=value
dict_value.append(list.count(i)) #把value添加到一个列表中
if len(set(dict_value)) == 1:#元素出现的次数都存在一个列表dict_value中,去重之后只有一个元素,则没有众数
return "No mode"
else:
for key, value in frequency_dict.items(): # 遍历dict的key and value。key:value
if value == max(frequency_dict.values()):
grade_mode.append(key)
return grade_mode
list = [1,1,1,2,2,2,3,3,3,4]
print("这组数据的众数为:{}".format(grade_mode(list)))

#平均数

def mean(list):
if len(list) == 0:
return "The list is empty!"
else:
mean_num = sum(list) / len(list)
return mean_num

list = [1,2]
print("这组数据的平均数为:{}".format(mean(list)))
8、编写程序,允许用户在文件的文本中导航。程序提示输入一个文件名,并且输出想要放入到列表中的文本 行, 实际行号范围是从1到文件行数,如果用户输入0,程序退出。否则程序输出和该行号相关的行。
fileName = input("请输入文件名:")
addContent = input("请输入增加的内容:")
f = open(fileName,"a+")
f.write("\n"+addContent)
f.seek(0)
content=f.readlines()
print(content)
f.close()
while True:
print("目前文件的行号范围为1~",len(content))
num = int(input("请输入一个行号:"))
if num == 0:
break
else:
print(content[num-1])
num = 0

第9题:将图书馆建模为图书和读者的一个集合,读者在任何给定时间内,最多只能借3本图书。每本图书都有一个等待借阅的读者的列表。每本图书都有一个标题、一个作者、已经借阅了它的一名读者的列表,以及等待这本图书还回后再继续借阅读者的列表。编写Book和Patron类来建模这些对象。

首先考虑每个类的接口或方法,然后为对象的状态选择适当的数据结构。此外,还要编写一个简短的脚本来测试这些类。

第10题:编写一个Library 类,它能管理第9题中的图书和读者,应该包括添加、删除和查找图书和读者的方法,还应该有借阅和归还图书的方法。

参考:https://blog.csdn.net/LZH_12345/article/details/79679433后,修改了一些地方

# This Python file uses the following encoding: utf-8
# 定义书籍类,基本信息有书名title和作者anthor
# 借阅者borrower和待借阅者demanders(列表)
class Book(object):
def __init__(self, title='', author=''):
self.title = title
self.author = author

def info(self):
return (self.title, self.author)

def reader(self, borrower='', demanders=[]):
self.borrower = borrower
self.demanders = demanders


# 定义借阅者类,基本信息有姓名name,性别sex,身份证号ID
# 该借阅者借阅的书籍bookName(列表)
class Patron(object):
def __init__(self, name='', sex='', ID='', borrowBooks=[]):
self.name = name
self.sex = sex
self.ID = ID
self.borrowBooks = borrowBooks

def info(self):
return (self.name, self.sex, self.ID, self.borrowBooks)

# flag=1时,代表借书,flag=0时,代表还书
def book(self, borrowBooks=[], title='', flag=1):
# 确保借阅者最多可借3本书
if len(borrowBooks) < 3 or flag == 0:
if flag == 1:
borrowBooks.append(title)
else:
borrowBooks.remove(title)
else:
print("最多可借阅三本图书!")
return borrowBooks


class Library(object):
"""some operation on books and readers"""

# some operation on books
# add book
def addBook(self, books=[], book=Book()):
books.append(book.title)
return books

# delete book
def deleteBook(self, books, book=Book()):
books.remove(book.title)
return books

# find book,and return the index of the book
def findBook(self, books, book=Book()):
return books.index(book.title)

# some operation on readers
# add reader
def addReader(self, readers=[], patron=Patron()):
readers.append(patron.name)
return readers

# delete reader
def deleteReader(self, readers, patron=Patron()):
readers.remove(patron.name)
return readers

# find reader,and return the index of the reader
def findReader(self, readers, patron=Patron()):
return readers.index(patron.name)

# some operation on borrow and return book
# borrow book
def borrowBook(self, patron=Patron(), book=Book()):
beforeBorrowLen = len(patron.borrowBooks)
patron.book(patron.borrowBooks, book.title, 1)
afterBorrowLen = len(patron.borrowBooks)
if beforeBorrowLen < afterBorrowLen:
books.remove(book.title)
return books, patron.borrowBooks

# return book
def returnBook(self, patron=Patron(), book=Book()):
books.append(book.title)
patron.book(patron.borrowBooks, book.title, 0)
return books, patron.borrowBooks


# 测试
if __name__ == "__main__":
library = Library() # 创建Library类
books = [] # 在图书馆的书
readers = [] # 图书馆读者列表
# 创建了4个Book类实例(4本书)
book1 = Book("Gone with the Wind", "Margaret Mitchell")
book2 = Book("Pride and Prejudice", "Jane Austen")
book3 = Book("Oliver Twist", "Charles Dickens")
book4 = Book("The Little Prince", "Antoine de Saint-Exupéry")
# 创建了5个Patron类实例(5个借阅者)
patron1 = Patron("Jack", "man", "121")
patron2 = Patron("Bob", "man", "122")
patron3 = Patron("Tim", "man", "123")
patron4 = Patron("Ann", "woman", "124")
patron5 = Patron("Jane", "woman", "125")

# 图书的相关操作展示
# 向books添加这些书
library.addBook(books, book1)
library.addBook(books, book2)
library.addBook(books, book3)
library.addBook(books, book4)
# print("添加图书后:{}".format(books))
# # 此时,结果:['Gone with the Wind','Pride and Prejudice','Oliver Twist','The Little Prince']
# library.deleteBook(books, book3)
# print("删除图书3后:{}".format(books))
# # 此时,结果:['Gone with the Wind', 'Pride and Prejudice', 'The Little Prince']
# result = library.findBook(books, book2)
# print("找到图书2的位置:{}".format(result))
# # 此时,结果:1

# 读者的相关操作展示
# 向readers添加这些借阅者
library.addReader(readers, patron1)
library.addReader(readers, patron2)
library.addReader(readers, patron3)
library.addReader(readers, patron4)
library.addReader(readers, patron5)
# print("添加读者后:{}".format(readers))
# # 此时,结果:['Jack', 'Bob', 'Tim', 'Ann', 'Jane']
# library.deleteReader(readers, patron2)
# print("删除读者后:{}".format(readers))
# # 此时,结果:['Jack', 'Tim', 'Ann', 'Jane']
# result = library.findReader(readers, patron4)
# print("找到读者4的位置:{}".format(result))
# # 此时,结果:2


# 借阅图书和归还图书的操作
# 借阅图书操作
library.borrowBook(patron1, book1)
library.borrowBook(patron1, book2)
# 此时,结果:books= ['The Little Prince']
# patron1.borrowBooks=['Gone with the Wind', 'Pride and Prejudice']
# 验证一下,一个借阅者最多可借3本书
# library.addBook(books, book3)
library.borrowBook(patron1, book3)
# 当下面一句执行时,会打印最多可借3本书
library.borrowBook(patron1, book4)


# 归还图书操作
library.returnBook(patron1, book1)
# 此时,结果:books=['Gone with the Wind']
# patron1.borrowBooks= ['Pride and Prejudice', 'Oliver Twist', 'The Little Prince']
posted @ 2020-08-04 11:52  钟胜一  阅读(892)  评论(0编辑  收藏  举报