python基础课项目练习

1. 九九乘法表

for i in range(1,10):
    for j in range(1,i+1):
        print('%d*%d=%d'%(j,i,j*i),end=' ')
        if j==i:
            print()

    2.血量PK小游戏

import time,random
while True:
    player_victory=0
    enermy_victory=0
    for i in range(1,4):
        print('----------现在是第%d局----------'%i)
        time.sleep(2)

        player_life=random.randint(100,150)
        player_attack=random.randint(30,50)
        enermy_life=random.randint(100,150)
        enermy_attack=random.randint(30,50)

        print('【玩家】\n血量:{}\n攻击:{}'.format(player_life,player_attack))
        print('----------------------------------------')
        time.sleep(2)
        print('【敌人】\n血量:{}\n攻击:{}'.format(enermy_life,enermy_attack))
        print('----------------------------------------')
        time.sleep(2)
        while player_life>0 and enermy_life>0:
            player_life=player_life-enermy_attack
            enermy_life=enermy_life-player_attack
            print('【敌人】发起进攻,【玩家】剩余血量{}'.format(player_life))
            time.sleep(1.5)
            print('【玩家】发起进攻,【敌人】剩余血量{}'.format(enermy_life))
            print('---------------------------------------')
            time.sleep(1.5)
        if player_life>0 and enermy_life<0:
            player_victory+=1
            print('恭喜你赢了')
        elif player_life<0 and enermy_life>0:
            enermy_victory+=1
            print('呜呜~~敌人把你打败了')
            time.sleep(2)
        else:
            print('你和敌人同归于尽了')
    if player_victory > enermy_victory :
        time.sleep(2)
        print('\n【最终结果:你赢了!】') 
    elif enermy_victory > player_victory:
        time.sleep(2)
        print('\n【最终结果:你输了!】')
    else:
        time.sleep(2) 
        print('\n【最终结果:平局!】')
    a=input('要继续游戏吗,请输入n退出,输入其他继续:')
    if a=='n':
        break

3.工作量计时器

(面向过程编程)

import math

# 变量key代表循环运行程序的开关
key = 1

# 采集信息的函数
def myinput():
    choice=input('请选择计算类型:(1-工时计算,2-人力计算)')
    if choice=='1':
        size=float(input('请输入项目大小:(1代表标准大小,请输入小数)'))
        number = int(input('请输入人力数量:(请输入整数)'))
        time = None
        return size,number,time  # 这里返回的数据是一个元组
    if choice == '2':
        size = float(input('请输入项目大小:(1代表标准大小,请输入小数)'))
        number = None
        time = float(input('请输入工时数量:(请输入小数)'))
        return size,number,time

# 完成计算的函数
def estimated(my_input):
    size=my_input[0]
    number = my_input[1]
    time = my_input[2]
    # 人力计算
    if (number == None) and (time != None):
        number = math.ceil(size * 80 / time)
        print('项目大小为%.1f个标准项目,如果需要在%.1f个工时完成,则需要人力数量为:%d人' %(size,time,number)) 
    # 工时计算
    elif (number != None) and (time == None):
        time = size * 80 / number
        print('项目大小为%.1f个标准项目,使用%d个人力完成,则需要工时数量为:%.1f个' %(size,number,time)) 

# 询问是否继续的函数
def again():
    # 声明全局变量key,以便修改该变量
    global key
    a = input('是否继续计算?继续请输入y,输入其他键将结束程序。')
    if a != 'y':
        # 如果用户不输入'y',则把key赋值为0
        key = 0  

#主函数
def main():
    print('欢迎使用工作量计算小程序!')
    while key==1:
        my_input=myinput()
        estimated(my_input)
        again()
    print('感谢使用工作量计算小程序!')

#调用主函数启动整个程序
main()

(面向对象编程)

import math

class Project:
    def __init__(self):
        self.key=1
    def input(self):
        choice=input('请选择计算类型:(1-工时计算,2-人力计算)')
        if choice=='1':
            self.size=float(input('请输入项目大小:(1代表标准大小, 请输入小数)'))
            self.number=int(input('请输入人力数量:(请输入整数)'))
            self.time=None
        if choice=='2':
            self.size=float(input('请输入项目大小:(1代表标准大小, 请输入小数)'))
            self.number=None
            self.time=float(input('请输入工时数量:(请输入小数)'))
    def estimated(self):
        #人力计算
        if (self.number==None)and(self.time!=None):
            self.number=math.ceil(self.size*80/self.time)
            print('项目大小为%.1f个标准项目,需要在%.1f个工时完成,则需要人力数量为:%d人'%(self.size,self.time,self.number))
        #工时计算
        if (self.number!=None)and(self.time==None):
            self.time=self.size*80/self.number
            print('项目大小为%.1f个标准项目,使用%d个人力完成, 则需要工时数量为:%.1f个'%(self.size,self.number,self.time))
    def again(self):
        a=input('是否继续计算?继续请输入y,输入其它将结束程序:')
        if a!='y':
            self.key=0
    def main(self):
        print('欢迎使用工作量计算小程序!')
        while self.key==1:
            self.input()
            self.estimated()
            self.again()
        print('感谢使用工作量计算小程序!')

project1=Project()
project1.main()

可以发现,在此例中,用类编写一个直观的好处就是参数的传递会比普通函数要省事很多,不用重复传递参数,方便数据在各方法之中流转。也不必考虑全局变量和局部变量,因为类中的方法可以直接调用类中的属性。

4.流浪图书馆(图书管理系统小程序)

思路:我们的处理对象是每本具体的书,而每本书都有自己的属性信息,所以我们可以定义一个Book类,利用Book类创建一个个书的实例,绑定属性。(类的第一种用法:类作为实例对象的模板)。而这个管理系统的运行主体,是多个可供选择的功能的叠加,所以我们可以创建一个系统运行类BookManager,将查询书籍、添加书籍等功能封装成类中的方法以供调用(类的第二种用法:类作为函数包)

class Book:
    def __init__(self,name,author,comment,state=0):
        self.name=name
        self.author=author
        self.comment=comment
        self.state=state
    def __str__(self):
        if self.state==0:
            status='未借出'
        else:
            status='已借出'
        return '名称:《%s》 作者:%s 推荐语:%s\n状态:%s\n'%(self.name,self.author,self.comment,status)

class BookManager:
    books=[]
    def __init__(self):
        book1=Book('惶然录','费尔南多·佩索阿','一个迷失方向且濒于崩溃的灵魂的自我启示,一首对默默无闻、失败、智慧、困难和沉默的赞美诗。')
        book2=Book('以箭为翅','简媜','调和空灵文风与禅宗境界,刻画人间之缘起缘灭。像一条柔韧的绳子,情这个字,不知勒痛多少人的心肉。')
        book3=Book('心是孤独的猎手','卡森·麦卡勒斯','我们渴望倾诉,却从未倾听。女孩、黑人、哑巴、醉鬼、鳏夫的孤独形态各异,却从未退场。',1)
        self.books=[book1,book2,book3]   

    def menu(self):
        print('欢迎使用流浪图书管理系统,每本沉默的好书都是一座流浪的岛屿,希望你有缘发现并着陆,为精神家园找到一片栖息地。\n')
        while True:
            print('1.查询所有书籍\n2.添加书籍\n3.借阅书籍\n4.归还书籍\n5.退出系统\n')
            choice=int(input('请输入数字选择对应的功能:'))
            if choice==1:
                self.show_all_book()
            elif choice==2:
                self.add_book()
            elif choice==3:
                self.lend_book()
            elif choice==4:
                self.return_book()
            elif choice==5:
                print('感谢使用!愿你我成为爱书之人,在茫茫书海里相遇。')
                break
    #1.查询所有书籍
    def show_all_book(self):
        for book in self.books:
            print(book)
    #2.添加书籍
    def add_book(self):
        new_name=input('请输入书籍名称:')
        new_author=input('请输入作者名称:')
        new_comment=input('请输入书籍推荐语:')
        new_book=Book(new_name,new_author,new_comment)
        self.books.append(new_book)
        print('书籍录入成功!\n')
    
    def check_book(self,name):
        for book in self.books:
            if book.name==name:
                return book
            else:
                return None    
    #3.借阅书籍                
    def lend_book(self):
        name=input('请输入书籍的名称:')
        res=self.check_book(name)
        if res!=None:
            if res.state==1:
                print('你来晚了一步,这本书已经被借走了噢')
            else:
                print('借阅成功,借了不看会变胖噢~')
                res.state==1
        else:
            print('这本书暂时没有收录在系统里呢')
    #4.归还书籍
    def return_book(self):
        name=input('请输入归还的书籍名称:')
        res=self.check_book(name)
        if res==None:
            print('没有这本书噢,你恐怕输错了书名~')
        else:
            if res.state==0:
                print('这本书没有被借走,在等待有缘人的垂青呢!')
            else:
                print('归还成功!')
                res.state=0

manager = BookManager()
manager.menu()

5.楼盘信息统计(房地产)

import csv
with open('assets.csv','a',newline='',encoding='utf-8') as f:
    writer=csv.writer(f)
    header=['小区名称','地址', '建筑时间','楼栋', '单元',  '门牌', '朝向', '面积']
    writer.writerow(header)
title=input('请输入小区名称:')
address=input('请输入小区地址:')
year=input('请输入小区建筑年份:')
block=input('请输入楼栋号:')
unit_number=input('请输入单元号:')
start_floor=input('请输入起始楼层:')
end_floor=input('请输入终止楼层:')

start_floor_rooms={}
floor_last_number=[]
all_floor_rooms={}

unit_loop=True
while unit_loop:
    #通过循环,收集“首层”楼所有户室信息
    while True:
        print('接下来请输入楼层户室信息')
        last_number=input('请输入楼层户室尾号(比如01,02):')
        room_number=start_floor+last_number
        direction=input('请输入%s室的朝向(南北朝向输入1, 东西朝向输入2):'%room_number)
        area=input('请输入%s室的面积:'%room_number)
        start_floor_rooms[int(room_number)]=[direction,area]
        floor_last_number.append(last_number)
        answer1=input('是否要继续输入户室尾号,退出按n,按任意键继续:')
        if answer1=='n':
            break
    #通过循环,获取所有楼层户室的信息
    all_floor_rooms[int(start_floor)]=start_floor_rooms
    for floor in range (int(start_floor)+1,int(end_floor)+1):
        floor_rooms = {}
        for i in range(len(start_floor_rooms)):
            new_room_number=str(floor)+floor_last_number[i]
            info=start_floor_rooms[int(start_floor+floor_last_number[i])]
            floor_rooms[int(new_room_number)]=info    
        all_floor_rooms[floor]=floor_rooms
    #把all_floor_rooms里整个单元户室信息都写入文档里
    with open('assets.csv','a',newline='',encoding='utf-8') as f:
        writer=csv.writer(f)
        for sub_dict in all_floor_rooms.values():
            for room,info in sub_dict.items():
                dir=['','南北','东西']
                writer.writerow([title,address,year,block,unit_number,room,dir[int(info[0])],info[1]])
    answer2=input('是否要继续输入本栋的其它单元信息, 否按 n 退出,是按任意键继')
    if answer2=='n':
        unit_loop=False
    else:
        unit_loop=True
print('恭喜你,资产录入工作完成!')

6.自制动态二维码 (myqr模块)

from MyQR import myqr
#调用run函数, 通过设置函数里的参数, 实现自己想要的二维码  myqr.run()
myqr.run('https://www.pypypy.cn/app#/app-center',colorized=True,picture='image.2jpg.jpg')

7.

7.1 openpyxl 、styles 、os 模块的应用

​

import os
from openpyxl import load_workbook,Workbook
from openpyxl.styles import Alignment
#新建工作簿和添加表头表名
header=['user_account','refrence_no','shipping_method_name_cn','consignee_country_code','subtotal','warehouse_sku1','warehouse_product_title1','qty1','unit_price1','currency']
sheet_names=['低利润订单(5%-10%)','低利润订单(10%-15%)','负利润(5%以内)']
new_wb=Workbook()
sh_names=new_wb.sheetnames
sh=new_wb[sh_names[0]]
sh.title='低利润订单(5%-10%)'
sh.append(header)
new_wb.create_sheet(title='低利润订单(10%-15%)',index=1).append(header)
new_wb.create_sheet(title='负利润(5%以内)',index=2).append(header)

    
#注意:这里的path路径要根据处理文件位置进行修改
path='D:/每3天导出低负利润订单/wish/'
files_name=os.listdir(path)
for file in files_name:
    file_path=path+file
    wb=load_workbook(file_path)
    for sheetname in sheet_names:
        max_row=wb[sheetname].max_row
        for col_cell in wb[sheetname]['A']:
            if col_cell.value==None:
                max_row=max_row-1
            last_row=max_row
        for row in wb[sheetname].iter_rows(min_row=2,max_row=last_row,max_col=11,values_only=True):
            new_wb[sheetname].append(row)
                
#为新工作簿里每一个工作表设置统一的列宽和对齐方式    
column=['A','B','C','D','E','F','G','H','I','J'] 
align=Alignment(horizontal='center',vertical='center')
for sheetname in sheet_names:
    for i in column:
        new_wb[sheetname].column_dimensions[i].width=25
    for i in new_wb[sheetname].iter_rows(max_row=new_wb[sheetname].max_row):
        for cell in i:
            cell.alignment=align
#保存新建的工作簿        
new_wb.save('C:/Users/Administrator/Desktop/wish6月份低利润&负利润订单.xlsx')

7.2  利用openpyxl 里的LineChart类 Reference类批量给excel表绘图

import os
from openpyxl import load_workbook
from openpyxl.chart import LineChart,Reference

path='C:\\Users\\Administrator\\Desktop\\test\\部门表\\'
file_list=os.listdir(path)
for file in file_list:
    print('现在处理'+file)
    file_path=path+file
    wb=load_workbook(file_path)
    ws=wb.active
    chart=LineChart()
    data=Reference(worksheet=ws,min_row=3,max_row=9,min_col=1, max_col=5)
    chart.add_data(data,from_rows=True,titles_from_data=True) 
    #from_rows=True 表示按行绘图,titles_from_data=True 表示被引用的数据首列会作为图例,不作为数据
    ws.add_chart(chart,'c12')
    cats=Reference(worksheet=ws,min_row=2,max_row=2,min_col=2,max_col=5)
    chart.set_categories(cats) 
    #设置类坐标轴的标签, 如图中的第一季度,第二季度
    chart.x_axis.title='季度'
    chart.y_axis.title='利润'

    chart.style=10 
    #设置图的样式, 值为1-48, 包括1和48
    wb.save(file_path)

 

8. python在PPT Word 中的应用


https://docs.forchange.cn/docs/jTQqpwJt6KJ8pxrw 《Python 操控 Word(自动化办公入门技巧)》

https://docs.forchange.cn/docs/o8nKfyGrancHhwsk 《OA课外拓展相关链接》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值