python数据结构题目_【数据结构(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、工资部门将每个支付周期的雇员信息的列表保存到一个文本文件,

每一行的格式:

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

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

70

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题中的图书和读者,应该包括添加、删除和查找图书和读者的方法,还应该有借阅和归还图书的方法。

# 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']

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值