实验一 安装和熟悉Python语言开发环境
一、实验目的 
1.掌握Python开发环境的下载和安装方法。
2.掌握Python开发环境的使用技巧。
3.能够编写简单的Python程序,掌握Python程序的运行方式。
4.能够安装和卸载第三方库。
5.掌握输入函数和输出函数的基本使用方法。
二、知识要点
1.Python是跨平台的,可以运行在Windows、Mac和各种Linux/UNIX 系统中。在
Windows系统中编写的Python程序,放到Linux系统中也是能够运行的。
2.Python开发环境IDLE是Python官方提供的交互式运行编程环境。在安装Python 
后,可以单击“开始”按钮,通过选择“Python3.7”→“IDLE(Python3.7)”来启动IDLE。通
过IDLE可以使用交互式编程模式来执行Python命令。IDLE 有一个编辑器,用来编辑
Python程序文件并运行;还有一个调试器,用来调试Python程序文件。
3.PyCharm 是一款功能强大的PythonIDE(集成开发环境),带有一整套可以帮助用
户在使用Python语言进行开发时提高效率的工具,如调试、语法高亮显示、Project管理、代
码跳转、智能提示、自动完成、单元测试、版本控制等。
4.最常用且最高效的Python第三方库的安装方式是使用pip安装。pip是Python官
方提供并维护的在线第三方库安装工具。对于同时安装Python2和Python3环境的系
统,建议使用pip3命令专门为Python3安装第三方库。
例如,安装pygame库,pip默认从网络下载pygame库安装文件并自动安装到系统中。
注意,pip(或者pip3)是在命令行(cmd)下运行的工具。 
D:\>pip install pygame 
用户也可以卸载pygame库,卸载过程可能需要用户确认。 
D:\>pip uninstall pygame

2 
可以通过list子命令列出当前系统中已经安装的第三方库,例如: 
D:\>pip list 
使用pip安装是Python第三方库的最主要的安装方式,可以安装90%以上的第三方
库。然而,由于一些历史、技术等原因,还有一些第三方库暂时无法使用pip安装,此时需要
使用其他的安装方式(如下载库安装文件后手动安装),读者可以参考第三方库提供的步骤
和方式进行安装。
三、实验内容
1.了解待安装计算机的硬件配置(操作系统是64位的还是32位的)并下载、安装
Python。
从Windows7开始,Windows系统分为32位和64位。在Windows10系统中右击桌
面上的“此电脑”图标,在弹出的快捷菜单中选择“属性”命令,然后在弹出的对话框中单击
“高级系统设置”,就可以看到32位或者64位操作系统的信息,如图1-1-1所示。
图1-1-1 查看操作系统的信息
根据Windows版本(64位还是32位)从Python的官方网站(https://www.python. 
org/)下载Python3.7对应的64位安装程序或32位安装程序,然后运行下载的EXE 安
装包。在
安装Python时要特别注意在图1-1-2中勾选“AddPython3.7toPATH”复选框,然
后单击“InstallNow”进行安装。
说明:64位操作系统只能安装在64位计算机上(CPU 必须是64位的),对计算机硬件
的要求也相对较高,同时需要安装64位常用软件,以发挥64位(x64)的最佳性能。
2.IDLE的交互式编程模式。
在安装Python后,可以单击“开始”按钮,通过选择“Python3.7”→“IDLE(Python3.7)” 
来启动IDLE。IDLE启动后的初始窗口如图1-1-3所示。

3 
图1-1-2 在Windows10上安装Python3.7的界面
图1-1-3 IDLE启动后的初始窗口
在IDLE中使用交互式编程模式来执行Python命令,直接在IDLE提示符“>>> ”的后
面输入相应的命令并回车即可。
上机实验如下例: 
>>> print("hello world") 
>>>3+5 
>>>3**2 
>>>3*2 
>>>a=1 
>>>b=2 
>>>c=3 
>>>print(a,b,c,sep=',') #结果是1,2,3 
如果执行顺利,马上就可以看到执行结果。
3.IDLE的文件编程模式。
在启动IDLE后,选择“File”→“NewFile”命令,可以启动IDLE开发环境的编辑器,通
过文件的方式组织Python程序,文件的扩展名为.py。
在程序编辑完成后,可以选择“File”→“Save/Saveas”命令保存文件,可以选择“Run”→ 
“RunModule”命令(或按F5键)运行程序。在IDLE中可以完成中、小规模Python程序的
编写与调试,IDLE为开发人员提供了许多有用的特性,如自动缩进、语法高亮显示、单词自

4 
动完成及显示命令历史等,在这些功能的帮助下,开发人员能够有效地提高自己的开发效
率。本书中的所有程序均在IDLE环境下编写与调试。
(1)上机实验在文件编程模式下计算两个数的和。
代码如下: 
a=int(input("请输入第1 个数: ")) 
b=int(input("请输入第2 个数: ")) 
print(a,'+',b,'=',a+b) 
print(a,'-',b,'=',a-b) 
print(a,'*',b,'=',a*b) 
分别输入3和4,运行结果如下: 
3 + 4 = 7 
3 - 4 = -1 
3 *4 = 12 
(2)上机实验在文件编程模式下将摄氏温度转换为华氏温度。
F=(9/5)C+32 
代码如下: 
C=float(input("请输入摄氏温度: ")) 
F=(9/5)*C+32 
print("华氏温度:", F) #输出
(3)上机实验在文件编程模式下解决鸡兔同笼问题。鸡兔同笼问题即一个笼子里面装
有鸡和兔子(鸡有两只脚,兔子有4只脚),已知鸡和兔子的总数为h,鸡和兔子的脚的总数
为f,计算鸡和兔子分别有多少只。
代码如下: 
h=int(input("头总数: ")) 
f=int(input("脚总数: ")) 
x=2*h-f/2 
y=f/2-h 
print("鸡: ", x,"兔子: ",y) 
print("鸡: %d 兔子: %d"%(x,y)) #格式控制输出
分别输入30和80,运行结果如下: 
头总数: 30↙ 脚总数: 80↙ 鸡: 20.0 兔子: 10.0 
鸡: 20 兔子: 10 
4.请读者自行练习使用IDLE的调试器。
5.请读者尝试安装第三方库。
6.请读者自行尝试安装其他开发环境,如PyCharm、Anaconda、VSCode。

5 
实验二 运算符和表达式
一、实验目的 
1.掌握Python数值类型数据和字符串的使用方法。
2.掌握将数学表达式转换成Python语言表达式的方法及注意事项。
3.掌握有关运算符的使用方法。
4.能够编写简单的Python程序,掌握Python程序的运行方式。
5.能够安装和卸载第三方库。
二、知识要点
1.input()函数可以用于数据的输入,默认接收字符串类型。对于输入的数据,可以使
用int()函数转换成整数类型或者使用eval()函数转换成数值类型,也可以使用split()等函
数放到多个变量中。
例如: 
>>>a=input("请输入第1 个数: ") 
>>> a #字符串类型
'23' 
>>> type(a) 
<class 'str'> 
>>> b=int(a) 
>>> type(b) 
<class 'int'> 
>>> b #整数类型
23 
#Python 3.7 同时输入多个值
#同时输入多个字符串,字符串之间用逗号/空格分隔
>>>a,b,c=input("请输入3 个数: ").split(",") #输入3 个数,用逗号分隔
请输入3 个数: 3,4,5 
>>> a 
'3' 
>>> b 
'4' 
>>> c 
'5' 
#同时输入多个数值,字符串之间用逗号/空格分隔
>>> a,b,c=eval(input('3 个数: ')) 
3 个数: 3,4,5 
>>> a 
3>
>> b 
4>
>> c 
5>>>

6 
2.print()函数可以格式化输出各种数据,支持%d、%f等格式符,也支持使用format() 
函数控制数据的格式。
3.在Python中运算符有算术运算符、关系运算符、逻辑运算符、赋值运算符、位运算
符、成员运算符和标识运算符7个类型。
(1)算术运算符:+、-、*、/、//(整除)、%、**(指数)。
(2)关系运算符:>、<、==、!=、<=、>=。
(3)逻辑运算符:and、or、not。
(4)赋值运算符:=、+=、-=、*=、/=、%=、**=、//=。
(5)位运算符:&、|、^表示二进制的and、or、xor运算,>>、<<表示右移和左移,~ 
表示按二进制位求反。
(6)成员运算符:in、notin。
(7)标识运算符:is、notis。
4.在数据类型转换函数中,int(x)将x转换成整数类型;float(x)将x转换成浮点数类
型;complex(real,[,imag])创建一个复数;str(x)将x转换为字符串;repr(x)将x转换为表
达式字符串;eval(str)计算字符串中有效的Python表达式;chr(x)将整数x转换为一个字
符;ord(x)将一个字符x转换为它对应的整数值;hex(x)将一个整数x转换为一个十六进制
的字符串;oct(x)将一个整数x转换为一个八进制的字符串。注意,在使用数据类型转换函
数时,提供给数据类型转换函数的数据必须是有意义的。
5.对于Python而言,变量存储的只是一个变量的值所在的内存地址,而不是这个变量
本身的值。
三、实验内容
1.表达式的书写。
(1)将数学表达式x=-b+ b2-4ac 
2a 书写成Python表达式: 
x=-b+math.sqrt(b**2-4*a*c)/(2*a) 
(2)将数学表达式23
[2ab-(|x-y|+b2)]书写成Python表达式: 
x=2*(2*a*b-(math.abs(x-y)+b*b))/3 
Python表达式遵循下列书写规则: 
(1)表达式从左到右在同一个基准上书写,无高低、大小之分。
(2)表达式中的乘号(*)不能省略。
(3)括号可以嵌套使用,但是必须成对出现,不能使用中括号和大括号。
2.输入一个十进制整数,输出其对应的二进制、八进制、十六进制形式。
代码如下: 
a=int(input('请输入一个不大于255 的正整数: ')) 
print('二进制: ',bin(a)) 
print('八进制: ',oct(a)) 
print(' 十六进制: ',hex(a))

7 
运行结果如下: 
请输入一个不大于255 的正整数: 10 
二进制: 0b1010 
八进制: 0o12 
十六进制: 0xa 
3.从键盘输入一个4位十进制整数,要求输出各位数字之和。
方法一:由于input()函数可以用于数据的输入,默认接收字符串类型,所以使用字符
串切片方式实现各位数字的获取。
代码如下: 
number = input("请输入4 位数: ") #读取输入内容
bitstr_1 = number[: 1] #读取第1 位
bitstr_2 = number[1: 2] #读取第2 位
bitstr_3 = number[2: 3] #读取第3 位
bitstr_4 = number[3: ] #读取第4 位
bitint_1 = int(bitstr_1) #把第1 位转换为int 型
bitint_2 = int(bitstr_2) #把第2 位转换为int 型
bitint_3 = int(bitstr_3) #把第3 位转换为int 型
bitint_4 = int(bitstr_4) #把第4 位转换为int 型
sum = bitint_1 + bitint_2 + bitint_3 + bitint_4 #执行加法
print(sum) #输出和
方法二:通过算术运算获取各位数字。
代码如下: 
number = int(input("请输入4 位整数: ")) 
gewei = number %10 
shiwei = number // 10 % 10 
baiwei = number // 100 % 10 
qianwei = number // 1000 
result =qianwei + baiwei + shiwei + gewei 
print("计算每位相加和: "+str(qianwei)+"+"+str(baiwei) 
+"+"+str(shiwei)+"+"+str(gewei)+"="+str(result)) 
方法三:使用map()函数。map()会根据提供的function函数对指定序列做映射,通
过把function函数依次作用在序列的每个元素上得到一个新序列并返回。
代码如下: 
number =input("请输入4 位整数: ") 
result = map(int,number) #得到新序列
print(sum(result)) #对序列求和
4.编写程序,输入球的半径,计算球的表面积和体积(结果保留两位小数)。
代码如下: 
import math 
r = float(input("请输入球的半径: "))

8 
area = 4 * math.pi * r**2 
volume = 4/3*math.pi*r**3 
print(str.format("球的表面积为: {0: 2.2f},体积为: {1: 2.2f}",area,volume)) 
5.编写程序,输入本金、年利率和年数,计算复利(结果保留两位小数)。
代码如下: 
money = int(input("请输入本金: ")) 
rate = float(input("请输入年利率: ")) 
years = int(input("请输入年数: ")) 
amount = money*((1+rate/100)**years) 
print("本金利率和为: %.2f"%amount) 
6.编写程序,输入一元二次方程的系数a、b、c,输出方程的解。
代码如下: 
import math 
a,b,c=eval(input('请输入方程的系数a、b、c: ')) 
d=b*b-4*a*c 
if d>0: 
x1=(-b+math.sqrt(d))/(2*a) 
x2=(-b-math.sqrt(d))/(2*a) 
print('方程的解x1=%.2f'%x1) 
print('方程的解x2=%.2f'%x2) 
if d==0: 
print('方程的解x1=x2=%.2f'%(-b/(2*a))) 
if d<0: 
x1=-b/(2*a) 
x2=math.sqrt(-d)/(2*a) 
print('方程的解x1=%.2f+%.2fj'%(x1,x2)) 
print('方程的解x2=%.2f-%.2fj'%(x1,x2)) 
四、编程并上机调试
1.输入某年某月某日,编写程序,判断这一天是这一年的第几天。
2.输入一个三位正整数,求其各位数字之和。例如,输入123,各位数字之和为6。
3.编写程序,实现输入两个两位正整数a、b,合并形成一个整数放在c中。合并的方式
为将a数的十位和个位数依次放在c数的百位和个位上,将b数的十位和个位数依次放在c 
数的十位和千位上。
实验三 序列的创建和使用
一、实验目的 
1.了解序列的基本概念。
2.掌握序列的索引方法。

9 
3.掌握列表的创建和使用方法。
4.掌握字典的创建和使用方法。
二、知识要点
1.可以通过列表的索引下标取出、修改、删除列表中的值,但是不能通过索引下标向列
表中增加值。
2.列表的主要操作。
(1)list():创建空列表,或者将集合、字典、元组、字符串转换为列表。
(2)append():向列表添加新元素,新元素可以是列表、字典、元组、集合、字符串。
(3)copy():复制列表元素。
(4)count(x):统计列表中指定元素的个数。
(5)index(x):检索指定元素在列表中的位置。
(6)insert(i,x):在列表中的指定位置插入元素,i代表位置,x代表元素。
(7)pop(i):取出列表中指定位置的元素并从列表中删除。
(8)remove(x):删除列表中指定的元素。
(9)del命令:对列表的元素或列表中的一段数据进行删除。
(10)sort():对列表的元素进行排序。
(11)sum(list):内置函数,返回列表元素的和。
(12)len(list):内置函数,返回列表元素的个数。
(13)max(list):内置函数,返回列表元素的最大值。
3.Python字典(dict)是一种可变容器模型,并且可以存储任何类型的对象,如字符串、
数字、元组等。字典由键和对应值(key=>value)成对组成,字典的每个键-值对中的键和
值用冒号分隔,键-值对之间用逗号分隔,整个字典包括在大括号中。
字典的主要操作如下。
(1)创建字典。
基本语法形式: 
dict = {key1: value1, key2: value2} 
另一种形式: 
dict = dict(key1=value1,key2=value2) 
(2)添加或修改字典:通过dict[key]= value进行操作。
(3)删除字典或字典中的元素。
删除字典:deldict。
删除字典中的元素:deldict[key]。
(4)遍历字典的方式。
① 通过dict.items()遍历获取字典中的所有键-值对。
② 通过dict.keys()遍历获取字典中的所有键。
③ 通过dict.values()遍历获取字典中的所有值。

10 
(5)字典的内置函数。
①cmp(dict1,dict2):比较两个字典元素。
②len(dict):计算字典元素的个数,即键的总数。
③str(dict):输出字典可打印的字符串表示。
(6)字典的内置方法。
① dict1.clear():删除字典中的所有元素。
② dict1.copy():返回一个字典副本(浅复制)。
③ dict1.fromkeys(seq[,val]):创建一个新字典,以序列seq中的元素做字典的键,val 
为字典中所有键对应的初始值。
④ dict1.get(key,default=None):返回指定键的值,如果值不在字典中,返回
default值。
⑤ dict1.update(dict2):把字典dict2的键-值对更新到dict1中。
三、实验内容
1.将一个整数列表中的数据复制到另一个列表中。
分析:这里要求的是复制数据到一个新的列表中。Python列表中数据的复制可以使
用切片“[:]”实现,也可以使用copy()实现。
代码如下: 
>>> ls = [1,2,3,4] 
>>> x = ls[:] #列表中数据的复制使用切片实现
>>> m=ls.copy() #列表中数据的复制使用copy()实现
这里修改x、m 的第4个元素为100,代码如下: 
>>> x[3]=100 
>>> m[3]=100 
>>> x #结果为[1, 2, 3, 100] 
>>> m #结果为[1, 2, 3, 100] 
>>>ls #结果为[1, 2, 3, 4] 
通过观察,发现修改x、m 列表不影响ls列表。
2.假如ls=[123,456,789,923,458,898],求各整数元素的和。
分析:使用内置函数sum()实现求和。
代码如下: 
ls =[123,456,789,923,458,898] 
s=sum(ls) 
print(s) 
3.假如有一个字典cars={'BMW':8.5,'BENS':8.3,'AUDI':7.9},实现遍历字典的键
和值的操作。
分析:items()、keys()、values()分别用于获取字典中的所有键-值对、所有键、所有值。

11 
这3个方法依次返回dict_items、dict_keys和dict_values对象,由于Python不希望用户直
接操作这几个对象,所以使用list()把它们转换成列表。
代码如下: 
cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9} 
#获取字典中的所有键-值对,返回一个dict_items 对象
ims = cars.items() 
#将dict_items 对象转换成列表
print(list(ims)) #[('BMW', 8.5), ('BENS', 8.3), ('AUDI', 7.9)] 
#访问第2 个键-值对
print(list(ims)[1]) #('BENS', 8.3) 
#获取字典中的所有键,返回一个dict_keys 对象
kys = cars.keys() 
#将dict_keys 对象转换成列表
print(list(kys)) #['BMW', 'BENS', 'AUDI'] 
#访问第2 个键
print(list(kys)[1]) #'BENS' 
#获取字典中的所有值,返回一个dict_values 对象
vals = cars.values() 
#将dict_values 对象转换成列表
print(type(vals)) #[8.5, 8.3, 7.9] 
#访问第2 个值
print(list(vals)[1]) #8.3 
4.编写程序,生成一个包含20个1~100的随机整数的列表,然后对偶数下标的元素进
行降序排列,奇数下标的元素保持不变(提示:使用切片)。
分析:对于列表x,通过[::2]形式可以获取偶数下标元素的切片。
代码如下: 
import random 
x=[random.randint(1,100) for i in range(20)] #生成20 个1~100 的随机整数的列表
print(x) 
y=x[:: 2] 
y.sort() #默认为升序排列
y.reverse() #反转列表元素,即可实现降序排列
x[:: 2]=y #赋值
print(x) 
运行结果如下: 
[87, 34, 61, 36, 98, 68, 10, 43, 74, 47, 46, 54, 25, 27, 53, 38, 5, 99, 79, 22] 
[98, 34, 87, 36, 79, 68, 74, 43, 61, 47, 53, 54, 46, 27, 25, 38, 10, 99, 5, 22] 
5.假如有列表li=["alex","eric","rain"],编写程序实现下列功能。
(1)计算列表的长度并输出。
(2)在列表中追加元素"seven",并输出添加元素后的列表。
(3)在列表中的第1个位置插入元素"Tony",并输出添加元素后的列表。
(4)修改列表中第2个位置的元素为"Kelly",并输出修改元素后的列表。

12 
(5)删除列表中的元素"eric",并输出删除元素后的列表。
(6)删除列表中的第2个元素,并输出所删除元素的值和删除元素后的列表。
(7)删除列表中的第2个和第3个元素,并输出删除元素后的列表。
(8)将列表中的所有元素反转,并输出反转元素后的列表。
代码如下: 
li = ["alex", "eric", "rain"] #(1) 
print(len(li)) 
li.append("seven") #(2) 
print(li) 
li.insert(0,"Tony") #(3) 
print(li) 
li[1]="Kelly" #(4) 
print(li) 
li.remove("eric") #(5) 
print(li) 
new_li=li.pop(1) #(6) 
print(li,new_li) 
del li[1: 3] #(7) 
print(li) 
li = ["alex", "eric", "rain"] 
li.reverse() #(8) 
print(li) 
运行结果如下: 
3 ['alex', 'eric', 'rain', 'seven'] 
['Tony', 'alex', 'eric', 'rain', 'seven'] 
['Tony', 'Kelly', 'eric', 'rain', 'seven'] 
['Tony', 'Kelly', 'rain', 'seven'] 
['Tony', 'rain', 'seven']Kelly 
['Tony'] 
['rain', 'eric', 'alex'] 
四、编程并上机调试
1.编写程序,生成一个包含10个随机整数的列表,并求出最大值和最小值。
2.编写程序,生成一个包含20个随机整数的列表,并删除第一个元素,并将列表中的
所有元素之和追加到列表中。
3.编写程序,输入一个整数(1~12)表示月份,输出该月份对应的花名(用字典实现)。
月份对应的花名为: 
"1 月":"梅花","2 月":"杏花","3 月":"桃花","4 月":"牡丹花","5 月":"石榴花","6 月":"莲
花","7 月":"玉簪花","8 月":"桂花","9 月":"菊花","10 月":"芙蓉花","11 月":"山茶花", 
"12 月":"水仙花" 
例如,输入6,则输出6月是莲花。

13 
4.已知有列表lst=[54,36,75,28,50],请完成以下操作。
(1)在列表的尾部插入元素42。
(2)在元素28的前面插入66。
(3)删除并输出28。
(4)将列表按降序排列。
(5)清空整个列表。
实验四 选择结构的使用
一、实验目的 
1.了解程序控制的基本概念。
2.掌握选择结构及选择嵌套结构的程序设计。
3.掌握if语句、if…else语句和if…elif…else语句的使用方法。
二、知识要点
在程序中选择结构可以用if语句、if…else语句和if…elif…else语句实现。
1.if语句。if语句用来判断给出的条件是否满足,然后根据判断的结果(即真或假)决
定是否执行给出的操作。
2.if…else语句。if…else语句是一种双选结构,用于在两组备选动作中选择其一。
if…else语句的语法格式如下: 
if 表达式: 
语句1 
else: 
语句2 
3.if…elif…else语句。有时候需要在多组动作中选择一组执行,这时就会用到多选结
构,对于Python语言来说就是if…elif…else语句。该语句可以利用一系列条件表达式进
行检查,并在某个表达式为真的情况下执行相应的代码。需要注意的是,虽然if…elif…else 
语句的备选动作较多,但是有且只有一组动作被执行。该语句的语法格式如下: 
if 表达式1: 
语句1 
elif 表达式2: 
语句2 
… 
elif 表达式n: 
语句n 
else: 
语句n+1 
注意:最后一个elif子句之后的else子句没有进行条件判断,它实际上处理和前面所
有条件都不匹配的情况,所以else子句必须放在最后。

14 
三、实验内容
1.编写程序,输入一个人的体重和身高,计算出BMI指数并判断该人的体形。
BMI指数是用体重除以身高的平方得到的数字,它是目前国际上常用的衡量人体胖瘦
程度及是否健康的一个标准。成人的BMI指数低于18.5为偏瘦,18.5~23.9属于正常, 
24~27属于偏胖。
代码如下: 
weight = eval(input('请输入您的体重(kg): ')) 
height = eval(input('请输入您的身高(m): ')) 
BMI = weight/height**2 
if BMI<18.5: 
print('您的体形偏瘦') 
elif BMI >=18.5 and BMI<25: 
print('您的体形正常') 
else: 
print('您的体形偏胖') 
2.编写程序,输入多个整数(用逗号分隔),完成以下操作。
(1)用这些整数创建一个元组。从键盘输入一个整数,判断元组中是否存在该整数,如
果存在则提示存在,否则提示不存在。
代码如下: 
a=eval(input("输入多个整数,并用逗号分隔: ")) #eval()将字符串当成有效的Python 
#表达式来求值
b=int(input("输入要查询的整数: ")) 
if b in a: 
print("存在") 
else: 
print("不存在") 
说明:使用eval()可以实现列表、字典、元组和字符串之间的转换。
(2)用这些整数创建一个列表。从键盘输入一个整数,判断列表中是否存在该整数,如
果存在则将其删除,否则将其添加到列表中。
代码如下: 
m=input("输入多个整数,并用逗号分隔: ") 
a=eval("["+m+"]") 
b=int(input("输入要查询的整数: ")) 
if b in a: 
a.remove(b) 
else: 
a.append(b) 
print(a) 
运行结果如下:

15 
输入多个整数,并用逗号分隔: 2,3,4,5↙ 输入要查询的整数: 4↙ 
[2, 3, 5] 
注意:↙代表按回车键。
3.编写程序,输入一个三位正整数,找出其中最大的一位数字并输出。
分析:先将三位正整数的各位上的数字分离出来,再进行比较。
代码如下: 
a=int(input("请输入一个三位正整数: ")) 
a1=a %10 #个位
a2=a/10 %10 #十位
a3=a/100 #百位
if a1>a2: 
max_a =a1 
else: 
max_a =a2 
if max_a>a3: 
max_a = max_a 
else: 
max_a =a3 
print(max_a) 
实际上,分离一个三位正整数的数字也可以使用divmod(),它可以同时进行整除和
求余。 
a1, a2 = divmod(a, 100) 
a2, a3 = divmod(a2, 10) 
print(a1,a2,a3) #百位、十位、个位
思考:5位正整数如何找出其中最大的一位数字并输出? 
四、编程并上机调试
1.编写程序计算购买地铁票时的应付款。购买地铁票的规定为乘1~4站,3元/位;乘
5~9站,4元/位;乘9站以上,5元/位。输入站数和人数,输出应付款。例如: 
请输入站数和人数: 5,3↙ 应付款: 12 
2.建立一个姓名和成绩对应的字典,从键盘输入一个姓名,判断该姓名在字典中是否
存在,如果存在,将其成绩改成90分,否则提示不存在。
实验五 循环结构的使用
一、实验目的 
1.了解程序控制的基本概念。

16 
2.掌握循环结构及循环嵌套结构的程序设计。
3.掌握while语句和for语句的使用方法。
二、知识要点
在程序中循环结构可以用while语句和for语句实现。
1.while语句。while语句用于循环执行程序,即在某条件下循环执行某段程序,以处
理需要重复处理的相同任务。其语法格式如下: 
while 判断条件: 
语句1 
else: 
语句2 #当循环条件不满足时执行语句2 
while循环通常不用else关键字。
2.for语句。使用for语句可以遍历任何序列,如一个列表、一个元组或者一个字符串。
通俗而言,遍历就是从第一个元素到最后一个元素依次访问一次。for语句的语法格式
如下: 
for 元素in 序列 
循环体
else: 
语句2 #当循环结束时执行语句2 
for语句每循环一次便从待遍历序列中依次取出一个元素供循环使用,直到所有元素取
完为止,当循环结束时执行语句2。for循环通常不用else关键字。
注意:当循环结构中有else关键字时,else后面的语句2在while循环和for循环正常
结束时执行。如果循环被break语句结束,则不会执行else后面的语句2。
三、实验内容
1.编写程序,求级数1*2+2*3+3*4+4*5+…+n*(n+1)+…的前n项的和。
分析:这是一个计数循环,每一个加数可以由数列的通项公式求得。
代码如下: 
n=int(input("请输入一个正整数: ")) 
sum=0 
for i in range(1,n+1): 
a = i*(1+i) 
sum = sum + a 
print(sum) 
思考:求和问题的算法设计实际上应用了迭代算法的思想,请读者自行理解。
2.一个小球从n米的高度落下,每次落地后反弹为原来高度的一半再落下,球在10次
落地后未再弹起。编写程序,求小球共经过了多少米? (要求n为偶数) 
分析:这是一个9次的计数循环求和,其中的加数(小球弹起的高度)又应用了迭代算

17 
法。(提示:需要将和初始化为n) 
代码如下: 
n=int(input("请输入一个正整数: ")) 
s=n 
for i in range(1,10): 
n=n/2 
s+=2*n 
print(s) 
3.一个整数,加上100后是一个完全平方数(如果一个正整数a是某个整数b的平方, 
那么这个正整数a是完全平方数),再加上168又是一个完全平方数。编写程序,输出n以
内符合这种特征的整数的个数。
分析:这是一个双重循环嵌套应用穷举法的题目。外层循环遍历n以内的所有整数, 
两个内层循环又分别应用穷举法判断此数加上100及此数加上268后得到的两个新数是否
为完全平方数。
代码如下: 
n=int(input("请输入一个正整数: ")) 
k=1 
for i in range(1,n): 
a=i+100 
flag1=False #标志位 
for j in range(1,a+1): #j<=a 
if a==j*j : 
flag1=True 
break 
a=i+268 
flag2=False #标志位 
for j in range(1,a+1): 
if a==j*j: 
flag2=True 
break 
if flag1 and flag2: 
print("符合这种特征的整数: ",i,"加100",i+100,"加268",i+268) 
k=k+1 
print("个数: ",k) 
运行结果如下: 
请输入一个正整数: 1000↙ 符合这种特征的整数: 21 加100 121 加268 289 
符合这种特征的整数: 261 加100 361 加268 529 
个数: 3 
思考:找出一个范围内的所有指定数,这是一个常见的应用,通常使用穷举法进行遍
历。这道题又借鉴了判断素数的方法,请对这种应用进行总结。
4.斐波那契数列由著名的意大利数学家Fibonacci以兔子繁殖为例而引入,故又称“兔

18 
子数列”,其数值为1,1,2,3,5,8,13,21,34,…。在数学上,这一数列以如下递推方法定义: 
F(0)=1,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2)。
编写程序,输出斐波那契数列。
分析:首先调用input()输入要输出的斐波那契数列的长度,然后把斐波那契数列存储
在一个序列中,并逐个输出序列的元素。
代码如下: 
#输入斐波那契数列的长度
FibonacciUptoNumber = int(input('Please input a Number : ')) 
n = FibonacciUptoNumber 
fibs = [1, 1] 
for number in range(n-2): 
fibs.append(fibs[-2]+ fibs[-1]) 
print(fibs) 
5.设计删除一个列表中重复元素的程序。
分析:首先调用List.sort()对序列进行排序,然后调用last= List[-1]语句从后向前
找出重复的元素,最后逐个输出不重复的元素。
代码如下: 
#List=eval(input("请输入列表: ")) #从键盘输入列表
List=[34,67,67,45,67,33,44,34,68,23] 
List.sort() 
last = List[-1] #最后一个元素
print(List) 
print(range(len(List)-2, -1, -1)) 
for i in range(len(List)-2, -1, -1): #从倒数第二个元素开始 
if last==List[i]: 
del List[i] 
else: 
last=List[i] 
print(List) 
运行结果如下: 
[23, 33, 34, 34, 44, 45, 67, 67, 67, 68] 
range(8, -1, -1) 
[23, 33, 34, 44, 45, 67, 68] 
6.编写程序,生成一个包含50个随机整数的列表,然后删除其中的所有奇数。(提示: 
从后向前删。) 
分析:采用反向索引,从列表中的最后一个元素逐一判断是否为奇数,如果是,则使用
List.remove(元素)方法删除元素。
代码如下: 
import random 
list_1 = []

19 
for i in range(10): #生成包含50 个随机整数的列表 
list_1.append(random.randint(0,100)) 
print('生成的随机整数列表为: \n',list_1) 
n = len(list_1) #计算列表的长度
s1 = 0 #计算被删除的奇数元素的个数
for i in range(n-1,-1,-1): #反向索引 
#判断索引元素是否为奇数 
if list_1[i]%2 ! = 0: 
print('\n 被删除的奇数元素为: ',list_1[i]) 
list_1.remove(list_1[i]) #删除列表中的奇数元素 
s1 += 1 
print('删除的奇数元素的个数为: %d\n #最终随机整数列表为: \n'%(s1),list_1) 
运行以上程序,如果循环采用正向索引,是否会出现问题? 分析一下原因。 
for i in range(0,len(list_1)): #正向索引
7.有一个已升序排列的列表,现输入一个数,要求按原来的规律将其插入列表中。
分析:首先判断边界情况,然后处理在中间插入的情况。
代码如下: 
a =[1,4,6,9,13,16,19,28,40,100] 
insert_num = int(input("请输入插入的数字: ")) 
if insert_num <= a[0]: 
a.insert(0,insert_num) 
elif insert_num >= a[len(a)-1]: 
a.insert(len(a) ,insert_num) 
else: 
for i in range(len(a)): 
if insert_num > a[i]and insert_num <= a[i+1]: 
a.insert(i+1,insert_num) 
break 
print(a) 
四、编程并上机调试
1.输入一个数n,输出1~n中的所有完数。完数是指一个数恰好等于它的因子之和, 
如6=1+2+3,6就是完数。
2.从键盘上输入一个两位的整数,求该数以内所有能被3整除的奇数的个数。
3.输入一个成绩序列,输出各个成绩等级的人数。
数据:score=[45,98,65,87,43,83,68,74,20,75,85,67,79,99]。
等级:A(100~90),B(89~80),C(79~70),D(69~60),E(60以下)。
4.统计重复数字。
(1)随机生成1000个整数,数字的范围为[20,100]; 
(2)升序输出所有不同的数字及每个数字重复的次数。
5.现有一个字典存放学生的学号和成绩,成绩列表中的3个数据分别是学生的语文、

20 
数学和英语成绩: 
dictScore={"01":[67,88,45],"02":[97,68,85],"03":[98,97,95],"04":[67,48,45], 
"05":[82,58,75],"06":[96,49,65]} 
编写程序,返回每个学生的学号及其最高分。
6.求每个学生的平均成绩。
学生的成绩: 
s={"Teddy":[100,90,90],"Sandy":[100,90,80],"Elmo":[90,90,80]} 
输出结果: 
{'Teddy': 93, 'Sandy': 90, 'Elmo': 86} 
实验六 函数的定义和使用
一、实验目的 
1.掌握定义函数和调用函数的方法。
2.掌握函数实参与形参的对应关系,以及传递的方法。
3.理解函数的嵌套调用,以及局部变量和全局变量的区别。
4.学习在程序设计中运用函数解决实际问题,体会使用函数在提高代码的可读性及程
序开发效率方面的重要性。
二、知识要点
1.函数的定义。函数是组织好的、可重复使用的、用来实现一定功能的代码段。函数
能提高应用的模块性和代码的重复利用率。在Python中有内置函数,如print(),用户也可
以自定义函数。用户自定义函数的基本形式如下: 
def 函数名(函数参数): 
函数体 
return 表达式或者值
在Python中使用def关键字进行函数的定义,不用指定返回值的类型。函数的参数可
以是零个、一个或者多个,函数的参数也不用指定类型。函数的返回值是通过函数中的
return语句获得的。如果没有return语句,则自动返回None(空值)。
2.函数的调用。在定义函数之前,不允许调用该函数。如果要调用一个函数,需要知
道函数的名称和参数。在调用函数的时候,如果传入的参数的数量和类型不对,会报
TypeError的错误。
3.函数的形参和实参。形参的全称是形式参数,在使用def关键字定义函数时函数名
后面括号中的变量称为形式参数。实参的全称为实际参数,在调用函数时提供的值或者变