第4章 习题解答
1.下面的循环会打印多少次“I Love Python”?
for i in range(0,10,2):
print('I Love Python')
答:会打印5次“I Love Python”,因为从0开始,到10结束,步进为2。
2.以下代码会打印多少次“I Love Python”?
while ' ':
print('I Love Python')
答:死循环,会一直打印”I Love Python”,直到崩溃或者用户按下快捷键CTRL+C(强制结束)。
3.下面的循环会打印多少次“I Love Python”?
for i in 5:
print('I Love Python')
答:会报错,因为in是“成员资格运算符”,而不是像C语言那样去使用for语法。Python的for更像脚本语言的foreach。
4.目测一下以下程序会打印什么内容。
while True:
while True:
break
print(1)
print(2)
break
print(3)
答:打印结果
2
3
5.编写一个程序,找出所有的水仙花数(所谓水仙花数,就是一个3位数等于各位数字的立方和,则称这个数为水仙花数。例如:
)。
答:代码如下所示
for i in range(100,1000):
a=0
b=0
c=0
while i<1000:
a=i//100
b=(i//100)//10
c=(i//100)%10
if i==a**3+b**3+c**3:
print(i)
i=i+1
6.对于同样功能的代码,为什么要使用函数,而不使用简单的复制粘贴呢?
答:(1) 可以降低代码量(调用函数只需要一行,而拷贝黏贴需要N倍代码)
(2) 可以降低维护成本(函数只需修改def部分内容,而拷贝黏贴则需要每一处出现的地方都作修改)
(3) 使序更容易阅读(没有人会希望看到一个程序重复一万行相同的内容)
7.Python的函数可以嵌套,但要注意访问的作用域问题,请问以下代码存在什么问题呢?
def outside():
print('I am outside!')
def inside():
print('I am inside!')
inside()
答:inside()函数是内嵌在outside()函数中的,外部不能调用
8.请问以下函数有多少个参数?
def MyFun((x,y),(a,b)):
return x*y - a*b
答:如果你回答两个,那么恭喜你错啦,答案是0,因为类似于这样的写法是错误的!我们分析下,函数的参数需要的是变量,而这里你试图用“元祖”的形式来传递是不可行的。
9.请问下面这个函数有返回值吗?
>>> def hello():
print('Hello!')
答:有返回值,返回值为None。
10.目测一下以下程序会打印什么内容。
def fun(var):
var = 2013
print(var,end = ' ')
var = 520
fun(var)
print(var)
答:会打印
520
520
11.爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。请编程求解该阶梯至少有多少阶。
答:代码如下所示
x = 7
i = 1
flag = 0
while i <= 100:
if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
flag = 1
else:
x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
i += 1
if flag == 1:
print('阶梯数是:', x)
else:
print('在程序限定的范围内找不到答案!')
12.设计一个验证用户密码程序,用户只有三次机会输入错误,不过如果用户输入的内容中包含“*”则不计算在内。
答:代码如下所示
count = 3
password = '123'
while count:
passwd = input('请输入密码:')
if passwd == password:
print('密码正确,进入程序......')
break
elif '*' in passwd:
print('密码中不能含有“*”号!您还有',count-1,'次机会!',end=' ')
continue
else:
print('密码输入错误!您还有',count-1,'次机会!',end=' ')
count -= 1
13.Python中使用if、elif、else在大多数情况下效率要比全部使用 if 要高,但根据一般的统计规律,一个班的成绩一般服从正态分布,也就是说平均成绩一般集中在70~80分之间,请根据此统计规律,完成下面程序的编写:按照100分制,90分及以上成绩为A,80到90(不包括90)为B,60到80(不包括80)为C,60以下为D,写一个程序,当用户输入分数,自动转换为ABCD的形式打印。
答:代码如下所示
score = int(input('请输入一个分数:'))
if 80 > score >= 60:
print('C')
elif 90 > score >= 80:
print('B')
elif 60 > score >= 0:
print('D')
elif 100 >= score >= 90:
print('A')
else:
print('输入错误!')
14.编写一个函数,判断传入的字符串参数是否为“回文联”(回文联即用回文形式写成的对联,即可顺读,也可倒读。例如:上海自来水来自海上)。
答:代码如下所示
def palindrome(string):
length = len(string)
last = length-1
length //= 2
flag = 1
for each in range(length):
if string[each] != string[last]:
flag = 0
last -= 1
if flag == 1:
return 1
else:
return 0
string = input('请输入一句话:')
if palindrome(string) == 1:
print('是回文联!')
else:
print('不是回文联!')