《Python程序设计案例教程》-课后习题答案第4章

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('不是回文联!')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李威威wiwi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值