实验目的
- 掌握字符串(
str
)和数值型(int
/float
/bool
)数据类型及其相互转换。 - 掌握常用的运算符功能与特点。
- 掌握运算符优先级。
实验说明
本次实验共三个部分:
- 实验 2-1、2-2、2-3 和 2-4 应在课堂上完成。
- 实验中的 蓝色题目 为课堂中已涉及的相关题目,相关代码可从网页复制后使用,代码运行结果自行观察即可,无需提交作业;若已在课后自行练习,请思考答案并略过该部分。
- 实验中的 绿色题目 为本节实验课重点练习题,请独立完成相关程序,并将结果和代码截图或拍照保存,待后续提交。
- 实验中的 红色题目 为附加题,具有一定难度,供学有余力的同学思考,不做硬性要求。
实验内容
实验 2-1 字符串
题目 2-1-1 字符串的表示(10 min)
编写下列代码并保存为 Exp2_1_1.py,观察代码运行结果并思考原因。
a = "双引号字符串中含有双引号(\")"
print("变量 a:", a)
b = '单引号字符串中含有双引号(")'
print("变量 b:", b)
c = '单引号字符串\n这样跨行'
print("变量 c:", c)
d = """三引号字符串
这样跨行"""
print("变量 d:", d)
e = '单引号字符串\
这样连接不同行'
print("变量 e:", e)
参考答案
- 字符串中可以包含字母、汉字、数字、标点符号等任意字符;
- 字符串由一对英文单引号或一对英文双引号表示;
- 三引号字符串可以跨行,而单引号和双引号字符串不可以;
- 反斜杠表示转义字符:
\n
为换行符;\'
和\"
为非字符串结尾的引号字符;\回车
为空字符。输出结果:
变量 a: 双引号字符串中含有双引号(") 变量 b: 单引号字符串中含有双引号(") 变量 c: 单引号字符串 这样跨行 变量 d: 三引号字符串 这样跨行 变量 e: 单引号字符串这样连接不同行
题目 2-1-2 字符串的运算(10 min)
编写下列代码并保存为 Exp2_1_2.py,观察代码运行结果并思考原因。
a, b = "3", "5"
print(a+b)
print(a,b)
print(a*3)
参考答案
字符串可以使用 +
和 *
进行拼接,拼接时不同部分间直接相连(与 print
中的 , 不同):
a+b
表示字符串a
和字符串b
以a
在前、b
在后的方式相连;a*c
表示字符串a
重复整型数c
次。
输出结果:
35
3 5
333
题目 2-1-3 字符串格式化(15 min)
编写代码,将下列内容 逐一赋值给变量 a
,并打印输出。观察哪些代码报错,哪些代码能正常运行,思考原因。
注意
下列内容应逐行赋值并运行,以观察对应的运行结果。
"字符串:{};整型数:{};浮点数:{};布尔型:{}".format("Hello", 20, 3.14, False)
"{}年{}月".format(2025, 1, 1)
"{}年{}月{}日".format(2024, 9)
"院子里有两棵树,一棵是{1},一棵是{1}".format("桃树", "枣树")
"我叫{name},今年{age}岁".format(name = "Felix", age = 18)
"我叫{0},今年{1}岁".format(name = "Felix", age = 18)
"浮点数:{0:f};指数:{0:e};十进制:{0:d};二进制:{0:b};八进制:{0:o};十六进制:{0:x}".format(100)
参考答案
字符串的
format
方法的用法:
format
方法可用于字符串、整数、浮点数、布尔型值的格式转换;format
方法提供的内容不应少于(可多于)所需用到的内容;{数值}
:对应format
中对应位置的内容(从 0 开始计数);{别名}
:对应format
中的别名内容;{:字母}
:以特定形式格式化数值型数据。注意浮点数不支持进制转换;{:.数值+字母}
:保留特定位数的小数。代码及运行结果如下:
a = "字符串:{};整型数:{};浮点数:{};布尔型:{}".format("Hello", 20, 3.14, False) print(a) #字符串:Hello;整型数:20;浮点数:3.14;布尔型:False a = "{}年{}月".format(2025, 1, 1) print(a) #输出:2025年1月 a = "{}年{}月{}日".format(2024, 9) print(a) #报错:字符串格式化提供的内容不应少于所需内容 a = "院子里有两棵树,一棵是{1},一棵是{1}".format("桃树", "枣树") print(a) #输出:院子里有两棵树,一棵是枣树,一棵是枣树 a = "我叫{name},今年{age}岁".format(name = "Felix", age = 18) print(a) #输出:我叫Felix,今年18岁 a = "我叫{0},今年{1}岁".format(name = "Felix", age = 18) print(a) #报错:别名与数值位置不能混用 a = "浮点数:{0:f};指数:{0:.2e};十进制:{0:d};二进制:{0:b};八进制:{0:o};十六进制:{0:x}".format(100) print(a) #输出:浮点数:100.000000;指数:1.00e+02;十进制:100;二进制:1100100;八进制:144;十六进制:64
实验 2-2 数值
题目 2-2-1 数值的表示(10 min)
编写下列代码并保存为 Exp2_2_1.py,观察代码运行结果并思考变量值的数据类型。
a, b = 1, 1.
print(a, b)
c, d, e, f = 0e11, 0b11, 0o11, 0x11
print(c, d, e, f)
g, h = True, False
print(g, h)
参考答案
变量
a
、d
、e
、f
为整型数;变量b
、c
为浮点数;变量g
、h
为布尔型。c
为浮点数的科学计数法表示;d
、e
、f
分别为整型数的二进制、八进制和十六进制表示。输出结果:
1 1.0 0.0 3 9 17 True False
题目 2-2-2 数值的运算(10 min)
编写下列代码并保存为 Exp2_2_2.py,观察代码运行结果并思考对应结果的数据类型及原因。
a, b = 1, 2
print("a+b:", a + b)
c, d = 1, 2.
print("c-d:", c - d)
e, f = 1, True
print("e/f:", e / f)
g, h = "10", "9"
print("g>h:", g > h)
print("int(g)>int(h):", int(g) > int(h))
i, j = "7", "7."
print("i==j:", i == j)
print("int(i)==float(j):", int(i) == float(j))
参考答案
对于数值运算:
- 除除法外,仅有整型数(或/和布尔型)的运算结果为整型;
- 有浮点数参与的运算结果为浮点型;
- 除法运算结果为浮点型。
字符串的比较运算逻辑为:从第一位开始依次往后比较,0 < 9 < A < Z < a < z
输出结果:
a+b: 3
c-d: -1.0
e/f: 1.0
g>h: False
int(g)>int(h): True
i==j: False
int(i)==float(j): True
实验 2-3 综合练习
题目 2-3-1 单位转换小程序(15 min)
摄氏温度和华氏温度可根据如下公式换算:华氏温度(F)= 9 × 摄氏温度(C)/ 5 + 32
编写代码并保存为 Exp2_3_1.py,根据用户输入的摄氏温度计算华氏温度。
注意
input
方法获得的值均为字符串,因此需使用类型转换函数(int()
和float()
)将输入的字符串转换为整型或浮点型数据;- 程序存储的摄氏温度与计算得到的华氏温度展示均采用十进制形式,并保留一位小数(可采用字符串格式化实现)。
程序运行结果如下:
请输入摄氏温度值:【此处为用户输入的摄氏温度】
【此处为程序存储的摄氏温度】 摄氏度对应的华氏温度为:【此处为程序计算得到的华氏温度】
参考答案
celsius = input("请输入摄氏温度值:") #类型转换函数 celsius = float(celsius) fahrenheit = 9 * celsius / 5 + 32 #字符串格式化 print("{0:.1f} 摄氏度对应的华氏温度为:{1:.1f}".format(celsius, fahrenheit))
题目 2-3-2 重新算回去
(本题不做要求,供 题目 2-3-1 完成后时间充裕的同学做补充练习。)
若将 题目 2-3-1 中输入改为华氏温度,输出改为摄氏温度,应如何修改上述代码?编写代码并保存为 Exp2_3_2.py。
注意
部分代码可复用 Exp2_3_2.py 中的内容,但保存时注意检查文件名,避免覆盖原文件。
运行结果如下:
请输入华氏温度值:【此处为用户输入的华氏温度】
【此处为程序存储的华氏温度】 华氏度对应的摄氏温度为:【此处为程序计算得到的摄氏温度】
参考答案
fahrenheit = input("请输入华氏温度值:") #类型转换函数 fahrenheit = float(fahrenheit) celsius = (fahrenheit - 32) / 9 * 5 #字符串格式化 print("{0:.1f} 华氏度对应的摄氏温度为:{1:.1f}".format(fahrenheit, celsius))
题目 2-3-3 加法计算器
(本题不做要求,供 题目 2-3-2 完成后时间充裕的同学做补充练习。)
编写代码并保存为 Exp2_3_3.py,根据用户输入的两个数值做加法后,返回计算结果。
注意
思考并使用正确的数据类型。
运行结果如下:
请输入第一个数:32
请输入第二个数:29
32 + 29 = 61
参考答案
a = input("请输入第一个数:") b = input("请输入第二个数:") print(a, "+", b, "=", int(a) + int(b))
实验 2-4 运算符与优先级
题目 2-4-1 运算符的特性(10 min)
编写代码,逐一进行以下运算,并打印相关结果。观察代码运行的返回值或报错,思考原因。
注意
- 下列内容应逐行运行,以观察对应的运行结果;
- 每一行运行后,为了能在屏幕上显示结果,应使用
3 == 3.0
True > False
"3" > 3
"Hello" <= "World"
True or 0
0 or True
True or 1
1 or True
"" and True
True and ""
"" and False
False and ""
参考答案
print(3 == 3.0) #输出:True
print(True > False) #输出:True
print("3" > 3) #报错:字符串和数值不能比较
print("Hello" <= "World") #输出:True,"z" > "a" > "Z" > "A" > "9" > "0"
print(True or 0) #输出:True
print(0 or True) #输出:True
print(True or 1) #输出:True
print(1 or True) #输出:1
print("" and True) #输出:''
print(True and "") #输出:''
print("" and False) #输出:''
print(False and "") #输出:False
- 字符串比较:从第一位开始依次往后比较,只要判断出大小则立即返回,”0″ < “9” < “A” < “Z” < “a” < “z”;
- 逻辑运算符的运算逻辑:从左到右判定,一旦获得答案立即返回,不再进行后续运算。
题目 2-4-2 运算符优先级(10 min)
编写代码,进行以下运算,并打印相关结果。观察代码运行的返回值,思考原因。
6 + 4 / 2 - 2 ** 3 % 5
6 > -3 < 9 > 7
"8" and not 5 or True and 9 or a
6 + - 5 and 9 >= 2 ** + 2 or a
6 and (("a" * 3) + ("b" + "c") * 2 > "")
参考答案
print(6 + 4 / 2 - 2 ** 3 % 5) #输出:5.0 print(6 > -3 < 9 > 7) #输出:True print("8" and not 5 or True and 9 or a) #输出:9 print(6 + - 5 and 9 >= 2 ** + 2 or a) #输出:True print(6 and (("a" * 3) + ("b" + "c") * 2 > "")) #输出:True
运算优先级:算术 / 正负运算符 > 比较运算符 > 逻辑运算符 > 赋值运算符:
- 赋值运算符:从右往左依次运算。
- 算术运算符的运算:按照数学运算规则:先指数、后乘除,最后加减。运算逻辑与数学一致;
- 比较运算符:从左到右依次运算,仅计算相邻数值(如
3 > 2 < 4
为True
);- 逻辑运算符:从左到右依次运算,一旦获得答案立即返回;
题目 2-4-3 验证运算符优先级
(本题不做要求,供 题目 2-4-2 完成后时间充裕的同学做补充练习。)
构造运算,检测运算符优先级顺序有:算术 / 正负运算符 > 比较运算符 > 逻辑运算符 > 赋值运算符。
注意
- 应至少检验:1)算术 / 正负运算符 > 比较运算符;2)比较运算符 > 逻辑运算符;3)逻辑运算符 > 赋值运算符。
- 同优先级内不同运算符运算顺序及规则也可通过构造特定运算检验。
例如
为了验证算术运算符优先于比较运算符,构造运算
5 > 3 + 3
。若算术运算符优先计算,则转变为5 > 6
,输出结果为False
。若比较运算符优先计算,则转变为True + 3
,输出结果为4
,根据运行结果(False
)知:算术运算符优先于比较运算符。参考答案
- 比较运算符 > 逻辑运算符:
3 or True > 2
,输出为3
;- 逻辑运算符 > 赋值运算符:
a = False or 2
,a
的值为2
;- 算术运算符 > 逻辑运算符:
not 3 + 2
,输出为False
;- 算术运算符和正负运算符具有同一优先级:
-3 ** 2
,输出为-9
(规则:先指数、后乘除,最后加减)。
发表回复