Python3从入门到实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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)