《Python语言程序设计》
实验指导书
商学院Python教学团队编
江汉大学经济与管理实验教学中心
江汉大学企业运营虚拟仿真实验教学中心
实验项目一 Python基本数据类型
【实验目的】
1、熟悉PythonIDLE编程环境,并能进行简单的Python编程;
2、学会使用Python基本数据类型、变量、运算符、表达式等。
【实验内容】
1、令x=3,y=5.0,s1=’Python’,分别用type()函数、id()函数查看x、y、s1的类型和内存地址。
2、定义变量“a=3,b=4,c=5”,利用PythonIDLE编程,求下列表达式a==b、nota<=c、(a>b)and (b<c)、a<b<c、(a!=b)or(c%a**3>b) 、aand b、aor b的值。截图记录实验内容。
3、定义两个整型变量“a=12,b=5”,通过PythonIDLE编程,计算a与b之间的乘积、取整、幂运算;打印出算术运算对应的值,要求每一个算术运算单独用一个print()函数进行输出。截图记录实验内容。
4、利用PythonIDLE编程,截图记录实验内容:定义变量“x=6,y=4,z=9”,利用Python中的数学函数和随机数函数求值。
(1)求x,y,z三个变量中的最大值和最小值;
(2)生成[x,z]范围内的整数和随机小数;
(3)求三个数之和的平方根;
(4)以下数学表达式转换为Python表达式,并计算它的值。
5、用Python表达式来表示以下句子。
(1)m=238,求正整数m的个位数字、十位数字和百位数字。
(2)随机生成1个1-20之间的整数,求这个整数的三次方根,结果保留3位小数。
【实验环境】
python3.6及其以上版本
Python软件安装方法
以python3.10.0为例:
双击安装文件python-3.10.0-amd64.exe
勾选“AddPython 3.10 to PATH”,并选择“Customizeinstallation”

把OptionalFeatures全部勾选上,点击“Next"

AdvancedOptions勾选2、3、4项,然后选择安装路径为D:\PYTHON38(安装路径可根据个人电脑的实际情况做调整,也可以直接选择默认安装路径),点击”Install“,等待安装完成

页面出现Successful字样,说明安装成功。
启动IDLE编辑环境:在开始菜单(所有程序)找到:python3.10第一个,点击即可。
(1)Windows命令行下运行
同时按下Windows键和R键,启动“运行”,在“运行”中输入cmd然后回车,弹出命令行窗口,然后输入python回车,即出现如下界面。
然后输入print(‘Helloworld!’),即可以敲一行代码,python就执行一次。
输入exit()退出交互模式。

(2)IDLE(集成开发学习环境)运行
通过IDLE交互式运行python。从“开始”中找到Python->IDLE,如下图
启动IDLE的shell控制台,同样输入print(‘Helloworld!'),可以敲一行代码,与python交互一次,python执行一次。IDLE中python代码可以高亮显示

【实验步骤】
令x=3,y=5.0,s1=’Python’,分别用type()函数、id()函数查看x、y、s1的类型和内存地址。
实验截图:

2、定义变量“a=3,b=4,c=5”,利用PythonIDLE编程,求下列表达式a==b、nota<=c、(a>b)and (b<c)、a<b<c、(a!=b)or(c%a**3>b) 、aand b、aor b的值。截图记录实验内容。
实验截图:

3、定义两个整型变量“a=12,b=5”,通过PythonIDLE编程,计算a与b之间的乘积、取整、幂运算;参考图1所示的形式打印出算术运算对应的值,要求每一个算术运算单独用一个print()函数进行输出。截图记录实验内容。

图1加减运算举例
实验截图:

4、利用PythonIDLE编程,截图记录实验内容:定义变量“x=6,y=4,z=9”,利用Python中的数学函数和随机数函数求值。
(1)求x,y,z三个变量中的最大值和最小值;
(2)生成[x,z]范围内的整数和随机小数;
(3)求三个数之和的平方根;
(4)以下数学表达式转换为Python表达式,并计算它的值。
实验截图:


【思考题】
1.用Python表达式来表示以下句子。
(1)m=238,求正整数m的个位数字、十位数字和百位数字。
(2)随机生成1个1-20之间的整数,求这个整数的三次方根,结果保留3位小数。
2.给出下列表达式的结果,并描述表示计算的过程。
(1)5%3+3//5*2
(2)3+4>5and 5==6
(3)7%3+6*4-4/5
(4)'3'not in 'a3bc' or 3 in [1,2,3] and '2' is [2]
3.随机产生一个6位数,每位数字是1-8之间的任意整数。
实验项目二 组合数据类型(列表与元组)
【实验目的】
1.创建、访问、修改和删除这些数据结构中的元素。
2.使用内置函数和方法对数据进行排序、搜索、切片等操作。
【实验内容】
1、利用PythonIDLE完成以下语句的编程:
(1)利用list函数创建名为vehicle的列表,包含’train’、‘bus’、’car’、’subway’、’ship’、‘bicycle’6个元素;
(2)将新元素‘plane’添加到元素’train’前面,然后输出vehicle的列表;
(3)将元素‘bicycle’修改为’bike’;
(4)随机从列表vehicle中抽取一个元素;
(5)新建veh元组,使veh中的元素与列表vehicle的元素相同,然后输出veh元组;
(6)将元组veh中索引为奇数的元素存储于元组t1中,将元组veh中索引为偶数的元素存储于元组t2中,输出t1,t2;
(7)将元组t1乘以2,得到的结果存于元组t3中,输出t3。
2.利用PythonIDLE完成以下语句的编程:
(1)给定一个由10个整数值构成的列表list1=[20,18,17,14,9,8,7,4,3,1],将list1中的元素随机排列,输出新的list1。
(2)定义列表list2=[22,100,18,200,16,300,14,400,12,500]只对列表list2中下标为偶数的元素进行升序排列。
3.利用PythonIDLE完成以下语句的编程:
(1)定义两个列表list1和list2,分别包含4个整数和3个整数
(2)将列表list2合并到list1中,并在list1末尾再添加两个数字70和140,输出list1.
(3)对list1降序排列,最后输出最终的list1。
【实验环境】
python3.6及其以上版本
【实验步骤】
1、利用PythonIDLE完成以下语句的编程:
(1)利用list函数创建名为vehicle的列表,包含’train’、‘bus’、’car’、’subway’、’ship’、‘bicycle’6个元素;
(2)将新元素‘plane’添加到元素’train’前面,然后输出vehicle的列表;
(3)将元素‘bicycle’修改为’bike’;
(4)随机从列表vehicle中抽取一个元素;
(5)新建veh元组,使veh中的元素与列表vehicle的元素相同,然后输出veh元组;
(6)将元组veh中索引为奇数的元素存储于元组t1中,将元组veh中索引为偶数的元素存储于元组t2中,输出t1,t2;
(7)将元组t1乘以2,得到的结果存于元组t3中,输出t3。
IDLE实验截图:


2.利用PythonIDLE完成以下语句的编程:
(1)给定一个由10个整数值构成的列表list1=[20,18,17,14,9,8,7,4,3,1],将list1中的元素随机排列,输出新的list1。
(2)定义列表list2=[22,100,18,200,16,300,14,400,12,500]只对列表list2中下标为偶数的元素进行升序排列。
IDLE截图:

3.利用PythonIDLE完成以下语句的编程:
(1)定义两个列表list1和list2,分别包含4个整数和3个整数
(2)将列表list2合并到list1中,并在list1末尾再添加两个数字70和140,输出list1.
(3)对list1降序排列,最后输出最终的list1。
IDLE截图:

【思考题】
1.某互联网公司近一段时间的股票收盘价格分别为:12.02,12.98, 13.21, 13.56,12.65,12.05,11.17,12.05,11.17。请建立一个列表存储这些数据,编写程序解决如下问题:
(1)上述一共有几个数据?
(2)统计收盘价为12.05元的次数;
(3)找出收盘价中的最小数据,并删除首次出现的最小数据,最后输出列表的数据。
2.编写程序,生成一个包含30个[0,100]之间随机整数的列表。
实验项目三 组合数据类型(字符串+字典+集合)
【实验目的】
掌握字符串、字典和集合的使用
【实验内容】
1、利用PythonIDLE或JupyterLab完成以下语句的编程:
(1)创建名为str1的字符串对象”Lifeis short, you need Python.”;
(2)利用字符串索引或切片分别读取(输出)字符串str1中的’Python’子串、’Life’子串
(3)分别使用index或find方法查找子串’short’的索引位置、查找子串’you’在[16,19]索引范围内的首次出现的位置(索引);
(4)通过字符串切片获取str1的子串”youneed Python”,将其赋给新的字符串str2;
(5)利用lower、upper、切片等方法分别输出字符串str2的大写形式、小写形式和”Youneed PYTHON” 形式;
(6)通过split方法对字符串str1分别按照空字符串和逗号进行分割,并求相应的分割后元素个数;
(7)通过range函数创建1-20之间的所有偶数对应的数字字符串构成的列表num1,并通过print输出所有数字字符串元素;
(8)将num1中所有字符元素通过“-”连接成一个新字符串str3,并计算字符串str3中”-”出现的次数。
实验截图:


2、利用PythonIDLE或JupyterLab完成以下语句的编程:
(1)通过{}创建存储成绩的字典dict1,该字典有键值对(‘math’,92)、(‘biologic’,87.5)、(‘chemistry’,93);
(2)利用dict函数创建字典dict2,包含键值对同(1);
(3)利用keys、values和items方法分别获取字典中所有键、所有值和所有键值对;
(4)利用两种方法查找键’biologic’对应的值;
(5)判断键’math’是否存在于dict1中,如果存在,则修改其对应值为88.6;
(6)利用update方法为字典dict1增加键值对项(‘art’,93.5)、(‘history’,85),更新键’math’的值为96;
(7)删除字典dict1中的键值对(’biologic’,87.5);
(8)随机删除字典dict1中的某一键值对。
实验截图:


3、利用PythonIDLE或JupyterLab完成以下语句的编程:
(1)利用range函数创建由1-8整数构成的列表num1;利用range函数创建由1-8所有偶数构成的列表num2;
(2)利用列表推导式创建列表num2,该列表包含列表num1中所有的偶数;
(3)利用set函数分别通过num1和num2创建集合s1、s2;
(4)将集合s2赋给新的集合s3,利用add或”|=”方法为集合s3增加元素9和10;删除集合s3中的元素2和4;
(5)利用for循环输出集合s3中的所有元素;
(6)利用列表推导式输出集合s3中所有的奇数元素;
(7)输出集合s1和s3的并集、交集、差集和异或(对称差)集。
(8)判断s2是否为s3的子集。
实验截图:


【实验环境】
Python3.8 / Jupyter lab
【思考题】
1、通过input输入一段字符串,要求输出字符串中包含的所有各个不同的字符及其个数。例如:输入,abcdefgabc,则输出:”a:2b:2 c:2 d:1 e:1 f:1 g:1”。
实验项目四 顺序与选择结构
【实验目的】
掌握顺序与选择结构的使用
【实验内容】
利用PythonIDLE或JupyterLab完成以下语句的编程:
(1)通过eval函数可以将字符串转换成整型、列表、元组、字典、集合,分别列举示例;
(2)定义变量a=3.1415926,通过字符串插值分别输出变量a、宽度为10精度为3左对齐的变量a、宽度为10精度为3右对齐的变量a;
(3)定义商品和价格两个变量goods、price,通过字符串插值格式符输出商品及其价格,要求商品变量的宽度为10左对齐,价格变量的宽度为8精度为2右对齐。例如:输出“Theprice of *** is **** ”;
(4)通过input函数和eval函数实现输入含3个元素的列表alist,通过print函数输出列表alist
(5)通过列表拆包将列表alist中的三个元素分别赋给变量a,b,c,再通过包含间隔符“>”的print函数输出a,b,c。
(6)利用range函数、if语句、for循环分别创建1-20之间所有奇数构成的列表L1、偶数构成的列表L2;
(7)利用含if语句的列表推导式完成(6)中列表的创建。
实验截图:


利用PythonIDLE或JupyterLab完成以下语句的编程:
(1)利用if-else语句显示用户所输入数值的绝对值;
(2)利用三元表达式显示用户所输入数值的绝对值;
(3)通过input函数输入一串字符串来创建字符串变量x;利用if-else语句完成,当x为非空字符串时(x.strip()可以获取去掉空格的字符串),输出去掉字符串x首字母的子串;当x为空字符串时,输出“输入字符串为空”;
(4)设计一段程序根据员工工资来调整月工资增量。如果“工资<5000”,则增加500元,若“5000<=工资<6000”,则增加700元,若“工资>=6000”,则增加800元。通过input输入某员工原工资,分别输出原工资和增加后的现工资。
实验截图:


3、利用PythonIDLE或JupyterLab完成以下语句的编程:
(1)通过input输入分钟数,将其转化为小时和分钟表示。例如,输入360分钟,则输出为:“6小时6分钟”(字符串格式符建议采用字符串插值方法);
(2)If语句中条件表达式的值为True或False,请举例说明各种数据类型(不少于三种数据类型)中哪些值为True或False。如:{1,2,3}为True,’ab’字符串为True。参考下图中的做法列举示例。

(3)通过input输入三角形的3条边,判断它们是否能组成一个三角形。若能,计算并输出三角形的面积;若不能,输出“不能构成三角形”;
(4)编写Python程序,实现以下函数:。要求通过输入x的值,求y的值并输出。
实验截图:


【实验环境】
【思考题】
1、输出1000以内的所有水仙花数。
实验项目五 循环结构(1)
【实验目的】
掌握while、for循环的基本应用。
【实验内容】
1.利用while循环输出20-1间的所有整数。

2.分别利用for循环和列表推导式输出20-1间的所有整数。

3.利用while与for循环输出字符串’Python’中的每一个字符和其对应的索引。

4.利用while循环输出1-100所有的奇数之和、偶数之和。

5.利用for循环输出1-100所有的奇数之和、偶数之和。

6.分别利用循环和推导式创建1-10之间的所有整数平方对应的数字字符构成的列表num3。

7.创建一个表示员工收入的字典dic1,该字典的键为姓名、值为收入。其中王明收入4300元、周亮收入5232元、李红收入6150元,赵辉收入4800元和张琳收入5400元。利用for循环给所有的员工工资增加500元,输出更新后的字典dict1。

【实验环境】
Python3.8
【思考题】
1.编写程序,实现用户名和密码的输入,当用户名为admin且密码为123456时,显示“登录成功”,否则显示“登录失败,请重新输入”,允许最大输入次数为3次,超过3次没有输入正确,则显示“今天最大次数已用完,请明天再登录”。
2.按照以下方案给员工增加工资:“工资<5000”的员工增加500元,“5000<=工资<6000”的员工增加700元,“工资>=6000”的员工增加800。利用选择语句和循环完成工资字典的更新,并输出dict1。
实验项目六 循环结构(2)
【实验目的】
掌握循环控制语句与循环的高级应用。
【实验内容】
1.创建存储学生课程成绩的空列表L1,利用随机函数产生10个学生的成绩,范围为0-100之间的整数,并存储于列表L1中。

2.利用for循环求列表list1学生成绩的平均值

3.利用for循环求列表list1学生成绩的最大值和最小值

4.求1-100之间所有素数之和。

5.输入n的值,计算s=1+1/2!+…+1/n!的值

6.从键盘输入若干整数,求其中所有正数的和,遇到负数便结束该操作

7.分别利用while循环和for循环,求500以内能被15整除的所有正整数,并统计个数。


【实验环境】
Python3.8
【思考题】
1.输入两个字符串,找出两个字符串中相同的字符元素。要求利用循环语句或其他方法完成程序的设计。
2.请编写程序,首先随机生成4个字符的验证码并输出,用户再输入验证码,如果用户输入的验证码与系统随机生成的验证码相同,显示‘验证成功’,否则显示:请重新输入验证码。具体要求如下:
(1)验证码由
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*中的字符组成;
(2)每个验证码长度固定为4个字符。
实验项目七 函数与模块
【实验目的】
熟练掌握函数的定义与调用,函数的参数传递与变量作用域。
【实验内容】
一、编写函数fun2,用于判断某个年份是否为闰年,调用该函数,判断2000年、1900年是否为闰年。
提示:判断任意年份是否为闰年,需要满足以下条件中的任意一个:
该年份能被4整除同时不能被100整除;
②该年份能被400整除。

二、普通函数与匿名函数的转换:
(1)请将下面的普通函数转变为匿名函数。
deffuna(x, y=3):
return x * y
(2)请将下面的匿名函数转变为普通函数并调用。
lambdaa : a if a % 2 else None

三、若将某素数各位数字的顺序颠倒后得到的数仍是素数,则此数为可逆素数。编写函数,求出100以内的可逆素数。

四、使用递归函数编写一个函数power(),模拟内置函数pow(),即power(x,y) 用于计算并返回x 的y次幂的值。

【实验环境】
JupyterLab或PythonIDLE编程环境。
【思考题】
如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,A不等于B,则将整数A和B称为亲密数对。求3000以内的全部亲密数对。
实验项目八 综合训练
【实验目的】
复习Python课程的重要知识点。
【实验内容】
一、编写程序,生成包含大于0,小于等于50的10个随机数的列表,然后将前5个元素升序排列,后5个元素降序排列,并输出结果。

实验思路:
导入所需模块:
首先,需要导入random模块,因为它包含了生成随机数的函数。
创建空列表:
然后,创建一个名为al的空列表,用于存储即将生成的随机数。
生成随机数:
使用for循环,结合range(10)来迭代10次。在每次迭代中,使用random.randint(0,50)生成一个0到50之间的随机整数(包括0但不包括51),并使用append()方法将其添加到al列表中。
打印原始列表:
使用print(al)打印出包含随机数的原始列表。
对列表进行排序:
使用切片操作al[0:5]选取列表的前5个元素,并使用sorted()函数将它们升序排列。然后将排序后的列表重新赋值给al的前5个位置。
同样地,使用切片操作al[5:]选取列表的后5个元素,并使用sorted()函数结合reverse=True参数将它们降序排列。然后将排序后的列表重新赋值给al的后5个位置。
打印排序后的列表:
最后,使用print(al)打印出排序后的列表。

实验思路:
导入random模块:
首先,我们需要导入Python的random模块,因为它提供了生成随机数的功能。
生成随机数列表:
使用列表推导式(ListComprehension)来生成一个包含10个随机数的列表。在这个列表中,每个元素都是通过random.randint(0,50)生成的,表示生成的随机数在0(包括)到50(包括)之间。
列表推导式的结构是[expressionfor item in iterable if condition],但在这个例子中,我们没有使用ifcondition部分,因为我们总是需要10个随机数。因此,代码简化为[random.randint(0,50) for i inrange(10)],其中i是循环变量,但它在这个表达式中没有被直接使用,只是作为一个占位符来确保循环执行10次。
打印原始列表:
使用print(al)打印出生成的随机数列表,以便我们可以看到在排序之前的随机数顺序。
对列表进行排序:
接下来,我们使用切片和sorted()函数来对列表进行排序。sorted()函数会返回一个新的已排序的列表,而不会改变原始列表。但是,由于切片操作返回的是列表的一个视图,我们可以直接将排序后的结果赋值给原列表的相应切片部分。
al[0:5]表示列表的前5个元素(索引从0到4)。我们使用sorted(al[0:5])来获取这5个元素的升序排列,并将结果赋值回原列表的相应位置。
al[5:]表示列表的第6个元素到最后一个元素。我们使用sorted(al[5:],reverse=True)来获取这5个元素的降序排列,并将结果赋值回原列表的相应位置。
打印排序后的列表:
最后,我们再次使用print(al)打印出排序后的列表,以便验证结果。
二、编写程序,输出1-1000间能被17整除的所有奇数,并计算这些数的和。

实验思路:
初始化变量:
首先,初始化一个变量sum1为0,这个变量将用于存储所有能被17整除的奇数的和。
使用for循环遍历奇数:
由于题目要求找出1-1000之间的奇数,因此可以使用range(1,1000, 2)来生成一个从1开始,步长为2(即只生成奇数),直到999结束的序列。这样,循环中的i就会是1-1000之间的所有奇数。
检查每个奇数是否能被17整除:
在循环体内部,使用条件语句ifi % 17 == 0来检查当前的奇数i是否能被17整除。如果i除以17的余数为0,则说明i可以被17整除。
累加能被17整除的奇数:
如果当前的奇数i能被17整除,就将其加到sum1上。
输出结果:
当循环结束后,使用print函数输出这些能被17整除的奇数的和。

实验思路:
初始化一个空列表:
首先,创建一个名为L1的空列表,这个列表将用于存储所有能被17整除的奇数。
使用for循环遍历奇数:
和方法一类似,使用range(1,1001, 2)来生成1到1000之间的所有奇数。range函数的第三个参数2确保步长为2,从而只生成奇数。
检查每个奇数是否能被17整除:
在循环体内部,使用条件语句ifi % 17 == 0来检查当前的奇数i是否能被17整除。
将能被17整除的奇数添加到列表中:
如果当前的奇数i能被17整除,就使用append方法将其添加到L1列表中。
输出结果:
当循环结束后,首先使用print(L1)打印出所有能被17整除的奇数列表。然后,使用sum(L1)计算这些数的和,并通过print函数和格式化字符串f-string输出结果。

实验思路:
使用列表推导式生成符合条件的奇数列表:
列表推导式是Python中一种快速生成列表的语法结构。在这个问题中,我们可以直接使用列表推导式来遍历1到1000之间的所有奇数(步长为2),并检查每个奇数是否能被17整除。如果某个奇数i满足条件i%17==0,那么它就会被添加到最终的列表L1中。
列表推导式的语法结构是[expressionfor item in iterable ifcondition],其中expression是列表中的每个元素(在这个例子中是i),item是每次迭代时iterable(可迭代对象)中的元素(在这个例子中是range(1,1001,2)生成的奇数),condition是一个可选的条件表达式(在这个例子中是i%17==0)。
打印符合条件的奇数列表:
在列表推导式执行完毕后,我们得到了一个包含所有能被17整除的奇数的列表L1。然后,我们使用print(L1)来打印这个列表。
计算并打印这些数的和:
接着,我们使用Python内置的sum()函数来计算列表L1中所有数的和。sum()函数会遍历列表中的每个元素,并将它们相加。最后,我们使用print(f'满足条件的数的和为:{sum(L1)}')来格式化并打印结果。这里使用了格式化字符串(f-string)来嵌入变量sum(L1)的值。
三、编写函数stat()并调用,程序执行示例如图2:分别统计出传入字符串参数(字符串参数可以是一个参数或多个参数)的英文字母、空格、数字和其它字符的个数。

实验思路:
定义函数:
定义一个名为stat的函数,该函数接受任意数量的字符串参数(通过*args)。
遍历每个字符串参数:
使用for循环遍历每个传入的字符串参数。
初始化计数器:
对于每个字符串,初始化四个计数器来分别记录英文字母、空格、数字和其他字符的数量。
字符分类并计数:
使用嵌套循环遍历字符串中的每个字符,并根据字符的类型增加相应的计数器。
打印统计结果:
在遍历完一个字符串后,打印出该字符串的字符统计结果。
调用函数:
在函数定义之外,调用stat函数并传入示例字符串作为参数。

实验思路:
定义函数:
首先,定义一个名为stat的函数,该函数接受任意数量的字符串参数(通过使用*param实现)。
遍历每个字符串参数:
在函数内部,使用len(param)获取传入参数(字符串列表)的长度,然后使用for循环遍历每个字符串。
初始化计数器:
对于每个字符串,我们需要初始化四个计数器来分别记录英文字母、空格、数字和其他字符的数量。在循环开始之前,将这些计数器都设为0。
字符分类并计数:
使用嵌套循环来遍历字符串中的每个字符。对于每个字符,使用if-elif-else结构来判断它属于哪一类,并增加相应的计数器。
each.isalpha():检查字符是否为英文字母(包括大小写)。
each.isdigit():检查字符是否为数字。
each=='':检查字符是否为空格(注意这里应该检查的是空格字符'',而不是空字符串'')。
其他的情况则归为“其他字符”。
打印统计结果:
在遍历完一个字符串后,使用print函数打印出该字符串的字符统计结果。字符串的索引(在参数列表中的位置)需要加1以符合题目中的“第n个字符串”的表述。
调用函数:
在函数定义之外,调用stat函数并传入两个示例字符串作为参数。
【实验环境】
JupyterLab或PythonIDLE编程环境。
