实验二 Python运算符和内置函数的使用
一、实验目的和要求
(一)熟练掌握运算符的使用。
(二)熟练掌握内置函数的使用。
二、实验内容
(一)输入三角形的3个边长a、b、c,求三角形的面积area。利用如下海伦公式求三角形的面积。
- 韩信点兵问题。
韩信在兰陵和项羽的军队打了一仗。当时韩信手下只有1500名将士,经过轮番作战,汉军约损失了近500名士兵,韩信为了知道到底剩下多少士兵,他开始“点兵”。
韩信“点兵”时,他先命令士兵每3人一组,最后多出了2名士兵;接着又命令7人一组,仍多了2名士兵;他再命令士兵5人一组,结果多了3名士兵。韩信马上告诉大家,现在我们有1073名士兵。
韩信点兵问题,实际上是我国古代有名的数学问题:“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?”又称为“中国剩余定理”。
我们使用Python语言编写一下韩信点兵的示例。该代码通过用户估算的兵力的上限和下限,可以测定出士兵的实际人数。
(三)编写程序,输入任意大的自然数,输出各位数字之和。
(四)编写程序,输入等比数列的首项、公比(不等于1且小于20的正整数)和一个自然数n,输出这个等比数列前n项的和。
三、实验仪器、设备
PC一台+Windows 操作系统+Anaconda/IDLE/Pycharm/VS Code。
四、实验原理
(一)Python常用的运算符
常见的运算符包括:算术运算符、赋值运算符、关系运算符、逻辑运算符、成员运算符、同一运算符。
1.算术运算符
算术运算符包括:+、-、*、/、//、**、%。具体含义及优先级见表2-2。
表2-2 算术运算符
运算符 | 含义 | 优先级 |
+ | 加法 | 这些运算符的优先级相同,但比下面的运算符优先级低 |
- | 减法 | |
* | 乘法 | 这些运算符的优先级相同,但比上面的运算符优先级高 |
/ | 除法 | |
// | 取整除 | |
** | 幂运算 | |
% | 取模 |
2.赋值运算符
赋值运算符用“=”表示。
赋值表达式: 变量 = 表达式
(1)普通赋值
a=3
(2)链式赋值
x=y=5
(3)多变量并行赋值
x,y,z=2,5,8
(4)复合的赋值运算符
赋值运算符“=”与7种算术运算符(+、-、*、/、//、**、%)
和5种位运算符(>>、<<、&、^、|)结合构成12种复合的赋值运算符。
a+=3 等价于 a=a+3
a*=a+3 等价于 a=a*(a+3)
a%=3 等价于 a=a%3
3.关系运算符
关系运算符包括>、>=、<、<=、==、!=。具体含义及优先级见表2-3。
表2-3 关系运算符
运算符 | 含义 | 优先级 | 结合性 |
> | 大于 | 这些运算符的优先级相同,但比下面的运算符优先级低 | 左结合 |
>= | 大于等于 | ||
< | 小于 | 这些运算符的优先级相同,但比上面的运算符优先级高 | |
<= | 小于等于 | ||
== | 等于 | ||
!= | 不等于 |
4.逻辑运算符
逻辑运算符包括:not、and、or。具体含义及优先级见表2-4。
表2-4 逻辑运算符
运算符 | 含义 | 优先级 | 结合性 |
not | 逻辑非 | 右结合 | |
and | 逻辑与 | 左结合 | |
Or | 逻辑或 |
5.成员运算符和成员表达式
成员运算符包括:in、not in。具体含义及优先级见表2-5。
表2-5 成员运算符和成员表达式
运算符 | 含义 | 优先级 | 结合性 |
in | 存在 | 相同 | 左结合 |
not in | 不存在 |
6.同一性运算符和同一性表达式
同一运算符:is、is not。具体含义及优先级见表2-6。
表2-6 同一性运算符
运算符 | 含义 | 优先级 | 结合性 |
is | 相同 | 相同 | 左结合 |
is not | 不相同 |
(二)Python常用内置函数
Python常用内置函数及用法如表2-7所示。
表2-7 Python常用内置函数
内置函数 | 说明 | 内置函数 | 说明 |
len(列表) | 返回列表中的元素个数,同样适用于元组、字典、集合、字符串等。 | sum(列表) | sum(iterable[, start])。对列表的元素进行求和运算,对非数值型列表运算需要指定start参数,同样适用于元组、range。 |
eval(常量表达式) | 用来计算字符串的值或执行字符串中的Python代码,或者进行类型转换。 | range(start,stop,step) | 创建一个整数列表,一般用在for循环中。start:开始位置。默认为0。stop结束位置,但不包括stop。 step:步长,默认为1。 |
int([x]) | 返回实数x的整数部分,或把字符串x看作base进制并转为十进制 | float(x=0,/) | 将一个数字或字符串转换为浮点数 |
max(列表) | 返回列表中的最大元素,同样适用于元组、字典、集合、range对象等。 | zip(列表1,列表2,…) | zip(*iterables) 将多个列表或元组对应位置的元素组合为元组,并返回包含这些元组的可迭代的zip对象。带*为解包。 |
min(列表) | 返回列表中的最小元素,同样适用于元组、字典、集合、range对象等。 | enumerate(列表) | enumerate(iterable, start=0) 枚举列表元素,返回枚举对象,其中每个元素为包含下标和值的元组。该函数对元组、字符串同样有效。 |
五、实验步骤
(一)进入Anaconda Navigator界面,单击Jupyter Notebook下的按钮【Launch】,进入Jupyter Notebook开发环境。
(二)例如在桌面上新建一个Python 3文件,进入“Desktop”目录,单击按钮【New】下的【Python 3】,指定文件名,每个实验项目创建一个Python源代码文件。
(三)编写Python程序。
(四)运行Python程序。单击工具栏上的按钮【Run】或者菜单【Cell】下的某一Run选项或者按快捷键“Ctrl+Enter”。
(五)撰写实验报告。
六、实验注意事项
(一)机房的使用规范和用电安全。
(二)正确使用数据类型。
(三)先确定数据类型和算法,再编写程序实现。
七、实验报告要求
实验报告以书面/电子形式提交,严禁抄袭,一旦发现,即为零分。
实验报告主要内容包括实验名称、实验类型、实验地点、学时、实验环境、实验原理、实验步骤、实验结果、总结与思考等。
八、实验成绩考核
实验成绩根据实验课的出勤、课堂表现、实验思考以及实验报告的书写情况打分,按百分制,实验成绩的平均值按15%比例计入课程总成绩。
【参考代码】
(一)输入三角形的3个边长a、b、c,求三角形的面积area。利用海伦公式求三角形的面积。
import math
a=float(input("请输入三角形的边长1:"))
b=float(input("请输入三角形的边长2:"))
c=float(input("请输入三角形的边长3:"))
#海伦公式
S=(a+b+c)/2
area=math.sqrt(S*(S-a)*(S-b)*(S-c))
print("三角形的面积是:", area)
(二)韩信点兵问题。
# 用户输入士兵人数的上限与下限
soldiers=eval(input("请输入士兵的估算人数的上限和下限,用逗号隔开:"))
while len(soldiers) != 2:
soldiers = eval(input("请重新输入士兵的估算人数的上限和下限,用逗号隔开:"))
# 根据韩信点兵规则,算出具体兵力
for i in range(soldiers[0],soldiers[1]):
if i%3==2 and i%5==3 and i%7==2:
print("韩信点兵的具体人数是:",i)
# 测试用例
输入:1000,1100
输出:1073
(三)编写程序,输入任意大的自然数,输出各位数字之和。
num = input("请输入一个自然数:") # 读取用户输入的字符串
# 使用map函数完成对每一个字符的整型转换,再使用sum对每一位求和
print(sum(map(int,num)))
(四)编写程序,输入等比数列的首项、公比(不等于1且小于20的正整数)和一个自然数n,输出这个等比数列前n项的和。
a1 = int(input("请输入等比数列的首项:"))
q = int(input("请输入等比数列的公比:"))
n = int(input("请输入一个自然数:"))
result = a1 * int("1" * n,q) # a1 * (1 * q ^0 + 1 * q ^1 + 1 * q ^2)
print(result)