URN Logo
UNIX Resources » Linux » China Linux Forum » Python 编 程 » 13 » 用python写的第一个程序(处理学生考试成绩)
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
用python写的第一个程序(处理学生考试成绩)
 
 
 
Subject: 用python写的第一个程序(处理学生考试成绩)
Author: AnthraxCN    Posted: 2005-01-21 22:43    Length: 7,002 byte(s)
[Original] [Print] [Top]
学python一星期了,练习写了个处理学生成绩的小程序.由于刚刚
起步,还没有学到OOP的部分,所以程序主题还是用函数实现的,
知识点主要涉及到对列表(二维)和哨兵值,以及起泡法对二维列
表进行排序的知识.之所以贴出来,是想与和我一样刚刚起步的兄
弟们分享,同时也希望老鸟们批评指正.

代码如下:

#一个期末学生成绩统计程序

#打印帮助信息
from __future__ import division
print '================================== '
print ' 姓名输入inputOff表示结束数据录入 '
print '================================== '

#输入学生成绩信息
listStu = [] #初始化学生列表
inpStu = [] #初始化学生信息列表
stuName = "" #初始化学生姓名

while True:
stuName = raw_input('请输入学生姓名:')
if stuName == "inputOff":
break
stuEng = float(raw_input('请输入英语成绩:'))
stuMath = float(raw_input('请输入数学成绩:'))
stuCum = float(raw_input('请输入计算机成绩:'))
stuBio = float(raw_input('请输入生物成绩:'))
inpStu.append(stuName)
inpStu.append(stuEng)
inpStu.append(stuMath)
inpStu.append(stuCum)
inpStu.append(stuBio)
print
listStu.append(inpStu)
inpStu = [] #复位学生信息列表以存储下一名学生的信息

#定义学生个人最好学科与最差学科
def bestObj(inputer):
i = 0 #用于存取最好成绩的科目序列号
obj = 0 #用于存取最好科目成绩
iBad = 0 #用于存取最差学科科目序列号
objBad = 150 #用于存取最差科目成绩
for stu in range(len(inputer)):
for eachStu in range(1,len(inputer[stu])):
if inputer[stu][eachStu] > obj:
obj = inputer[stu][eachStu]
i = eachStu
if inputer[stu][eachStu] < objBad:
objBad = inputer[stu][eachStu]
iBad = eachStu
print
print '姓名:',inputer[stu][0]
if i == 1:
print "最好成绩为英语:%d分" % obj
elif i == 2:
print "最好成绩为数学:%d分" % obj
elif i == 3:
print "最好成绩为计算机:%d分" % obj
elif i == 4:
print "最好成绩为生物:%d分" % obj
else:
print "无录入信息!"

if iBad == 1:
print "最差成绩为英语:%d分" % objBad
elif iBad == 2:
print "最差成绩为数学:%d分" % objBad
elif iBad == 3:
print "最差成绩为计算机:%d分" % objBad
elif iBad == 4:
print "最差成绩为生物:%d分" % objBad
else:
print "无录入信息!"

i = 0 #复位变量以存储下一名学生的信息
obj = 0
iBad = 0
objBad = 150

#显示单科成绩最优及平均成绩
def singleBest(studentList):

studentName = ''#用于存取最好成绩的学生姓名
obj = 0 #用于存取科目最好成绩
totle = 0 #用于存取总成绩
average = 0.00 #平均成绩

for kemu in range(1,len(studentList[0])):
for stu in range(len(studentList)):
if studentList[stu][kemu] > obj:
obj = studentList[stu][kemu]
studentName = studentList[stu][0]
totle += studentList[stu][kemu]
average = (totle*1.00)/len(studentList)

print
if kemu == 1:
print '英语最高分:%s %.1f分'%(studentName,obj)
print '平均分:%.2f分'% average

elif kemu == 2:
print '数学最高分:%s %.1f分'%(studentName,obj)
print '平均分:%.2f分'% average

elif kemu == 3:
print '计算机最高分:%s %.1f分'%(studentName,obj)
print '平均分:%.2f分'% average

elif kemu == 4:
print '生物最高分:%s %.1f分'%(studentName,obj)
print '平均分:%.2f分'% average

else:
print '无录入信息'

studentName = ''#变量复初值
obj = 0
totle = 0
average = 0.00

#定义总成绩排队

#定义统计学生总成绩的函数
def totlelist(newList):
subTotle = 0.0
for h in range(1,5):
subTotle += newList[h] #求每个学生的总成绩
return subTotle
#创建新列表,包含姓名和成绩
def creatlist(creat):
creatL = [] #定义存储学生姓名和总成绩的列表
createdL = []#定义存储creatL的二维列表
for i in range(len(creat)):
creatL += [creat[i][0]]
creatL += [totlelist(creat[i])]#调用totlelist()函数把总成绩压入新列表
createdL += [creatL]
creatL = [] #恢复creatL初始值
return createdL
#对新列表createdL进行排队
def taxis(tax): #利用起泡法对新创建的学生
#姓名和总成绩二维列表进行
#降序排序;接收的参数为creatlist()函数
for u in range(len(tax)-1):
for i in range(len(tax)-1,u,-1):
if tax[i][1] > tax [i-1][1]:
tax[i-1],tax[i] = tax[i],tax[i-1]

print '名次: 姓名: 分数:'
for l in range(len(tax)):
print '%5d %-6s %8d' % (l+1,tax[l][0],tax[l][1])

print
print '*****************************'
print ' 学生擅长及较弱科目'
print '*****************************'
bestObj(listStu)
print
print '*****************************'
print ' 单科最高分及各科平均成绩'
print '*****************************'
singleBest(listStu)
print '*****************************'
print ' 学 生 成 绩 榜'
print '*****************************'
taxis(creatlist(listStu))
raw_input()

----
知识与信息让我获得自由.
[Original] [Print] [Top]
Subject: Re: 用python写的第一个程序(处理学生考试成绩)
Author: passworld    Posted: 2005-01-22 00:10    Length: 492 byte(s)
[Original] [Print] [Top]
其实蟒蛇里有 max(), min(), sum() 函数,列表也有 max(), min(), sort(), index() 方法,当然练习算法另当别论。

存储学生资料似乎用字典比较自然,用列表有点怪。
科目也可以用一个字典总结,就不用这么多 elif 了:
subjs = {0: '英语', 1: '数学', 2: '计算机'}

print '最好成绩为%s: %d' % (subjs[i], obj)

善用字典。

函数和命令混排比较混乱,最好函数都在一开始定义,执行的
命令集中放在文件的尾部。
[Original] [Print] [Top]
Subject: Re: 用python写的第一个程序(处理学生考试成绩)
Author: limodou    Posted: 2005-01-22 23:10    Length: 6 byte(s)
[Original] [Print] [Top]
同意。
----
[Original] [Print] [Top]
« Previous thread
一个新手的疑惑?
Python 编 程
13
Next thread »
求《Programming Python, 2nd Edition》一书
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 04:11:21, cost 0.041116952896118 ms.