Python核心编程(第二版)第二章练习题

来源:互联网 发布:java实现ftp上传文件 编辑:程序博客网 时间:2024/05/20 01:44

2.21练习

2-1

变量, print 和字符串格式化运算符。启动交互式解释器。给一些变量赋值(字符串,数值等等)并通过输入变量名显示它们的值。再用 print 语句做同样的事。这二者有何区别? 也尝试着使用字符串格式运算符 %, 多做几次, 慢慢熟悉它。

答:
不同的显示方式
区别:print语句采用的是str()函数显示对象,而交互式解释器则调用repr()函数来显示对象。

内建函数 解答 str() 将值转化为易于人阅读的形式,可读性好所以才被print调用 repr() 供解释器阅读的形式,并且可以重新获取该对象

注:obj==eval(repr(obj))而str()无法这样使用
str()和repr()

print "%s is number %d" % ("python", 1)

2-2

P 程序输出, 阅读下面的 Python 脚本:
1 + 2 * 4
(a) 你认为这段脚本是用来做什么的?
(b) 你认为这段脚本会输出什么?
(c) 输入以上代码,并保存为脚本,然后运行它。它所做的与你的预期一样吗?为什么一样/不一样?
(d) 这段代 独 码单 执行和在交互解释器中执行有何不同?试一下,然后写出结果
(e) 如何改 个 进这 脚本, 以便它能和你想像的一样工作?

答(a):计算值。
答(b):9。
答(c):运行它不会有任何的显示信息,因为在脚本中运行后没有print语句进行输出。
答(d):交互式的解释器中会直接返回计算值,而脚本代码中却不会有任何显示信息。
答(e):添加print语句,print 1+2*4


2-3

数值和运算符
启动交互解释器,使用 Python对两个数值(任意类型)进行加、减、乘、除运算。然后使用取余运算符来得到两个数相除的余数, 最后使用乘方运算符求 A 数的 B 次方。

答:这里写图片描述


2-4

使用 raw_input()函数得到用户输入
(a) 创建一段脚本使用 raw_input() 内建函数从用户输入得到一个字符串,然后显示 个 这用户刚刚键入的字符串。
(b) 添加一段类似的代码,不过这次输入的是数值。将输入数据转换为一个数值对象,(使用 int()或其它数值转换函数) 并将 个 这 值显示给用户看。(注意,如果你用的是早于 1.5 的版本,你需要使用string.ato*() 函数执行 种 这 转换)

答(a):

sentence=raw_input("please input your sentence:")print sentence

答(b):

sentence=raw_input("please input your number:")print int(sentence)

2-5

循环和数字
分别使用 while 和 for 创建一个循环:
(a) 写一个 while 循环,输出整数从 0 到 10。(要确保是从 0 到 10, 而不是从 0 到 9 或从 1 到 10)
(b) 做同 (a) 一样的事, 不过这次使用 range() 内建函数。

答(a):

i = 0while i < 11:    print i,    i += 1

答(b):

for i in range(11):    print i,

2-6

条件判断 判断一个数是正数,还是 数 负 , 或者等于 0. 开始先用固定的数值,然后修改你的代码支持用户输入数值再进行判断。

答:

num = int(raw_input("please input your number:"))if num > 0:    print "正数"elif num < 0:    print "负数"else:    print "等于0"

2-7

循环和字串从用户那里接受一个字符串输入,然后逐字符显示该字符串。先用 while 循环实现,然后再用 for 循环实现。

答:

s = raw_input("please input your string: ")nums = len(s)i = 0while i < nums:    print s[i],    i += 1
s=raw_input("please input your string:")for i in s:    print i,

2-8

循环和运算符
创建一个包含五个固定数值的列表或元组,输出他们和。然后修改你的代码为接受用户输入数值。 分别使用 while 和 for 循环实现。

答:

i = 0newsum = 0l = []while i < 6:    s = int(raw_input("%d. please input your number(five numbers): " % i))    newsum += s    l.append(s)    i += 1print "your list is :", lprint "your sum is  :", newsum
newsum=0l=[]for i in range(6):    s = int(raw_input("%d. please input your number(five numbers): " % i))    newsum += s    l.append(s)print "your list is :", lprint "your sum is  :", newsum

注:没有做任何异常处理,只是简单实现其正常功能


2-9

循环和运算符
创建一个包含五个固定数值的列表或元组,输出他们的平均值。本练习的难点之一是通过除法得到平均值。 你会发现整数除会截去小数,因此你必须使用浮点除以得到更精确的结果。 float()内建函数可以帮助你实现这一功能。

答:

newsum = 0l = []for i in range(6):    s = int(raw_input("%d. please input your number(you need five numbers): " % i))    newsum += s    l.append(s)average = newsum / 5.0print "your list is :", lprint "your sum is  :", newsumprint "your average is:%f" % average

2-10

带循环和条件判断的用户输入
使用raw_input()函数来提示用户输入一个1和100之间的数,如果用户输入的数满足个这件,显示成功并退出。否则显示一个错误信息然后再次提示用户输入数值,直到满足条件为止。

答:

state = Truewhile state:    num = int(raw_input("please input your number(1~100):"))    if 1 <= num <= 100:        print "bingo", num        state = False    else:        print "你的数不能大于100"        continue

2-11

带文本菜单的程序 写一个带文本菜单的程序,菜单项如下(1)取五个数的和 (2) 取五个数的平均值….(X)退出。由用户做一个选择,然后执行相应的功能。当用户选择退出时程序结束。这程序的有用之处在于用户在功能之间切换不需要一遍一遍的重新启你动的脚本。(这对开对发人员测试自己的程序也会大有用处)

答:

def newSum():    i = 0    newsum = 0    l = []    while i < 6:        s = int(raw_input("%d. please input your number(you need five numbers): " % i))        newsum += s        l.append(s)        i += 1    return l, newsumstate = Truepromp = """(1)取五个数的和(2)取五个数的平均值(x)退出"""while state:    s = raw_input(promp)    if s == "1":        l, newsum = newSum()        print "your list is :", l        print "your sum is  :", newsum    elif s == "2":        l, newsum = newSum()        average = float(newsum / 5)        print "your list is :", l        print "your average is:", average    else:        print "退出"        state = False

注:复制粘贴了上面写过的部分代码


2-12

dir()内建函数
(a) 启动 Python 交互式解释器, 通过直接键入 dir()回车以执行 dir()内建函数。你看到什么? 显示你看到的每一个列表元素的值,记下实际值和你想像的值
(b) 你会问, dir()函数是干什么的?我们已经知道在 dir 后边加上一对括号可以执行 dir()内建函数, 如果不加括号会如何? 试一试。 解释器返回 你 给 什么信息? 你 个 认为这 信息表示什么意思 ?
(c) type() 内建函数接收任意的 Python 对象做 参数并 为 返回他们的类型。 在解释器中键入 type(dir), 看看你得到的是什么?
(d) 本练习的最后一部分, 我 来瞧 们 一瞧 Python 的文档字符串。 通过 dir.doc 可以访问 dir()内建函数的文档字符串。print dir.doc可以显示 个 这 字符串的内容。 许多内建函数,方法,模块及模 属 块 性都有相应的文档字符串。我们希望你在你的代码中也要 写 书 文档字符串, 它会对使用这些代码的人提供及时方便的帮助。

答(a,b):
这里写图片描述
使用dir()函数可以查看对象内所有的属性及方法。
答(c):
type
答(d):
这里写图片描述


2-13

利用 dir() 找出 sys 模块中更多的东西。
(a) 启动Python交互解释器, 执行dir()函数, 然后键入 import sys 以导入 sys 模块。再次执行 dir()函数以确认 sys 模块被正确的导入。 然后执行 dir(sys) , 你就可以看到 sys模块的所有属性了。
(b) 显示 sys 模块的版本号属性及平台变量。记住在属性名前一定要加 sys. ,这表示个属 这 性是 sys 模块的。其中 version 变量保存着你使用的 Python 解释器版本, platform属性则包含你运行 Python 时使用的计算机平台信息。
(c) 最后, 调用 sys.exit() 函数。 这是一种热键之外的另一种退出 Python 解释器的方式 。

答:
这里写图片描述


2-14

重写 2.4 小节中 print 语句里的算术表达式, 试着在 个 这 表达式中添加合适的括号以便它能正常工作。

答:print (-2 * 4) + (3 * 2)


2-15

元素排序
(a)让用户输入三个数 并将 值 分 将它 别 们保存到3个不同的变量中。不使用列表或排序算法,自己写代 来 码 对这三个数由小到大排序。
(b)修改(a)的解决方案,使之从大到小排序

答(a):

nums = []for i in range(3):    num = int(raw_input("your numbers:"))    nums.append(num)a = nums[0]b = nums[1]c = nums[2]if a > b:    t = b    b = a    a = tif a > c:    t = c    c = a    a = tif b > c:    t = b    b = c    c = tprint a,b,c

答(b):

nums = []for i in range(3):    num = int(raw_input("your numbers:"))    nums.append(num)a = nums[0]b = nums[1]c = nums[2]if a < b:    t = b    b = a    a = tif a < c:    t = c    c = a    a = tif b < c:    t = b    b = c    c = tprint a,b,c

2-16

文件
键入 2.15 节的文件显示的代码, 然后运行它, 看看能否在你的系统上正常工作,然后试一下其它的输入文件。

答:

filename=raw_input("Enter file name: ")fobj=open(filename,"r")for eachLine in fobj:    print eachLine,fobj.close()

打开会报错,因为没有这个文件,并且我们选择的模式是‘r’读模式,所以会报错。

原创粉丝点击