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:退出> 请选择:

欢迎大家一起讨论,共同进步!