2.9 习题
1.请说明下面哪些是Python整型数,哪些是浮点数。
11, 17.5, -39, -2.3, 0.12e4, -3.141759, 0.57721566, 7.5e-3
2.请说明当在解释器输入1e1000或-1e1000是显示的值是什么,其含义是什么,type(1e1000)的结果是什么。
3.请说明如何检查None的类型。
4.请说明下列那句代码会抛出错误。
(A)"I have " + str(5)+ " books"
(B)"I said " +("Hello " * 2)+ "1 world"
(C)True + False
(D)"The correct answer to this question is: " + 2
5.为了提高程序效率,对于不可修改的整数对象,Python解释器开始执行时就为这些对象分配了内存空间,不会被删除回收,因此,多个相同值的整数可能对应的是同一个对象。相同值的整数是否共享同一个对象取决于你解释器。例如,在jupyter notebook解释执行时,[-5,256]范围的整数都会共享同一个对象。请在jupyter nbotebook和操作系统命令行执行下列Python代码,查看输出结果。
print(id(100)) print(id(100)) print(id(1000)) print(id(1000)) a=100 b=100 c=1000 d=1000 print(a==b) print(a is b) print(c==d) print(c is d)
6.(选做题)sys模块(模块概念将在第3章中介绍)的函数getsizeof()可查询一个对象占用内存大小。例如:
import sys #导入模块sys sys.getsizeof(3.14) #调用sys模块中的getsizeof查询3.14占据内存的字节数
输出:
24
模仿这个程序,在该函数中输入整数3、'h'、'hello'、'hello world',观察输出结果。
7.定义两个变量radius和area,分别表示圆的半径和面积,其中radius有一个初始值,而area的值通过圆的面积公式计算,然后输出它们的值。
8.用变量savings表示存款,用变量interest表示年利息(如0.05),用变量growth_multiplier表示年增长倍数(1+interest),并用指数运算**计算8年后的存款总额保存在结果变量result,最后输出表示存款总额的值result。
9.下面哪些是不合法的标识符?为什么?()
@name def 3re user_1name pass-word _x 234
10.下列代码中有几个变量?几个对象?输出结果是什么?()
a=100 b=a a=101 print(b)
11.list是一个复合数据类型,其中的元素可以是任何对象,对于下面的list对象alist。
s='he' pi=3.14 alist=[1, [2,3], s, True, pi]
解决下列的五个问题。
(1)输出最后一个元素。
(2)输出最后两个元素。
(3)在最后一个元素前面插入字符串’py'。
(4)将第三个元素替换为list对象[4,5]。
(5)删除前两个元素。
12.指出下列代码中的错误,并说明原因。
a=(1,3.14, 'hello', {2,3}) a[2]='hello' b={1,3.14, 'hello', {2,3}} b[0]=2 c={{2,3}:'hello', 'hello':{2,3}}
13.首先说明下列语句的输出结果是什么,然后将双引号表示的字符串换成单引号表示的字符串,再判断输出结果是什么。
print("Yes! \tI\'m a student .\n"
14.给定变量x和y,使用字符串格式打印出x和y及其总和的值。例如,如果x=5且y=3,则输出结果应该是:5 + 3=8。
15.请说明如何检验(25,)表示的是一个tuple,而(25)表示的是一个整数。
16.每个学生的信息包括姓名和分数,用姓名作为键,分数作为值,用一个dict存储一组学生数据,并通过键值修改或输出某个学生的分数。
17.请说明下列代码有哪些错误,原因是什么。
a=(2, 3.14, 'python', [4,5]) b={2, 3.14, 'python', [4,5]} a[3][0]='he' a[1]='abc' b[3][0]='he' print(a[-5]) print(a[-3]) print(b[3])
18.编写程序,要求从键盘输入矩形的长和宽,并输出矩形面积。
19.请说明下列print()语句有没有错误,如果没有错误,则请判断输出结果是什么。
print(3.14/2+True) print(2*'hello') print(2+'hello')
20.IP地址是由四个整数构成的一个字符串,如“10.3.9.12”。编写一个程序,从键盘输入一个IP地址,再按照下列步骤将它转化为一个整数并输出。
(1)将字符串表示的IP地址的每个整数转化为二进制字符串。例如:
1000001010 300000011 900001001 1200001100
(2)拼接为一个更长的二进制字符串。例如:
00001010000000110000100100001100
(3)将这个二进制字符串转换为整数。
21.下列代码可以将一个整数转为一个IP地址的四个整数。运行这段代码,并将其改写为从键盘输入一
个整数,输出一个形如“10.3.9.12”的字符串形式的IP地址。
a=123456789 a, b=a%256, a//256 b, c=b%256, b//256 c, d=c%256, c//256 print(d, c, b, a)
22.请说明整数除法和浮点除法有什么区别,整数除法和浮点除法的运算符分别是什么。
23.请分析以下操作的结果是什么,并给出解释。
1.5 + 2 1.5 // 2.0 1.5 / 2.0 1.5 ** 2
24.请分析下列运算的结果是什么,并给出解释。
15 + 20 * 3 13 // 2 + 3 31 + 10 // 3 20 % 7 // 3 2 ** 3 ** 2
25.请分析执行下面的语句会发生什么,并给出解释。
1 // 0
26.判断下列计算的语句是否有错误,如有错误请改正。
b+c/2a
27.请分析下列类型中哪些类型是可变的(mutable),哪些是不可变的(immutable),并说明验证方法。
list, dict, set, byte array, int, float, complex, string, tuple, frozen set, bytes
28.请分析下列代码有什么错误,并给出解释。
a=(1,2,3, [4,5,6]) a[0]=10 a[3]=30 a[3][2]='he'
29.请分析下列代码有什么错误,并请修改正确。
number=input("请输入一个数: ") print(type(number)) print(number+30)
30.请将下列代码中不正确的缩进修改正确。
if score < 60: print(’不及格’) else: print(’及格’) i=0 while i<10: print(i)
31.根据“四年一闰,百年不闰,四百年再闰”,即“闰年是年份能被4整除且不能被100整除,或者能被400整除”这一规则,编写一个程序用于判断一个年份是否为闰年。
32.编写一个程序用于从键盘输入一个人的身高和体重,并根据BMI指数公式,判断此人是否肥胖,最后输出判断的结果。
BMI指数=体重÷身高的平方
根据BNI指数判断一个人肥胖的公式是:
低于18.5:过轻;
18.5~25:正常;
25~28:过重;
28~32:肥胖;
高于32:严重肥胖。
33.编写一个程序,用于从键盘输入摄氏温度,并将其转为华氏温度并输出。
34.从键盘输入一个一元二次方程的系数,根据不同情况(无根、一个根、两个根)输出不同的信息。
35.编写一个程序用于打印如下金字塔图案,要求行数从键盘输入。
* * * * * * * * * *
36.编写一个程序用于从键盘输入一个弧度x,以计算正弦函数sin(x)的值。要求最后一项的绝对值小于10-5,并统计出此时累计了多少项。sin(x)的近似计算公式为:
37.模仿整数之和的程序,将统计学生平均成绩的程序改写成用break语句终止循环体的执行。
38.编写一个程序,用于判断从键盘输入的一个整数是否为质数。
39.猜数字游戏。假设程序中设置了一个1到100之间的正整数num,用户从键盘输入一个猜想的数字guess,如果guess等于num,那么就显示祝贺用户成功的信息,如果guess不等于num,就提示用户继续输入,直到超过指定的猜测次数(如8次)就提示用户失败信息。提示,核心程序如下所示。
num=37 i=0 success=0 #是否成功的标志 while i<8: guess=int(input("请输入猜测的数字:")) ? if(success) print("很遗憾,猜测失败!") continue
40.编写一个程序,用于计算1到1000之间所有的奇数之和。
41.请去掉第39题“猜数字游戏”中的success标志变量,并使用循环语句的else子句改写“猜数字游戏”。
42.编写一个程序,用于对一个班级中所有学生的某门课进行成绩分析。一个学生的信息包括学号、姓名、平时成绩、实验成绩、期末成绩、总评成绩。总评成绩是平时成绩、实验成绩和期末成绩的加权平均。学生成绩数据、成绩的加权系数等均需要从键盘输入。程序包括成绩录入、修改、查询、加权系数的查询和修改、计算总评成绩、统计不同分数段的人数和百分比、最高分和最低分之差等。程序需一直运行,直到用户输入一个特殊的值才可退出。
以下是一个核心框架,可在此基础上编写代码。
print(’请输入代表不同命令的字母:') help_info=(''' 'i' or 'I':’录入一个学生信息’ 'q' or 'Q':’按姓名查询学生信息’ 'm' or 'M':’按学号修改学生信息’ 'w' or 'W':’显示/修改加权系数’ 'c' or 'c':’计算所有学生的总评、统计信息’ 's' or 'S':’显示所有学生信息’ 't' or 'T':’显示统计信息’ 'x' or 'X':’显示统计信息’ ''') print(help_info) student_infos=[] while True: cmd=input(’请输入一个命令:') if cmd=='x' or cmd=='X': break elif cmd=='i' or cmd=='I': id=input(’请输入学号:') name=input(’请输入姓名:') score_=float(input(’请输入平时成绩:')) score_exp=float(input(’请输入实验成绩:')) score_test=float(input(’请输入期末成绩:')) student_infos +=[[id, name, score_, score_exp, score_test,0]] elif cmd=='s' or cmd=='S': #print(student_infos) for s in student_infos: print(s) pass
也可以用list和str类型的方法简化上述的代码。例如:
● 用一个list对象(上述代码中的student_infos)存储所有学生的信息,可以用list的函数append()在最后添加一个元素,如:
student_infos.append([id, name, score_, score_exp, score_test,0])
● 用str的函数split()将输入的字符串分割成多个字符串。当然,也可以逐个调用函数input()。例如:
id, name, score_, score_exp, score_test= input("请输入:学号、姓名、平时成绩、实验成绩、期末成绩:").split(' ') score_=float(score_) score_exp=float(score_exp) score_test=float(score_test)