西南大学
计算机与信息科学学院
2015级计算机科学与技术大类专业
《编程导论》课程设计A案
适合 大一上期计算机类各专业
1.1能从实际应用问题出发,合理选择数据结构,设计算法形成完整的设计方案。
1.2使用Python实现算法,合理添加注释以保证程序的可读性。
1.3针对项目认真撰写课程设计报告。
课程设计题目由教师提供(见第5节),内容可以是一个具体的数据处理问题、字符串处理问题、统计问题和数据挖掘问题。允许学生自拟题目,但需经过教师审核。教师可根据教学实际情况增加题目。
3.1考核方式:考查。
3.2成绩评定:课程设计成绩采用100分制,从以下几个评级指标进行评定:
评价指标(所占比例) |
成绩 |
代码可读性强 (10分) |
|
程序结构合理 (30分) |
|
课程设计结果正确 (20分) |
|
课程设计分析、总结全面 (30分) |
|
课程设计报告规范 (10分) |
|
4.1 课程设计报告主要内容
封面
课程:
课程设计题目:
班级:
学号:
姓名:
指导教师:
上交日期:
主要内容
1 概述
设计主要完成的任务和解决的主要问题。
2 算法描述
给出你算法的详细描述,用自然语言描述。
3 源代码
提供项目源代码。
4 简要的使用说明
提供输入、输出描述,并举例说明。
5 总结
对项目完成情况进行总结。包括存在问题的总结。
6 参考文献
4.2 课程设计报告编写的基本要求
(1)采用A4纸书写或打印;
(2)如为打印,题目采用宋体3号字加重,正文小标体采用宋体四号,正文采用宋体五号字。
数据挖掘是通过对大量的数据进行排序,挑选出相关信息的过程。商业情报结构和金融分析师会用到它,而且正日益被用在科学领域中,从现代实验和观测方法所产生的巨大数据集中提取信息。
在这个项目中,我们想要对一些公司的股票价格进行初步的数据挖掘。以Google公司为对象。程序将计算出2010-2015年间Google股票的每月平均价格,并得出Google公司最好和最坏的6个月。提供读取函数的数据,请编写下面几个函数和调用这些函数的主程序。
(a) 首先需要股票历史价格。访问finance.yahoo.com,在搜索字段中输入Google,选择“Historical Prices”(目前在页面左侧),并找到“Download toSpreadsheet”选项。将文件保存在Python程序所在文件夹中。默认名称是“table.csv”,将使用该名称。文件格式由文件前几行给出:
Date, Open, High, Low, Close,Volume, Adj Close
2015-10-11, 461.00, 462.07,443.28, 449.15, 10006000, 449.15
2015-10-10, 422.64, 439.18,410.50, 439.08, 8589400, 439.08
(b) getDataList (FileName)
“CSV”文件是“用逗号分隔的文件”,所以可以在逗号处分割数据。下面的函数将读取一个文件,从逗号处分隔文件中每行,并把数据放到返回的列表中。结果是二维列表,列表的每行又是一个列表。此外,每个项都是一个字符串。读文件需要使用文件名进行调用:getDataList(‘table.csv’),在shell中应用此函数,了解函数的返回值是什么。
def getDataList(fileName):
dataFile =open(fileName, ‘r’)
dataList = [] # start with an empty list
for line indataFile:
# strip end-of-line, split on commas, andappend items to list
dataList. append (line.strip().split(‘,’))
return dataList
(c) getMonthlyAverages (dataList)
在这个函数中,将使用getDataList函数产生的dataList作为参数。使用Date,Volume, AdjClose计算每月平均价格。下面是一个计算月平均价格的公式,其中Vi代表Volume,Ci是当天调整收盘价(Adj Close)。
averagePrice = (V1 * C1 + V2 *C2+ …….+ Vn * Cn)/(V1 + V2 + ……+ Vn)
为每个月创建包含两个项的元组,包括该月的平均价格和日期(只需要年份和月份)。将每个月的元组添加到列表中(例如monthlyAveragesList),计算所有月的平均值后,返回此列表。在这里使用元组,是因为这些值计算出来后不想意外的更改它们!
(d) printInfo (monthlyAveragesList)
在这个函数中,需要使用getMonthlyAverages函数得到月平均价格列表。需要查找和显示Google股价中6个最好(最高平均价格)和6个最坏(最低平均价格)的月份。按从高到低的顺序显示,要求精确到小数点后2位。对输出进行格式化,得到美观的输出(包括信息标题栏)。此函数不返回任何值。
(e) 如果不调用这些函数,它们不起作用。因此,应该写代码来调用他们。
提示:
(a) 列表sort( )和reverse( )方法会起作用。做实验来观察如何在元组列表上使用这两个方法,注意是如何按第一个项进行排序的。
(b) 创建元组,项是圆括号内用逗号分隔的列表:(x,y)。
(c) 使用二维列表(或元组列表)时,第一个列表的第一项是someList[0][0],第一个列表的第二项是someList[0][1]。
(a)在一个网格中的自我规避游走是一条从一点到另一点的路径,并且这条路径不会经过同一个点两次。自我规避游走在物理、化学和数学中有很多的应用。它可以用来模拟链状实体,例如溶剂和高分子聚合物。编写一个Turtle程序显示一条随机路径,该路径从中心点开始在边界上的某点结束。或者在死点处结束(即该点被其他已经经过的4个点包围)。假设这个网格的大小是16*16。
(b)再编写一个仿真程序来显示随着网格大小的扩大,路径在死点结束的概率将会提高。程序模拟网络大小从10变化到50。对于每一种网格大小,仿真10000次自我规避游走然后显示在死点结束的概率,输出如下所示。
For latticeof size 10, the probability of dead-end paths is 10.57%
For latticeof size 11, the probability of dead-end paths is 14.09%
……
For latticeof size 49, the probability of dead-end paths is 94.22%
Forlattice of size 50, the probability of dead-end paths is 94.33%如果一家银行的资产总额低于一定的界限,这家银行就身处险境了。此时该银行将无法给其他银行偿还它的贷款,因此贷方银行无法将这些贷款计入它的资产总额。因此,该贷方银行的资产总额同样可能低于这个界限,它也就可能变得危险。编写一个程序找出所有不安全的银行。程序应读入如下所示的输入值。它首先读入两个整数n和limit,其中n表明银行的数量,limit是维持银行安全的最低资产总额。接着读入n行信息,它们以0到n-1标识这n家银行。行中的第一个数是银行的余额,第二个数指明从银行贷款的银行数量,其余数字都是由两个数组成的数对。每对数描述一个借方。每对数的第一个数是借方银行的标识,第二个数是所借的金额。例如,上图中五家银行的输入值如下所示(注意界限是201)。
5 201
25 2 1 100.54 320.5
125 2 2 40 385
175 2 0 125 375
75 1 0 125
181 1 2 125
银行3 的资产总额是(75+125),低于201,因此银行3是不安全的。在银行3不再安全之后,银行1的资产总额下降到低于界限(125+40),因此银行1也变成不安全的。程序的输出应该是:
Unsafe banksare 3 1
(提示:使用二维列表borrowers来表示贷款,borrowers[i][j]表示银行i贷款给银行j的总额。一旦银行j不再安全,borrowers[i][j]应当置为0。)
国际标准书号(International Standard BookNumber,ISBN)每一本公开发行的书,在封底都有一个10位或13位的编号ISBN。ISBN的最后一位数字称为计算机校验码,相当于奇偶校验位。书店的计算机仅通过查看ISBN的校验码便能判断是否犯了错误,避免买错书。 13位ISBN的校验码算法如下:
将第一位乘以1,第2位乘以3,第3位乘以1,第四位乘以3,以此类推,直到第12位乘以3,将各位结果相加之后,取总和的末位数字(即除以10后的余数)后再减去10(如果结果为10,取0)即可。
例如:
ISBN-978-897283571-4
(9×1)+(7×3)+(8×1)+(8×3)+(9×1)+(7×3)+ (2×1)+(8×3)+(3×1)+(5×3)+(7×1)+(1×3)=146
146 ÷ 10= 14 (余6) 10 - 6 = 4
请编写一个条码分析和生成程序,具有以下功能:
1)利用随机函数自动生成一个13位ISBN号,满足检验码规则
2)利用turtle画出该条码,条码编码规则如下图:参考文献
《Python入门经典 以解决计算问题为导向的Python编程》
前3题来至参考文献
课程设计制定者:周竹荣,李娅
------------------------------------------------------------------------------------------------
周竹荣,博士,西南大学,计算机与信息科学学院,计算机科学与技术系主任
硕士导师