2–2. 程序输出, 阅读下面的Python脚本:
#!/usr/bin/env python
1 + 2 * 4
(a) 你认为这段脚本是用来做什么的?
(b) 你认为这段脚本会输出什么?
(c) 输入以上代码,并保存为脚本,然后运行它。它所做的与你的预期一样吗?为什么一
样/不一样?
(d) 这段代 独 码单 执行和在交互解释器中执行有何不同?试一下,然后写出结果
(e) 如何改 个 进这 脚本, 以便它能和你想像的一样工作?
答:(a)计算1 + 2 * 4
(b)无输出
(c)一样。无输出语句。
(d)单独执行无输出,在交互解释器里执行输出结果。
(e)print 1 + 2 * 4
2–3. 数值和运算符
启动交互解释器,使用Python 两个数 对两个数值(任意类型)进行加、减、乘、除运算。然后使
用取余运算符来得到两个数相除的余数, 最后使用乘方运算符求 A数的 B 次方。
答:
2–4. 使用raw_input()函数得到用户输入
(a) 创建一段脚本使用 raw_input() 内建函数从用户输入得到一个字符串,然后显示 个 这
用户刚刚键入的字符串。
(b) 添加一段类似的代码,不过这次输入的是数值。将输入数据转换为一个数值对象,(使
用 int()或其它数值转换函数) 并将这个值显示给用户看。(注意,如果你用的是早于 1.5 的版
本,你需要使用 string.ato*() 函数执行这种转换)
答:
(a)
str = raw_input('input a str:')
print str
(b)
str = raw_input('input a int:')
print int(str)
2–5. 循环和数字
分别使用 while和 for 创建一个循环:
(a) 写一个 while循环,输出整数从0到 10。(要确保是从0 到 10, 而不是从 0到9或
从 1 到 10)
(b) 做同 (a) 一样的事, 不过这次使用 range() 内建函数。
答:
(a)
i = 0
while i < 11:
print i
i = i + 1
(b)
for i in range(11):
print i
2–6.条件判断。
判断一个数是正数,还是 数 负 , 或者等于 0. 开始先用固定的数值,然
后修改你的代码支持用户输入数值再进行判断。
答:
num = raw_input('input a num: ')
if num > 0:
print '正数'
elif num < 0:
print '负数'
else:
print '0'
2–7.循环和字串。
从用户那里接受一个字符串输入,然后逐字符显示该字符串。先用 while循
环实现,然后再用 for 循环实现。
答:
myStr = raw_input('input a str: ')
i = 0
while i < len(myStr): # 用while
print myStr[i]
i += 1
myStr = raw_input('input a str: ')
for c in myStr: # 用for
print c
# 或者以下方法
for i in range(len(s)):
print i, s[i]
for i, x in enumerate(s):
print i, x
2–8. 循环和运算符
创建一个包含五个固定数值的列表或元组,输出他们的和。然后修
改你的代码为接受用户输入数值。 分别使用 while和 for 循环实现。
答:
aList = list()
for i in range(5): # 用for实现
num = raw_input('input a num : ')
aList.append(int(num))
i = 0
myNum = 0
while i < len(aList): # 用while实现
myNum += aList[i]
i += 1
print 'myNum is : %d' % (myNum)
#或者以下方法
ubtot = 0
for i in range(5):
subtot += int(raw_input('enter a number: '))print subtot
or
# uses sum() BIF and generator expressions
print sum(int(raw_input('enter a number: ')) for i in range(5))
2-9 循环和运算符。
创建一个包含五个固定数值的列表或元组,输出他们的平均值。本练习的难
点之一是通过除法得到平均值。 你会发现整数除会截去小数,因此你必须使用浮点除以得到更
精确的结果。 float()内建函数可以帮助你实现这一功能。
答:
aTuple = [ 1, 2, 3, 5, 6]
myNum = 0
for i in aTuple:
myNum += i
print 'average value is : %f ' % (float(myNum) / len(aTuple))
2–10. 带循环和条件判断的用户输入。
使用raw_input()函数来提示用户输入一个1和100之间的
数,如果用户输入的数满足 个条 这 件,显示成功并退出。否则显示一个错误信息然后再次提示
用户输入数值,直到满足条件为止。
答:
import random
x = random.randint(1,100)
i = 0
while i < 100:
y = input("plz input an number:")
if x == y:
print "bingo"
break
elif y < x:
print "too small"
else:
print "too big"
#或者用函数来做
import random
def number_right(a,b):
if a < b:
print "your number is too small"
return False
elif a > b:
print "your number is too big"
return False
else:
print "you are right"
return True
b = random.randint(1,100)
fg = False
cn = 0 # 这是猜的总次数
while fg == False:
a = input("plsase input number:")
fg = number.right(a,b)
cn = cn + 1
print "总共猜了 %d " % (cn)
2–11.
带文本菜单的程序 写一个带文本菜单的程序,菜单项如下(1)取五个数的和 (2) 取五个
数的平均值….(X)退出。由用户做一个选择,然后执行相应的功能。当用户选择退出时程序
结束。 个 这 程序的有用之处在于用户在功能之间切换不需要一遍一遍的重新启动你的脚本。(这
对开发人员测试自己的程序也会大有用处)
答:
方法一
fg = False
while fg == False:
z = raw_input("请输入您的菜单选项:")
if z == "A":
print "取五个数的和"
elif z == "B":
print "取五个数的平均值"
elif z == "X":
print "程序已退出"
else:
print "输入错误,请重新输入"
continue
方法二:
y = 0
N = 0
fg = False
while fg == False:
z = raw_input("plz chose your work,A or B or X:")
if z == "A":#A任务
A = [1,2,3,4,5]
for i in A:
y = y + i # 五个数求和
print y
elif z == "B":#B任务
B = [3,4,5,6,9]
for i in B:
N = N + i
print N
M = float(N) / len(B) # 五个数求平均值
print "%f" %(M)
elif z == "X":
print "退出程序"
else:
print "输入错误,请重新输入"
continue
方法三:(用函数的方法)
def display_menu():
"""展示菜单"""
print '1.取五个数的和'
print '2.取五个数的平均值'
print 'x.退出'
sel = str(raw_input('输入您的选项:'))
return sel
def tuple_sum(aTuple):
"""求和"""
num = 0
for i in aTuple:
num += i
return num
aTuple = (1, 2, 3, 4, 6)
while True :
sel = display_menu()
if sel == str('1'):
print 'num is : %d ' % tuple_sum(aTuple)
elif sel == str('2'):
print 'average is : %f ' % (float(tuple_sum(aTuple))/len(aTuple))
elif sel == str('x'):
break
else:
continue
2–15. 元素排序
(a)让用户输入三个数值并分别将它们保存到3个不同的变量中。不使用列表或排序算法,
自己写代码来对这三个数由小到大排序。
(b)修改(a)的解决方案,使之从大到小排序
答:
(a)
num1 = int(raw_input('input num1:'))
num2 = int(raw_input('input num2:'))
num3 = int(raw_input('input num3:'))
if num1 > num2:
tmp = num2
num2 = num1
num1 = tmp
if num2 > num3:
tmp = num3
num3 = num2
num2 = tmp
if num1 > num2:
tmp = num2
num2 = num1
num1 = tmp
print 'min to max is %d, %d, %d' % (num1, num2, num3)
(b)
num1 = int(raw_input('input num1:'))
num2 = int(raw_input('input num2:'))
num3 = int(raw_input('input num3:'))
if num1 < num2:
tmp = num2
num2 = num1
num1 = tmp
if num2 < num3:
tmp = num3
num3 = num2
num2 = tmp
if num1 < num2:
tmp = num2
num2 = num1
num1 = tmp
print 'min to max is %d, %d, %d' % (num1, num2, num3)
2–16. 文件 。
键入2.15 节的文件显示的代码, 然后运行它, 看看能否在你的系统上正常工作,然后试
一下其它的输入文件。
答:
fobj = open('hello.txt', 'r')
for eachLine in fobj:
print eachLine,
fobj.close()