近期通过廖雪峰Python教程了解了python,把练习过程记录下来。以下的题目除了《图书管理》,其他都是在网上搜的,参考链接。因为之前基本用C语言,对于python的命名规范,以及编程习惯还不是很熟,目前只是实现功能。
1. 编写一个程序,以球体的半径(浮点数)作为输入,输出球体的直径、圆周长、表面积、体积。
pi = 3.14
class Cball:
def __init__(self, r):
self.r = r
def diameter(self):
return (self.r * 2)
def perimeter(self):
return (2 * pi * self.r)
def surface_area(self):
return (4 * pi * (self.r ** 2))
def volume(self):
return ((4 / 3) * pi * pow(self.r, 3))
def Getball():
r = float(input("请输入球体半径:"))
ball = Cball(r)
try:
if r <= 0:
print("输入的球体半径不能小于0!")
else:
print("球体的直径是:%.3f" % ball.diameter())
print("球体的圆周长是:%.3f" % ball.perimeter())
print("球体的表面积是:%.3f" % ball.surface_area())
print("球体的体积是:%.3f" % ball.volume())
except ValueError:
print("输入错误,请输入数字!")
2. 一个雇员一周的总薪水,等于其每小时的时薪,乘以其一周工作的正常小时数,再加上加班费。加班费等于总的加班时间,乘以每小时薪水的1.5倍。编写一个程序,以每小时的薪水,常规工作时间,加班工作时间作为参数,显示一个雇员的总周薪。
def salary():
while True:
try:
hours = int(input("正常工作时间:"))
extrahours = int(input("加班工作时间:"))
hoursalary = int(input("每小时薪资:"))
if hours < 0 or extrahours < 0 or hoursalary < 0:
print("输入不能小于0!")
else:
break
except ValueError:
print("输入错误!请输入整数!")
print("一周薪资为:%d" % (hours*hoursalary + extrahours*hoursalary*1.5))
3. 编写一个程序,让用户输入文件名并且向终端输出报表,展示在给定的周期应该向每一位雇员支付的工资。这个报表应该是表格的格式,并且具有相应的表头。每一行应该包含雇员的名称、工作的小时数,以及该周期所支付的工资。
from prettytable import PrettyTable
class CSalaryTable():
def __init__(self):
self.name_form = PrettyTable(["雇员名称", "工作小时", "本周工资"])
self.break_flag = True
def tbprint(self):
print(self.name_form)
# 获取用户输入
def add_salary(self):
while self.break_flag == True:
try:
self.add_name = input("请输入雇员名称:")
self.add_time = int(input("请输入工作小时:"))
if self.add_time < 0:
print("工作小时不能少于0小时!")
continue
self.add_Hoursmoney = float(input("请输入时薪:"))
if self.add_Hoursmoney <= 0:
print("工作时薪必须大于0元每小时")
continue
self.add_day_money = self.add_time * self.add_Hoursmoney
self._tb_add_row()
self._confirm()
except ValueError:
print("输入错误,请从新输入!")
# 列表中添加保存用户输入记录
def _tb_add_row(self):
self.name_form.add_row([self.add_name, self.add_time, self.add_day_money])
# 添加结束判断
def _confirm(self):
while self.break_flag == True:
try:
self.add_confrim = input("添加完毕,是否继续添加(Y/N):")
if self.add_confrim.isalpha() == False:
print("请输入字母进行操作!")
elif self.add_confrim.upper() == "Y":
break
elif self.add_confrim.upper() == "N":
self.break_flag = False
break
except ValueError:
print("输入错误,请从新输入!")
def shop_expenses():
my_shop = CSalaryTable()
my_shop.add_salary()
my_shop.tbprint()
4. python中sqlite的简单使用
import sqlite3
def create_tb():
#连接到数据库
#数据库文件是“mytest.db”
#如果数据库不存在的话,将会自动创建一个 数据库
conn = sqlite3.connect("mytest.db")
#创建一个游标 cursor
cursor = conn.cursor()
# 删除 user表
sql = "drop table login"
cursor.execute(sql)
#执行一条语句,创建 user表
sql = "create table login (id INTEGER primary key, name varchar(30), password varchar(30))"
cursor.execute(sql)
# 插入一条记录
sql = "insert into login (id, name, password) values (134, 'love', '520520')"
cursor.execute(sql)
# 插入一条记录
sql = "insert into login (id, name, password) values (456, 'dog', 'passwd')"
cursor.execute(sql)
# 查询:
sql = "select * from login"
cursor.execute(sql)
# 获取查询结果:
values = cursor.fetchall()
for r in values:
print(r)
# 获得table的行数:
sql = "select COUNT(*) from login"
cursor.execute(sql)
print(cursor.fetchone())
# 提交事物
conn.commit()
# 关闭游标:
cursor.close()
# 关闭连接
conn.close()
5. 针对图书馆的简单管理系统
from prettytable import PrettyTable
import sqlite3
import random
MY_LIBRARY_DB = "mytest.db"
def my_library_init():
print("创建图书馆")
conn = sqlite3.connect(MY_LIBRARY_DB)
# 创建一个游标 cursor
cursor = conn.cursor()
try:
# 若表不存在,则创建
create_tb_cmd = "create table if not exists library(ID INT,NAME TEXT,AUTHOR TEXT,STORE INT)"
cursor.execute(create_tb_cmd)
sql = "select count(*) from library"
cursor.execute(sql)
count = (cursor.fetchone())[0]
print("library has %d kind books" % count)
if (count <= 0):
# 初始化表
while True:
id = random.randint(0, 999)
name = input("请输入书名:")
author = input("请输入作者:")
store = int(input("请输入库存:"))
# 注意参数格式
insert_dt_cmd = "insert into library (ID,NAME,AUTHOR,STORE) values (?,?,?,?)"
cursor.execute(insert_dt_cmd, (id, name, author, store))
print("添加成功")
confrim = input("继续添加书籍(Y/N):")
if confrim.upper() == "Y":
continue
elif confrim.upper() == "N":
break
except:
print
"Create table failed"
return False
conn.commit()
# 关闭游标:
cursor.close()
conn.close()
return True
def show_library():
print("图书展示")
book_tb = PrettyTable(["次序", "ID", "书名", "作者", "可借阅数"])
conn = sqlite3.connect(MY_LIBRARY_DB)
# 创建一个游标 cursor
cursor = conn.cursor()
# 查询所有:
sql = "select * from library"
cursor.execute(sql)
# book计数
book_cnt = 0
# 行数计数
row_cnt = 0
# 获取查询结果:
values = cursor.fetchall()
for r in values:
row_cnt += 1
book_cnt += r[3]
# 把行数添加到打印的表中
tb_row = list()
tb_row.append(row_cnt)
# 把元组转为列表
for ele in r:
tb_row.append(ele)
#print(tb_row)
book_tb.add_row(tb_row)
#以表的形式打印更直观
print(book_tb)
# 获得table的行数:
sql = "select count(*) from library"
cursor.execute(sql)
print("library has %d kind books, total %d books" % ((cursor.fetchone())[0], book_cnt))
# 提交事物
conn.commit()
# 关闭游标:
cursor.close()
# 关闭连接
conn.close()
def borrow_book():
print("图书借阅")
conn = sqlite3.connect(MY_LIBRARY_DB)
# 创建一个游标 cursor
cursor = conn.cursor()
name = input("请输入书名:")
# 查询所有:
sql = "select * from library where name=?"
cursor.execute(sql, (name,))
# 获取查询结果:(返回一个列表,列表的元素是一个元组)
values = cursor.fetchall()
# print(values)
if len(values) == 0:
print("%s doesn't exist in library" % name)
else:
left = values[0][3]
if left >= 1:
print("%s has %d left in library" % (name, left))
left -= 1
# 更新表:
sql = "update library set store=? where name=?"
cursor.execute(sql, (left, name))
else:
print("no %s left in library" % name)
# 查询所有:
sql = "select * from library"
cursor.execute(sql)
print("剩余图书")
# 获取查询结果:
values = cursor.fetchall()
for row in values:
print(row)
# 提交事物
conn.commit()
# 关闭游标:
cursor.close()
# 关闭连接
conn.close()
def return_book():
print("图书归还")
conn = sqlite3.connect(MY_LIBRARY_DB)
# 创建一个游标 cursor
cursor = conn.cursor()
name = input("请输入书名:")
# 查询所有:
sql = "select * from library where name=?"
cursor.execute(sql, (name,))
# 获取查询结果:(返回一个列表,列表的元素是一个元组)
values = cursor.fetchall()
if len(values) == 0:
print("%s doesn't exist in library" % name)
else:
left = values[0][3]
print("%s has %d left in library" % (name, left))
left += 1
# 更新表:
sql = "update library set store=? where name=?"
cursor.execute(sql, (left, name))
# 查询所有:
sql = "select * from library"
cursor.execute(sql)
print("剩余图书")
# 获取查询结果:
values = cursor.fetchall()
for row in values:
print(row)
# 提交事物
conn.commit()
# 关闭游标:
cursor.close()
# 关闭连接
conn.close()
def add_book():
print("增加图书")
conn = sqlite3.connect(MY_LIBRARY_DB)
# 创建一个游标 cursor
cursor = conn.cursor()
name = input("请输入书名:")
# 查询所有:
sql = "select * from library where name=?"
cursor.execute(sql, (name,))
# 获取查询结果:(返回一个列表,列表的元素是一个元组)
values = cursor.fetchall()
# print(len(values))
if len(values) == 0:
print('这是一本新书')
while True:
id = random.randint(0, 999)
author = input("请输入作者:")
store = int(input("请输入库存:"))
# 注意参数格式
insert_dt_cmd = "insert into library (ID,NAME,AUTHOR,STORE) values (?,?,?,?)"
cursor.execute(insert_dt_cmd, (id, name, author, store))
print("添加成功")
confrim = input("继续添加书籍(Y/N):")
if confrim.upper() == "Y":
continue
elif confrim.upper() == "N":
break
else:
left = values[0][3]
print("%s has %d left in library" % (name, left))
left += 1
# 更新表:
sql = "update library set store=? where name=?"
cursor.execute(sql, (left, name))
# 查询所有:
sql = "select * from library"
cursor.execute(sql)
print("剩余图书")
# 获取查询结果:
values = cursor.fetchall()
for row in values:
print(row)
# 提交事物
conn.commit()
# 关闭游标:
cursor.close()
# 关闭连接
conn.close()
def my_library():
print("欢迎来到我的图书馆")
opt = int(input("<1:创建图书馆 2:图书展示 3:借书 4:还书 5:新增图书 6:退出> 请选择: "))
while True:
if opt == 1:
my_library_init()
elif opt == 2:
show_library()
elif opt == 3:
borrow_book()
elif opt == 4:
return_book()
elif opt == 5:
add_book()
elif opt == 6:
print("退出图书馆")
break
else:
print("请输入正确数字:1-6")
opt = int(input("<1:创建图书馆 2:图书展示 3:借书 4:还书 5:新增图书 6:退出> 请选择: "))
print("bye~")
针对以上函数的测试
if __name__ == '__main__':
#小球
#Getball()
#薪资
#salary()
#工资表
#shop_expenses()
#sqlite简单使用
#create_tb()
#图书管理
my_library()
以上代码大部分都写了注释,在PyCharm上运行正常,my_library() 运行效果如下:
欢迎来到我的图书馆
<1:创建图书馆 2:图书展示 3:借书 4:还书 5:新增图书 6:退出> 请选择: 2
图书展示
+------+-----+------+---------+----------+
| 次序 | ID | 书名 | 作者 | 可借阅数 |
+------+-----+------+---------+----------+
| 1 | 5 | qwe | qwersdg | 3 |
| 2 | 0 | qwag | dfbs | 4 |
| 3 | 0 | eryg | sfhd | 4 |
| 4 | 828 | mnbv | erty | 5 |
| 5 | 302 | erty | fsdht | 6 |
| 6 | 865 | gfsh | djdsg | 4 |
+------+-----+------+---------+----------+
library has 6 kind books, total 26 books
<1:创建图书馆 2:图书展示 3:借书 4:还书 5:新增图书 6:退出> 请选择:
欢迎大家一起讨论,共同进步!
2020年12月24日