20193131 2020-2021-2 《Python程序设计》实验一 报告
课程:《Python程序设计》
班级: 1931
姓名: 崔克政
学号:20193131
实验教师:王志强
实验日期:2021年4月11日
必修/选修: 公选课实验一
一、实验内容
1.熟悉Python开发环境;
2.练习Python运行、调试技能;
3.编写程序,练习变量和类型、字符串、对象、缩进和注释等;
4.掌握git技能
二、实验过程及结果
(一)Python环境
老师介绍了VSCode、Pycharm等多种集成式开发环境,最终选择了Pycharm。
PyCharm 具备一般 Python IDE 的功能,比如:调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制等。
PyCharm 官方下载地址:http://www.jetbrains.com/pycharm/download/
(二)平均分计算
编写了一个可以计算平均成绩的小程序,这个程序分为计算平均成绩、输出各变量类型和循环。将用户输入的成绩赋给变量,通过缩编程序步骤计算平均成绩。为了进一步熟悉python,我编写输出了各种不同的变量类型,int、float、bool、str。
首先用pycharm建立了一个python file,然后进行程序编写。
代码:
""" 名 称:实验一 姓 名:崔克政 日 期:2021.4.11 """ none = True while none: python=int(input("请输入python成绩:")) # Python分数 math=int(input("请输入高数成绩:")) # 高数分数 c=int(input("请输入c成绩:")) # C语言 avg = (python + math + c)/3 # 计算平均分 print("平均分为:",avg,"分") ##类型输出 print(type(python)) print(type("类型")) print(type(none)) d = 13.14 print(type(d)) ##循环 print("还要重新计算平均分么(重新请输1)") a = int(input()) if a != 1: none = False else: none = True
#注释
Python中使用#表示单行注释。单行注释可以作为单独的一行放在被注释代码行之上,也可以放在语句或表达式之后。
当注释内容过多,导致一行无法显示时,就可以使用多行注释。Python中使用三个单引号或三个双引号表示多行注释。
#运行
想要运行python程序,有以下几种方法
1.点击菜单栏中的绿色三角形
2.快捷键
少一次移动鼠标的过程,方便快捷提升效率!
3.指定程序运行
当同时开启多个程序时,直接采用以上两种方法可能会导致只能运行第一个打开的程序或上一个编译的文件,这时采用指定运行的方法就会减少错误的出现。
#debug
接下来就是紧张又刺激的dubug环节了
运行程序>>红了红了!>>恭喜你,出bug了
1.打断点
一个断点标记了一个代码行,当Pycharm运行到该行代码时会将程序暂时挂起。注意断点会将对应的代码行标记为红色,取消断点的操作也很简单,在同样位置再次单击即可。
如图所示,打了两个断点
当你将鼠标指针悬停在断点上方时,Pycharm会显示断点的关键信息,行号以及脚本属性,如果你希望更改该断点的属性,右击断点:
2.我们有几种方法来debug程序
第一种:通过鼠标右击代码处,可以来debug程序
第二种:可以通过点击这个小虫子的图标来进行debug
接下来会Pycharm会执行以下操作:
(1)PyCharm开始运行,并在断点处暂停
(2)断点所在代码行变蓝,意味着Pycharm程序进程已经到达断点处,但尚未执行断点所标记的代码。
(3)Debug tool window窗口出现,显示当前重要调试信息,并允许用户对调试进程进行更改。
在这里介绍一下debug窗口几个图标分别代表的意思
这里一排七个坐标的意思分别是
1.show execution point (F10) 显示当前所有断点
2.step over(F8) 单步调试。
若函数A内存在子函数a时,不会进入子函数a内执行单步调试,而是把子函数a当作一个整体,一步执行
3.step into(F7) 单步调试。
若函数A内存在子函数a时,会进入子函数a内执行单步调试。
4.step into my code(Alt + Shift +F7) 执行下一行但忽略libraries(导入库的语句)
5.force step into(Alt + Shift +F7) 执行下一行忽略lib和构造对象等
6.step out(Shift+F8)当目前执行在子函数a中时,选择该调试操作可以直接跳出子函数a,而不用继续执行子函数a中的剩余代码。并返回上一层函数。
7.run to cursor(Alt +F9) 直接跳到下一个断点
然后接着来看变量查看器
在调试过程中观察变量的状态。我们需要对其设置一个查看器。在Watches窗口中,单击加号,输入期望查看的变量名称,例如这里输入delay,然后回车。我们可以在控制台里给它定义,也可以通过执行下一步,利用代码中的赋值来定义。
在这里做个小测试,这里可以直接编译python代码,执行一些python命令。
程序运行结果
为练习变量形式选择输出变量类型
#将代码推至gitee
gitee和我电脑似乎合作的不是很愉快,最开始的时候无法“commit”,在“push”里完全见不到任何一个文件,只能在命令区输入三行代码进行push
正常步骤为
1.添加所需文件至commit区,这一步一般在新建文件时都会跳出提示,直接添加一步到胃
2.运行成功后对程序进行commit
3.在这一区域添加注释,以便在gitee中快速了解文件用于及归属
成功commit
4.push至码云
成功push
接下来我们就可以到gitee中查看自己的代码了
至此,一个程序便完整结束了
(三)选择型计算器
最近在头疼进制转化的问题,于是编写了一个可以转化进制的程序
""" 名 称:选择型计算器 姓 名:崔克政 日 期:2021.4.19 """ print("====计算器====") chioce2 = 1 while(chioce2 == 1): print("请选择功能:\n1.求模\n2.进制转化\n3.阶乘\n4.累加") print("\n请选择您要计算的类型的序号") chioce1 = int(input()) while(chioce1 == 1): print("请分别输入参与运算的两个数") print("被除数:") a = int(input()) print("除数:") b = int(input()) c = a//b d = a%b print(a,"除",b,"商",c,"余",d) print("还要继续使用计算器么(继续输入1,退出输入2)") chioce2 = int(input()) break while(chioce1 == 2): jz = ['','','',''] print("请选择进制:(2,8,10,16)") a = int(input()) print("请输入数字:") b = str(input()) if a == 2: jz10 = int(b,2) elif a == 8: jz10 = int(b,8) elif a == 10: jz10 = int(b) elif a == 16: jz10 = int(b, 16) jz[0] = bin(jz10) jz[1] = oct(jz10) jz.insert(2,jz10) jz[3] = hex(jz10) title = ["二进制", "八进制", "十进制", "十六进制"] template = "{:<6} \t{:^6} \t{:^6} \t{:3}" new1 = template.format(title[0], title[1], title[2],title[3]) new2 = template.format(jz[0], jz[1], jz[2],jz[3]) print(new1) print(new2) print("还要继续使用计算器么(继续输入1,退出输入2)") chioce2 = int(input()) break while(chioce1 == 3): print("请输入要阶乘的数:") a = int(input()) b = a sum = 1 while a != 0: sum = sum*a a = a - 1 print(b,"的阶乘为",sum) print("还要继续使用计算器么(继续输入1,退出输入2)") chioce2 = int(input()) break while(chioce1 == 4): print("请输入要累加的起始数(包括):") a = int(input()) print("请输入要累加的终止数(不包括):") b = int(input()) result = 0 for i in range(a,b): result +=i print("结果为",result) print("还要继续使用计算器么(继续输入1,退出输入2)") chioce2 = int(input()) break
1.求模
2.进制转换
3.阶乘
4.累加
(四)随堂练习
mport random list1=[random.randint(1,100)for i in range(1,10)] print(list1) tuple1=("hello") print(type(tuple1)) tuple1=("hello",) print(type(tuple1)) tuple2=("li","zheng","wo","er") print(tuple2[2]) tuple3=(random.randint(1,100)for i in range(1,10)) tuple3=tuple(tuple3) print(tuple3) list2=list(tuple3) print(list2) dictionary1={"20193113":"lz","20193131":"ckz"} print(dictionary1) list4=[1,2,3,4,5] tuple4=("a","b","c","d","e") list5=dict(zip(list4,tuple4)) print(list5) tuple5=tuple(zip(list4,tuple4)) print(tuple5) dictionary2=dict.fromkeys(list4) print(dictionary2) print(dictionary1.get(20193131)) for xx in dictionary2.items(): print(xx)
三、实验过程中遇到的问题和解决过程
- 问题1:不能正常bebug,程序并没有错误
- 问题1解决方案:(转自CSDN)
一、关闭Pycharm,删除工程目录下的.idea文件夹并重启。
二、删除所有的断点。可以点击下图所示的两个叠在一起的红色原点进行操作。
三、点击Pycharm的File>>Invalidate Caches / Restart…,然后选择Invalidate and Restart。这个操作清空了项目中的缓存信息。
四、重建整个工程并重新配置。
- 问题2:学c之后总是把“print”打成“printf”,前期出了不少bug...
- 问题2解决方案:硬着头皮多记多注意吧
四、其他
python的实用性实在是太强了,相对于C,许多指令进行了简化,功能也更加强大,例如元组、列表、字典,感觉功能重合但却又各有所长。此外,gitee和博客园这类的网站,为我的python学习之路提供了非常大的帮助,调试技巧、错误解决方法等许多问题都能从这些网站上找到相当详尽的解决方案,且大多数都是图文并茂的,相当可靠!