因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:用户
您可以查看与复制此页面的源代码。== Python程序设计课程主页(2020年秋季学期) ==
Teacher: [http://hlt.suda.edu.cn/~zhli 李正华]
Teaching Assistant: 周厚全、刘泽洋、周仕林
上课时间和地点、QQ群
周一13:30-15:20卫校301;
周五13:30-15:20理工楼153
周二13:30-15:20理工楼238、247(上机);
python-2020学习交流QQ群:893402501
教材的名字:零基础学习并理解Python
特点:1)把重点放到理解上,建立基本概念;2)重视英语学习,尽可能多的给出英语术语翻译;3)多画流程图、多给出图例,考虑latex画图。
== 考试安排 ==
* 第一次考试:11.11(周三),考试内容:基础、分支、列表、循环 ([http://hlt.suda.edu.cn/LA/teach/python-2020-fall/考试成绩-anonymous.xlsx 考试成绩])
* 第二次考试:12月9日(周三)晚上:元组 字符串 字典 集合
* 第三次考试(期末):1月
* 考试形式:上机考试
** 选择题
** 编程题:每一道题对应一个函数(给定了函数名,不能随便修改),所有函数放到一个.py文件中
*** 得至少练一次?可否开一下系统?
* [http://192.168.125.3/python/ 考试信息网站]
=== 2020.11.3 模拟考试 ===
* 考试时间:2020.11.3 13:45-15:00
* 考试题型:5道选择题(不会没关系,快速做完)、3道编程题
* 考试内容:[http://hlt.suda.edu.cn/LA/teach/python-2020-fall/2020-11-03-SimExam.zip 2020-11-03-模拟考试试题](zip包的解压缩密码是:Py202011031230)
* 模拟考试总结
常见问题:
a. 语法错误:程序中出现语法问题将会导致判为0分:
1. if中出现逗号,例如:
if a0, a1, a2, a3, a4, a5==0:
2. else后面带表达式:此处应该用elif
3. 程序不完整(unexpected EOF):例如用if...else...时,else直接一个冒号就结束了,如果想空掉某些位置请使用pass
4. if后没有冒号
5. 小于等于运算符写错:应该是<=而不是=<
6. 重复def
7. 使用了中文的括号
8. 缩进问题
9. 使用未赋值的变量,尤其是在if判断的时候会出现这样的问题,例如:
if x>0:
a = 1
print(a)
b. 变量使用问题:在使用一个变量时,应该首先确保这个变量已经被赋值,同上。
c. 在代码中使用input导致超时:我们调用你的程序会遇到input()导致无限等待。
d. 误用中括号,例如:
return x, [.....]/5
e. 其他审题要清楚,注意特殊情况下的结果是否与题目给出的样例一致。
注意:考试时,提交的.py中不能有input() print()。
=== 2020.11.10模拟考试 ===
* 考试时间:2020.11.10 13:40-15:00
* 考试题型:1道选择题、3道编程题
* 考试内容:[http://hlt.suda.edu.cn/LA/teach/python-2020-fall/2020-11-10-SimExam.zip 2020-11-10-模拟考试试题]
== Mooc混合式教学==
中国大学慕课 Python程序设计 苏州大学 朱晓旭等
请同学们同步学习这个网课。
理论课上,我会留一些时间,来针对网课的内容进行讲解、答疑。
== 参考资料 ==
* 何俊老师的Python课程教学网站
** [http://web.suda.edu.cn/hejun/ 校外链接]
** [http://192.168.125.7/local_python/index.html 校内链接]
* runoob
** [https://www.runoob.com/python3/python3-tutorial.html python3]
** [https://www.runoob.com/python2/python2-tutorial.html python2]
== 实验课安排(有问题多主动问,Python不是教会的,而是不断动手、思考学会的) ==
* [http://hlt.suda.edu.cn/LA/teach/python-2020-fall/实验报告系统使用手册(学生).docx 实验报告系统使用手册(学生).docx]
=== 实验报告说明 ===
实验报告由两部分组成:
* 实验报告:学号-exp-x.pdf (x表示第几次实验)
** 注意文件命名格式,必须用pdf文件
** 包含题目、流程图、解题思路、运行结果截图、遇到什么问题及如何解决的、总结有哪些收获、对老师的建议
** 每次会提供一个基本的实验模板,学生按照自己的方式去安排报告的内容
** 选择三道较难的题目,先画流程图,然后写代码。可以手画流程图然后拍照,也可以用画图软件去画。其他题目不用画流程图。
* 代码:学号-exp-x.py
** 把所有题目的代码放到一个py文件中,不要压缩,在提交的时候点击附件,上传相应实验的.py文件。
** 注意可读性,方便老师批改,可以写一些必须的注释
注意事项:
* 抄袭会严惩!当次实验成绩清0!
* 实验报告、代码,要保留好,不要删除,期末的时候可能要统一放到一个文件夹中,交给老师。
* 除了基本的题目,还可以额外做老师在课堂上提出的思考题、扩展题。
* 根据认真程度、完成的质量、可读性等,来综合评分
* 每次作业批改后,会在理论课或上机课上进行讲解,重点是讲大家常见的错误。
* 如果系统中没有给出分数,则可以撤销提交并重新提交。
往年的习题集:
* [http://hlt.suda.edu.cn/LA/teach/python-2020-fall/Python习题.pdf 习题集PDF] ([http://hlt.suda.edu.cn/LA/teach/python-2020-fall/python-ch10.rar 习题相关数据文件])
=== 扩展题目(选做,可以放到实验报告中) ===
顺序结构题目:
1)输入三个变量的值,然后按小到大顺序输出。
2)BMI指数(身体质量指数,Body Mass Index)是目前国际上常用的衡量人体胖瘦程度及是否健康的一个标准。
体质指数(BMI)=体重(kg)÷身高^2(m)
3)编写程序实现华氏温度到摄氏转换
转换公式:
摄氏度C=(华氏度-32)乘以(5/9)
华氏度F=32+(9/5) 乘以 摄氏度C
4)从键盘输入一个三位整数n,输出其逆序数m。例如,输入n=127,则m=721。
-----
分支结构题目:
(1)判断年份year是否为闰年。
(2)判断ch是否为小写字母。
(3)判断m能否被n整除。
(4)判断ch既不是字母也不是数字字符。
(5)输入年月,求该月的天数。
(6)输入一个时间(小时:分钟:秒),输出该时间经过5分30秒后的时间
(7)根据bmi情况,输出不同的信息:
if bmi<18.5:
print("过轻")
elif bmi<25:
print("正常")
elif bmi<28:
print("过重")
elif bmi<32:
print("肥胖")
else:
print("非常肥胖")
-----
循环结构题目:
从m到n数字求和
判断一个数字是否为素数(质数)
判断一个字符串是否为回文('abccba', 'aba')
求一个浮点数(>0)的根号,可以有多种方法。例如:平方根迭代公式x1=1/2*(x0+a/x0)
求两个整数a与b的最大公约数、最小公倍数
输出[100,1000)以内的全部完数(因子之的和等于自己,如6=1+2+3)
用字符'*'输出不同的形状,如等边三角形,等腰三角形,直角三角形
打印9*9乘法表
角谷猜想:
是指对于任意一个正整数
如果是奇数,则乘3加1
如果是偶数,则除以2
得到的结果再按照上述规则重复处理
最终总能够得到1
欧几里得算法(辗转相除法)求最大公约数
num1,num2=eval(input("请输入两个正整数"))
if num1
num1,num2=num2,num1 #保证num1大
while num1%num2!=0:
temp=num1%num2
num1=num2
num2=temp
print("最大公约数是:",num2)
哥德巴赫猜想
哥德巴赫->欧拉
任一大于2的偶数都可表示为两个素数之和
1+1
陈景润
任何一个充分大的偶数都可以表示成一个素数和一个不超过两个素数的乘积之和
1+2
猜数字
计算机产生一个1-10000之间的随机数
人去猜
计算机提示
偏大
偏小
猜对
显示猜的人所猜的次数
-----
列表扩展题目:
例:给定一个数字列表,将每个元素求修改为其绝对值,然后返回该列表
l9 = [1,-3.39,7,-999]
例:从键盘输入数字到列表(输入非数字则停止),并对列表进行排序(从小到大),然后返回列表
例:给定一个列表,返回某元素在列表中的所有下标,作为一个列表返回
l1 = [1,'a',2,3]
value = 1
例:实现reverse功能
例:二分查找(一定要亲手实现一下)
例:排序算法
例:矩阵乘法实现:随机产生矩阵中的数字,用嵌套列表来存储
* 2020.10.26:输出当前时间,新输出的时间刷新旧时间。(提示,利用退格符,PyCharm可以,用cmd也可以,IDLE不行)
* 2020.10.23:求平方根,是否还有其他更快的解法(之前讲的是二分查找)
* 2020.10.15:把求平方根的代码,扩展为x为任何大于0的浮点数。注意一定要先画流程图。
=== 思考题目 ===
* 有100只一模一样的苹果,编号1-100。其中99个是正常的,一个被注射了毒药。只要老鼠咬一口毒苹果,一天后则死亡。现在,你有7只老鼠和一天的时间,如何检验出哪个号码的苹果被注射了毒药?
* 蒙特卡洛法求圆周率 pi。正方形面积、圆的面积。当然,圆的面积公式又是怎么来的呢?
=== 实验课常见问题 ===
2020.10.20:
* input()函数从用户得到的输入类型是字符串,不能直接进行数值的运算,需要类型转换。
* 希望一次性input多个数字,可以用字符串split方法:
** lst = list(map(int, input('please input:').split())) #一次性输入多个数字,按空格隔开;并存储到一个列表中
** x, y, z = eval(input('please input two int, using comma as the delimiter: ')) # 输入 3, 5, -4
** lst = eval(input('please input a python list: ')) # 输入 [3, 5, -4],中括号必须有,作为列表对象存储
** a_tuple = eval(input('please input several int, using comma as the delimiter: ')) # 输入 3, 5, -4,作为元组对象存储
* 注意变量 x 与字符串 "x" 之间的区别。
=== 第一次实验报告 2020.10.20 python语言基础===
* 截止时间:11月4日20:00前
* [http://hlt.suda.edu.cn/LA/teach/python-2020-fall/zhenghua-实验1%20python语言基础.doc 报告模板](含基本题目),见csteaching
=== 第二次实验报告 2020.11.3 顺序结构程序设计===
* 截止时间:11月15日20:00前
* [http://hlt.suda.edu.cn/LA/teach/python-2020-fall/zhenghua-实验2%20顺序结构程序设计.doc 报告模板]
=== 第三次实验报告 2020.11.10 选择结构程序设计===
* 截止时间:11月28日20:00前
* [http://hlt.suda.edu.cn/LA/teach/python-2020-fall/zhenghua-实验3%20选择结构程序设计.doc 报告模板]
* 学生建议:
建议拓展题目不要有包含关系或同类题目,最好少而难。
希望老师能在实验报告后对较难的题目给出较为简便高效的代码,以便于学习。
希望老师上课多讲点知识,有条理一些。
每节理论课可以在群里提前说一下下节课内容,有所准备的话,在课上可以更好的理解。
希望老师能够对稍微大型些的程序做些分析和讲解。
=== 第四次实验报告 2020.11.17 列表===
* 截止时间:12月01日20:00前
* [http://hlt.suda.edu.cn/LA/teach/python-2020-fall/zhenghua-实验4%20列表.doc 报告模板]
* 学生建议:
希望课程主页上能多更新一点课外拓展的题目。另外,希望老师能提供一点选择题的资料或者练习之类,或者以往几届考试的选择题和题库都可以。
希望老师可以讲讲多个循环嵌套的例子。
建议老师在每次实验报告截止日期后发一份标准答案,并在上机课上讲解较难的题目。
对老师的建议是希望可以把魔方阵简单说一下。
建议老师上课把重点函数点出来,过一遍基本没人能记住,有些不常用的看一眼就行了
希望老师讲快一点
=== 第五次实验报告 2020.11.24 循环结构程序设计===
* 截止时间:12月08日20:00前
* [http://hlt.suda.edu.cn/LA/teach/python-2020-fall/zhenghua-实验5%20循环结构程序设计.doc 报告模板]
=== 第六次实验报告 2020.12.01 字符串与正则表达式 ===
* 截止时间:12月31日20:00前
* [http://hlt.suda.edu.cn/LA/teach/python-2020-fall/zhenghua-实验6%20字符串与正则表达式.doc 报告模板]
=== 第七次实验报告 2020.12.08 元组、字典、集合===
* 截止时间:12月25日20:00前
* [http://hlt.suda.edu.cn/LA/teach/python-2020-fall/zhenghua-实验7%20元组、字典与集合.doc 报告模板]
== 讲给同学们的话 ==
大学生活、学习的一些建议
* 计算机英语很重要(1000左右单词),有助于理解和记忆;
* 逻辑思维能力很重要,从流程图(或伪代码)锻炼起;
* 多动手、多练习、多思考、多尝试,才能学好编程;
* 编程只是计算机科学与技术这门学科的最基本能力。要想成为顶尖的编程高手,必须对计算机的硬件、操作系统、数据结构、算法等基础理论理解透彻,所以要长期坚持,不断提高自己的计算机素养和基础。
2020.10.23 今天又少了一次课(第5周周五少了一次)。希望大家利用各种资源,抓紧学习。我的课主要以理解为主,把知识串起来。要学好python,要不断写代码、调试。要靠自己
== 讲义记录 ==
=== TODO ===
正则表达式 函数 模块 文件 异常
6次课:11 14 18 21 25 28
函数:
递归函数
函数作为参数 sort(key = )
lambda
函数参数:位置型、关键字类型
默认参数
标量Scalar(integer, floating-point number, boolean)
矢量Non-Scalar(字符串string等)
python的特点
high-level(python > c++ > c > 汇编)
C语言能做的,Python都能做?感觉不一定
解释性(interpretative)
面向对象(object)
跨平台、移植性高
2.0和3.0不兼容,语法有一些小的变化
=== 学习朱晓旭老师的PPT ===
in和not in 测试(成员测试,列表、字符串等)
isinstance(3, int)
用单引号或双引号括起来的字符串不可跨行
用三引号括起来的字符串可以是多行的
格式字符串:% format() str.format()
原始字符串:如果不希望字符串转义,前面加r
r”\n”
如果转义后没有意义,那么就是两个字符,如'\A'
转义字符:以反斜杠“\”开头,后跟一个或多个字符(反斜杠称为转义字符,表示的字符称为特殊字符?怎么说比较清晰呢,得看看英文文献,确认一下?)
转义字符具有特定的含义
不同于字符原有的意义,故称转义字符,
主要用来表示那些用一般字符不便于表示的控制代码
eval()函数
其调用格式为:
eval(字符串)
作用是把字符串的内容作为对应的Python语句(表达式?)来执行
逗号:分隔符(元组)
表达式:
单个任何类型的对象或常数
使用运算符连接的变量和常量
函数调用的任意组合
什么是表达式?eval('x=3') vs. x=eval('3')
dir(__builtins__)
可以使用sys.modules.items()显示所有预加载模块的相关信息。
=== Python代码规范(摘自朱晓旭老师PPT)===
缩进:
类定义、函数定义、选择结构、循环结构,行尾的冒号表示缩进的开始
python程序是依靠代码块的缩进来体现代码之间的逻辑关系的,缩进结束就表示一个代码块结束了。
同一个级别的代码块的缩进量必须相同。
一般而言,以4个空格为基本缩进单位,可以通过下面的方法进行代码块的缩进和反缩进:
注释:
一个好的、可读性强的程序一般包含30%以上的注释。常用的注释方式主要有两种:
以#开始,表示本行#之后的内容为注释
包含在一对三引号'''...'''或"""..."""之间且不属于任何语句的内容将被解释器认为是注释
每个import只导入一个模块
如果一行语句太长,可以在行尾加上\来换行分成多行,但是更建议使用括号来包含多行内容。
必要的空格与空行:
运算符两侧、函数参数之间、逗号两侧建议使用空格分开。
不同功能的代码块之间、不同的函数定义之间建议增加一个空行以增加可读性。
适当使用异常处理结构进行容错,后面将详细讲解。
软件应具有较强的可测试性,测试与开发齐头并进。
=== 函数 ===
=== 模块 ===
模块基础:package(包)等以后再学习
random模块的学习和使用
什么是模块?py文件,文件夹组织时,如何import?【后期还会专门学习一下】
help(dir)
dir(math)
help(random)
dir(random)
help(time)
dir(time)
help(time.ctime)
Python默认安装仅包含部分基本或核心模块,但用户可以安装大量的扩展模块,pip是管理模块的重要工具。
在Python启动时,仅加载了很少的一部分模块,在需要时由程序员显式地加载(可能需要先安装)其他模块。
减小运行的压力,仅加载真正需要的模块和功能,且具有很强的可扩展性。
可以使用sys.modules.items()显示所有预加载模块的相关信息。
import 模块名
>>>import math
>>>math.sin(0.5) #求0.5的正弦
>>>import random
>>>x=random.random( ) #获得[0,1) 内的随机小数
>>>y=random.random( )
>>>n=random.randint(1,100) #获得[1,100]上的随机整数
可以使用dir函数查看任意模块中所有的对象列表,如果调用不带参数的dir()函数,则返回当前脚本的所有名字列表。
可以使用help函数查看任意模块或函数的使用帮助。
from 模块名 import 对象名[ as 别名] #可以减少查询次数,提高执行速度
from math import * #谨慎使用
>>> from math import sin
>&