Python – 实验 2

实验目的

  • 掌握字符串(str)和数值型(int / float / bool)数据类型及其相互转换。
  • 掌握常用的运算符功能与特点。
  • 掌握运算符优先级。

实验说明

本次实验共三个部分:

  • 实验 2-12-22-32-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 为换行符;
    • \'\" 为非字符串结尾的引号字符;
    • \回车 为空字符。
  • print 中可以用 , 连接不同部分的内容。

输出结果:

变量 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 和字符串 ba 在前、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)
参考答案

变量 adef 为整型数;变量 bc 为浮点数;变量 gh 为布尔型。
c 为浮点数的科学计数法表示;def 分别为整型数的二进制、八进制和十六进制表示。

输出结果:

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)

编写代码,逐一进行以下运算,并打印相关结果。观察代码运行的返回值或报错,思考原因。

注意
  • 下列内容应逐行运行,以观察对应的运行结果;
  • 每一行运行后,为了能在屏幕上显示结果,应使用 print 方法进行输出。
  • 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 < 4True);
  • 逻辑运算符:从左到右依次运算,一旦获得答案立即返回;

题目 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 2a 的值为 2
  • 算术运算符 > 逻辑运算符:not 3 + 2,输出为 False
  • 算术运算符和正负运算符具有同一优先级:-3 ** 2,输出为 -9(规则:先指数、后乘除,最后加减)。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注