2021.1.13——python初学者一点学习记录

2021.1.13首次写代码——根据目前天数计算星露谷春天种菜的日收益

前言

刚刚开始学习python,之前一点编程基础都没有哈哈,正好最近星露谷玩的比较疯,目标是做出一个星露谷全作物包括酿酒等日均收益的可视化计算器,现在一步一步来就是了,以此做个记录,激励自己学习

目标

2021.1.13
运用python计算出春季作物的日均收益表,并且画图放在excel表里

excel表格

在这里插入图片描述

目前根据wiki做了春天的excel表格,目标是让L行生成每个作物的日均收益,因为作物存在单次收获和可持续收获两种状态,所以要用不一样的公式
单次收获的公式为:(普通品质售价-种子价格)/长成需要时间
可持续收获的公式为:([(28-目前天数)-长成需要的时间]/持续收获需要的时间的取整+1)*普通品质售价-种子价格

代码

#加载相关模块
import os
import xlwings as xw
import numpy as nm
import pandas as pd
import matplotlib.pyplot as plt


app = xw.App(visible=False, add_book=False) 
file_path = 'd:\\python_study\\xinglugu.xlsx' #定义文件路径
workbook = app.books.open(file_path)
wsh1 = workbook.sheets['chun'] #定义需要用的工作表


day = int(input('请输入目前的天数')) #用input交互获得目前的天数,用于后面公式的计算


#公式需要循环获得每个单元格的值,定义各个变量,注意此处用f-string方式格式化变量,否则会报错
i = 2
while wsh1.range(f"B{i}").value is not None: #此处意指判定B列值为空时停止循环,注意判定为空值用None
    Bi = wsh1.range(f"B{i}").value #定义变量
    Ci = wsh1.range(f"C{i}").value
    Fi = wsh1.range(f"F{i}").value
    Gi = wsh1.range(f"G{i}").value
    Hi = wsh1.range(f"H{i}").value
    
    if day + int(Fi) > 28:  #用if语句判定如果目前天数加上作物生长需要天数大于28,则收益为0
        wsh1.range(f"L{i}").value = "0"
    else:
        if Hi == None:   #用if语句判定是否为可持续收获作物
            a = (Ci-Bi)/Fi
        else:
            a = (int(((28-day)-Fi)/Gi+1) *Ci -Bi)/(28-day)
        wsh1.range(f"L{i}").value = a
    i +=1
workbook.save()

df = pd.read_excel(file_path,sheet_name='chun')  #用pandas读取'chun'工作表的数据
figure = plt.figure() #画图
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = df['作物名称'] #以'作物名称'列为x轴
y = df['日均收益'] #以'日均收益'列为x轴
plt.bar(x,y,color = 'black')

#判定当工作表里有图片时删除该图片,否则会导致每次运行程序重新计算添加图片都会多一张,太乱
while wsh1.pictures: 
    wsh1.pictures[0].delete() #翻阅xlwings 手册翻到的代码,这块我搜了半天都没找到怎么执行
wsh1.pictures.add(figure,left = 500,top = 200)

workbook.save()
workbook.close()
app.quit()
  

总结

看半天书不如要自己上手写,才能踩无数的坑发现问题在哪里,这次主要踩的坑是
1.变量名要用f-string格式化,写成wsh1.range(f"L{i}").value而不是wsh1.range(L[i]).value,当时看书想当然就这么写上去了
2.删除excel内的图片要用wsh1.pictures[0].delete(),这个真的找了大半天哈哈

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值