- 帖子
- 5
- 精华
- 0
- 积分
- 31
- 阅读权限
- 10
- 注册时间
- 2017-9-1
- 最后登录
- 2017-9-12
|
情况:
首先非常感谢corssin 先生的免费教程,暑假有幸接触到Python,于是想在开学练练手,在参考了github一些代码和Google一些模块的功能后,打算自己写一个关于GPA计算器的程序。
github gpa代码地址为 https://github.com/JasonQSY/JI-GPACal/blob/master/gpacal.py
参考的Python模块操作网址为 http://www.cnblogs.com/lhj588/archive/2012/01/06/2314181.html
想法:通过访问一定格式的xlsx文件后(就是将某些数据固定在某一行,不再通过关键字去索引得到具体的值,具体可参考我写的‘’绩点‘’这一行),获取Excel文件数据,再获取工作表(table)数据,通过所给的学号(id)检索(search)到某一行,之后进行在某一行的数据计算,然后进行学分绩计算,比如将B2的绩点乘B3,再将绩点累加到一个数中,最后得到这个人的学分绩,原本还想将数据那一行Excel的最末尾,命名为学分绩,无奈能力有限,就打算将数据以追加的方式写到文件中。
源代码:
#-*-coding:utf-8-*-
import xlrd as xls
#load your xlsx file
def open_excel(file='grade.xlsx'):
try:
data=xls.open_workbook(file)
return data
except:
print 'Please check your file name agian.'
#locate targeted table
def locate_table():
data = open_excel()
table1 = data.sheets()[0]
return table1
#search someone's row
def search(id):
table=locate_table()
for i in range(2,table.nrows()):
if int(table.cell(i,0))==id:
return i
else:
print 'can\'t find targeted object'
#calculate by sheet's character
def cal_someone():
table=locate_table()
row=search(id)
point=0
credit=0
for j in range(1,table.ncols):
thispoint=table.cell(row,1)
credit+=table.cell(row,j)*thispoint
point+=thispoint
currentgpa=credit/point
return currentgpa
def append_result(id,GPA): #let each GPA append this file
file('result.txt','w') #创建文件
f=file('result.txt','a')
f.write(id)
f.write('--')
f.write(GPA)
#main function
def main():
open_excel()
locate_table()
print 'You should input id to calculate this one\'s GPA'
id=input()
search(id)
gpa=cal_someone()
append_result(id,gpa)
if __name__=='__main__':
main()
问题:
1.
我想将file文件名通过手动输入,比如‘grade.xlsx’,但是始终提示文件名找不到,于是我就直接将file给确定下来,请问一下,怎么实现手动输入文件名来确定要操作的文件?
2.测试的时候卡在了search这一行,提示如下:
Connected to pydev debugger (build 171.4694.67)
You should input id to calculate this one's GPA
64
Traceback (most recent call last):
File "D:\Program Files\PyCharm Community Edition 2017.1.4\helpers\pydev\pydevd.py", line 1591, in <module>
globals = debugger.run(setup['file'], None, None, is_module)
File "D:\Program Files\PyCharm Community Edition 2017.1.4\helpers\pydev\pydevd.py", line 1018, in run
pydev_imports.execfile(file, globals, locals) # execute the script
File "E:/Pycode+/Tools/GPA.py", line 62, in <module>
main()
File "E:/Pycode+/Tools/GPA.py", line 57, in main
search(id)
File "E:/Pycode+/Tools/GPA.py", line 22, in search
rows=table.nrows()
TypeError: 'int' object is not callable
3.过程:
输入文件名-->找到文件(找不到open_excel函数就会出现提示)-->找到文件中的目标工作表(locate_table)-->搜寻某个人(search)-->计算这个人的学分绩-->以追加的形式写入到文件中,保存。(可以的话,想直接写到Excel文件里去)
我看了我的代码,感觉我写的独立的函数是一环套着一环,没有做到真正独立,而且我在主函数里很发蒙:既然第二个函数包含了第一个函数,那我要不要再去调用它?举个例子:我要求输入学号即ID,我将ID传到searche函数里去,但是我的search函数里已经包含了获取工作表的函数(locate_table),而且我的locate_table函数包含了 检查是否存在文件的函数(open_excel),请问一下这样的话,我要是直接调用search函数,是不是前一个函数就不需要调用了?
另外:假使我要实现通过所给文件名来定位目标文件,那么我直接调用search 肯定不行,要进行文件名查找,这样的话我就要先找文件名,然后检验是否能打开文件读取数据(open_excel)这样的话,我就要一个一个将写的函数调用出来,那么函数不就重复了吗?
最后:
假使你们要进行一个程序的设计,你们是怎么搭建整体思路的,怎么利用Python的未知模块的,还有就是你们项目稍微大点,怎么进行单个测试?我是习惯将用不到的给注释掉。。有点尴尬……
求解:()
代码写的有点烂,劳烦各位老师给看一下,我自己测试始终测试不出来,以为是格式问题,但是自己强制将单元表格的格式改成int形式了?stockflow里面说的,Google翻译有点逊,自己英文又有点差,所有觉得没能解决我的问题。求crossin老师给看一下,知道您时间紧张,我也不着急。(尽管这个问题折磨我好多节专业课了>:<)也拜托各位在论坛的前辈们给看一下,谢谢你们。
|
|