Python练习题3/4/5/6/7

》》点赞,收藏+关注,理财&技术不迷路《《

课后练习题三:

0. 请问以下代码会打印多少次“我爱鱼C!”

while 'C':

    print('我爱鱼C!')

会打印 无数次

1. 请问以下代码会打印多少次“我爱鱼C!”

i = 10

while i:

    print('我爱鱼C!')

    i = i - 1

会打印 10次

2. 请写出与 10 < cost < 50 等价的表达式(10 < cost) and (cost < 50)

3. Python3 中,一行可以书写多个语句吗?

可以,一行过长的语句可以使用反斜杠或者括号分解成几行,不妨试试:

>>>3 > 4 and \ 

>>>1 < 2

或者

>>>(3 > 4 and

>>>1 < 2)

加斜杠\或者加上括号()

5. 请问Python的 and 操作符 和C语言的 && 操作符 有何不同?【该题针对有C或C++基础的朋友】

6. 听说过“短路逻辑(short-circuit logic)”吗?逻辑操作符有个有趣的特性:在不需要求值的时候不进行操作。这么说可能比较“高深”,举个例子,表达式 x and y,需要 x 和 y 两个变量同时为真(True)的时候,结果才为真。因此,如果当 x 变量得知是假(False)的时候,表达式就会立刻返回 False,而不用去管 y 变量的值。

这种行为被称为短路逻辑(short-circuit logic)或者惰性求值(lazy evaluation),这种行为同样也应用与 or 操作符,这个后边的课程小甲鱼会讲到,不急。

实际上,Python 的做法是如果 x 为假,表达式会返回 x 的值(0),否则它就会返回 y 的值(例子参考楼上那题)。

动动手:

完善第二个改进要求(为用户提供三次机会尝试,机会用完或者用户猜中答案均退出循环)并改进视频中小甲鱼的代码。

import random

times = 3

secret = random.randint(1,10)

print('------------------我爱鱼C工作室------------------')

# 这里先给guess赋值(赋一个绝对不等于secret的值)

guess = 0

# print()默认是打印完字符串会自动添加一个换行符,end=" "参数告诉print()用空格代替换行# 嗯,小甲鱼觉得富有创意的你应该会尝试用 end="JJ"?

print("不妨猜一下小甲鱼现在心里想的是哪个数字:", end=" ")

while (guess != secret) and (times > 0):

temp = input()

guess = int(temp)

times = times - 1 # 用户每输入一次,可用机会就-1  if guess == secret:

print("我草,你是小甲鱼心里的蛔虫吗?!")

print("哼,猜中了也没有奖励!")

else:

if guess > secret:

  print("哥,大了大了~~~")  

else:

print("嘿,小了,小了~~~")

 if times > 0:

  print("再试一次吧:", end=" ")  

else:

  print("机会用光咯T_T")

print("游戏结束,不玩啦^_^")

尝试写代码实现以下截图功能:

temp = input('请输入一个整数:') number = int(temp)

i = 1

while number:

print(i)

i = i + 1

number = number – 1

方法:

temp = input('请输入一个整数:') 

number = int(temp)

while number:

i = number - 1

while i:

  print(' ', end = '')    

i = i - 1

  j = number

  while j:

print('*', end = '')  

j = j - 1

print()

  number = number – 1

课后练习四(闲聊之Python的数据类型):

0. 在 Python 中,int 表示整型,那你还记得 bool、float 和 str 分别表示什么吗?

bool 表示布尔类型 float 表示浮点型 str 表示字符串

1. 你知道为什么布尔类型(bool)的 True 和 False 分别用 1 和 0 来代替吗?

你可能听说过计算机是很“笨”的,究其根本是因为它只认识二进制数,所以所有的编程语言最终都会转 换成简单的二进制序列给CPU按照一定的规则解析。 由于二进制只有两个数:0 和 1,因此用 0 和 1 来表示 False 和 True 再适合不过了,因为不用浪费资源 在转换的过程上!

1. 使用 int() 将小数转换为整数,结果是向上取整还是向下取整呢?我们可爱的小甲鱼说了,小数取整会采用比较暴力的截断方式,即向下取整。(注:5.5向上取整为6,向 下取整为5)

1. 我们人类思维是习惯于“四舍五入”法,你有什么办法使得 int() 按照“四舍五入”的方式取整吗?

int() 固然没那么“聪明”,但机器是死的,鱼油是活的! 5.4 “四舍五入”结果为:5,int(5.4+0.5) == 5 5.6 “四舍五入”结果为:6,int(5.6+0.5) == 6 大家看明白了吗?

1. 取得一个变量的类型,视频中介绍可以使用 type() 和 isinstance(),你更倾向于使用哪个?

建议使用 isinstance(),因为它的返回结果比较直接,另外 type() 其实并没有你想象的那么简单,我们后 边会讲到。

1. Python3 可以给变量命名中文名,知道为什么吗?

Pyhton3 源码文件默认使用utf-8编码(支持中文),这就使得以下代码是合法的: >>> 小甲鱼 = '我爱你' >>> print(小甲鱼) >>> 我爱你

动动手答案: 

0. 针对视频中小甲鱼提到的小漏洞,再次改进我们的小游戏:当用户输入错误类型的时候,及时提醒用户 重新输入,防止程序崩溃。需要注意的地方在代码中已经注释!

import random

times = 3 

secret = random.randint(1,10)

print('------------------我爱鱼C工作室------------------') 

guess = 0 

print("不妨猜一下小甲鱼现在心里想的是哪个数字:", end=" ")

while (guess != secret) and (times > 0):

temp = input()

if temp.isdigit():

guess = int(temp)

if guess == secret:

print("我草,你是小甲鱼心里的蛔虫吗?!") print("哼,猜中了也没有奖励!")

else:

if guess > secret: print("哥,大了大了~~~") else:

print("嘿,小了,小了~~~") if times > 0: print("再试一次吧:", end='') else:

print("机会用光咯T_T")

else:

print("抱歉,您的输入有误,请输入一个整数:", end='')

times = times - 1 # 用户每输入一次,可用机会就-1

print("游戏结束,不玩啦^_^")

1. 写一个程序,判断给定年份是否为闰年。

temp = input('请输入一个年份:') 

while not temp.isdigit():

temp = input("抱歉,您的输入有误,请输入一个整数:")

year = int(temp)、

if year/400 == int(year/400):

print(temp + ' 是闰年!')

else:

if (year/4 == int(year/4)) and (year/100 != int(year/100)): print(temp + ' 是闰年!') 

else:

print(temp + ' 不是闰年!')

课后习题五(常用的操作符):

0.Python 的 floor 除法现在使用 “//” 实现,那 3.0 // 2.0 您目测会显示什么内容呢?如果回答是 1.5 那么很遗憾,您受到 C 语言的影响比较大,Python 这里会义无反顾地执行 floor 除法原则,答案是:1.0

1.a < b < c 事实上是等于?(a < b) and (b < c)

2不使用 IDLE,你可以轻松说出 5 ** -2 的值吗?0.04,也就是 1/25.  幂运算操作符比其左侧的一元操作符优先级高,比其右侧的一元操作符优先级低。

3. 如何简单判断一个数是奇数还是偶数?

使用求余可以简单得到答案:能被 2 整除为偶数,所以 x % 2 == 0,否则为奇数。

4.请用最快速度说出答案:not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9如果你的回答是 0,那么小甲鱼很开心你中招了!答案是:4(not 1) or (0 and 1) or (3 and 4) or (5 and 6) or (7 and 8 and 9) == 0 or 0 or 1not or and 的优先级是不同的:not > and > or我们按照优先级给它们加上括号:(not 1) or (0 and 1) or (3 and 4) or (5 and 6) or (7 and 8 and 9)== 0 or 0 or 4 or 6 or 9== 4为啥是 4?大家还记得第四讲作业提到的“短路逻辑”吗?3 and 4 == 4,而 3 or 4 == 3。所以答案是:4温馨提示:为了更好的表达你的程序,小甲鱼再次呼吁有些括号还是不能省下的,毕竟不是所有程序员都跟你一样都将优先级烂透于心的。

还记得我们上节课那个求闰年的作业吗?如果还没有学到“求余”操作,还记得用什么方法可以“委曲求全”代替“%”的功能呢?因为上节课我们还没有教大家“求余”的操作,所以小甲鱼使用了“if year/400 == int(year/400)”这样的方式来“委曲求全”。

动动手答案:

0. 请写一个程序打印出 0~100 所有的奇数。

i = 0

while i <= 100:

    if i % 2 != 0:

        print(i, end=' ')

        i += 1

    else:

        i += 1

1. 我们说过现在的 Python 可以计算很大很大的数据,但是......真正的大数据计算可是要靠刚刚的硬件滴,不妨写一个小代码,让你的计算机为之崩溃?print(2 ** 2 ** 32)# 一般很多机子都会在一会儿之后:Memory Overflow,内存不够用。# 设计到幂操作,结果都是惊人滴。

2. 题目:请编程求解该阶梯至少有多少阶?

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('在程序限定的范围内找不到答案!')

课后习题六(分支与循环):

0.if not (money < 100): 这行代码相当于?if money >= 100:

1. assert 的作用是什么?

assert这个关键字我们称之为“断言”,当这个关键字后边的条件为假的时候,程序自动崩溃并抛出AssertionError的异常。什么情况下我们会需要这样的代码呢?当我们在测试程序的时候就很好用,因为与其让错误的条件导致程序今后莫名其妙地崩溃,不如在错误条件出现的那一瞬间我们实现“自爆”。一般来说我们可以用Ta再程序中置入检查点,当需要确保程序中的某个条件一定为真才能让程序正常工作的话,assert关键字就非常有用了。 

2. 假设有 x = 1,y = 2,z = 3,请问如何快速将三个变量的值互相交换?

x, y, z = z, y, x  

3. 猜猜 (x < y and [x] or [y])[0] 实现什么样的功能?

这其实是 Python 的作者还没有为 Python 加入三元操作符之前,Python 社区的小伙伴们灵活的使用 and 和 or  搭配来实现三元操作符的功能,这里边有涉及到列表和切片的知识,这部分知识很快就会讲解,迫不及待的朋友可以先稍微预习下。  

4. 你听说过成员资格运算符吗?

Python 有一个成员资格运算符:in,用于检查一个值是否在序列中,如果在序列中返回 True,否则返回 False。  例如:

>>> name = '小甲鱼'

>>> '鱼' in name

True

>>> '肥鱼' in name

False

当下节课我们讲解 for 语句的时候,你看到 in 会不会就有了更深入的理解?!

动动手答案:

0. 视频中小甲鱼使用 if elif else 在大多数情况下效率要比全部使用 if 要高,但根据一般的统计规律,一个班的成绩一般服从正态分布,也就是说平均成绩一般集中在 70~80 分之间,因此根据统计规律,我们还可以改进下程序以提高效率。

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('输入错误!')

1. Python 的作者在很长一段时间不肯加入三元操作符就是怕跟C语言一样搞出国际乱码大赛,蛋疼的复杂度让初学者望而生畏,不过,如果你一旦搞清楚了三元操作符的使用技巧,或许一些比较复杂的问题反而迎刃而解。

small = x if (x < y and x < z) else (y if y < z else z)

 

课后习题七(循环):

0. 下面的循环会打印多少次"I Love FishC"?

for i in range(0, 10, 2):

    print('I Love FishC')

5 次,因为从 0 开始,到 10 结束,步进为 2。  

1.下面的循环会打印多少次"I Love FishC"?

for i in 5:

    print('I Love FishC')

会报错,上节课的课后习题我们提到了 in 是“成员资格运算符”,而不是像 C 语言那样去使用 for 语法。Python 的 for 更像脚本语言的 foreach。

 

2.回顾一下 break 和 continue 在循环中起到的作用

break语句的作用是终止当前循环,跳出循环体。continue语句的作用是终止本轮循环并开始下一轮循环(这里要注意的是:在开始下一轮循环之前,会先测试循环条件)。

3. 请谈下你对列表的理解:嗯,有些知识点需要自己总结才能加固,下节课小甲鱼将跟大家畅谈一个打了激素的数组:列表,不容错过哦^_^.

4.请问 range(10) 生成哪些数?

        会生成 range(0, 10),list(range(0, 10)) 转换成列表是:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],注意不包含 10 哦。

 

5. 目测以下程序会打印什么?

while True:

    while True:

        break

        print(1)

    print(2)

    break

print(3)

复制代码

会打印:23因为 break 只能跳出一层循环,记住咯!        

6.什么情况下我们要使循环永远为真:

while Ture:    循环体    同样用于游戏实现,因为游戏只要运行着,就需要时刻接收用户输入,因此使用永远为真确保游戏“在线”。操作系统也是同样的道理,时刻待命,操作系统永远为真的这个循环叫做消息循环。另外,许多通讯服务器的客户端/服务器系统也是通过这样的原理来工作的。     所以永远为“真”虽然是“死循环”,但不一定是坏事,再说了,我们可以随时用 break 来跳出循环!   

7.【学会提高代码的效率】你的觉得以下代码效率方面怎样?有没有办法可以大幅度改进(仍然使用while)?

 

i = 0

string = 'ILoveFishC.com'

while i < len(string)):

    print(i)

    i += 1

复制代码

这段代码之所以“效率比较低”是因为每次循环都需要调用一次 len() 函数(我们还没有学到函数的概念,小甲鱼这里为零基础的朋友形象的解释下:就像你打游戏打得正HIGH的时候,老妈让你去买盐......你有两种选择,一次买一包,一天去买五次,或者一次性买五包回来,老妈要就直接给她。)

i = 0

string = 'ILoveFishC.com'

length = len(string)

while i < length:

    print(i)

    i += 1  

复制代码

小甲鱼希望学习咱的课程的朋友不是只为了可以把程序写出来,而是追求把代码写好,写漂亮,做一个有理想、有追求的程序猿!

动动手答案:  

0. 设计一个验证用户密码程序,用户只有三次机会输入错误,不过如果用户输入的内容中包含"*"则不计算在内。

count = 3

password = 'FishC.com'

 

while count:

    passwd = input('请输入密码:')

    if passwd == password:

        print('密码正确,进入程序......')

        break

    elif '*' in passwd:

        print('密码中不能含有"*"号!您还有', count, '次机会!', end=' ')

        continue

    else:

        print('密码输入错误!您还有', count-1, '次机会!', end=' ')    

    count -= 1

复制代码

1. 编写一个程序,求 100~999 之间的所有水仙花数。

如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数

for i in range(100, 1000):

    sum = 0

    temp = i

    while temp:

        sum = sum + (temp%10) ** 3

        temp //= 10         # 注意这里要使用地板除哦~

    if sum == i:

        print(i)

复制代码

2. 三色球问题

有红、黄、蓝三种颜色的求,其中红球 3 个,黄球 3 个,绿球 6 个。先将这 12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配。

print('red\tyellow\tblue')

for red in range(0, 4):

    for yellow in range(0, 4):

        for green in range(2, 7):

            if red + yellow + green == 8:

                # 注意,下边不是字符串拼接,因此不用“+”哦~

                print(red, '\t', yellow, '\t', green)

复制代码

注释:range(2, 7)是产生[2, 3, 4, 5, 6]5个数,绿球不能是1个,因为如果绿球是1个的话,红球 + 黄球需要有7个才能符合题意,而红球和黄球每种只有3个,因此是range(2, 7)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值