Python学习笔记(六)-循环

  1. if not (money < 100): 这行代码相当于?
if money >= 100:
  1. assert 的作用是什么?

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

  1. 假设有 x=1,y=2,z=3,请问如何快速将三个变量的值互相交换?
x, y, z = z, y, x
  1. 猜猜 (x < y and [x] or [y])[0] 实现什么样的功能?

这其实是 Python 的作者还没有为 Python 加入三元操作符之前,Python 社区的小伙伴们灵活的使用 and 和 or 搭配来实现三元操作符的功能

  1. 成员资格运算符

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

例如:

>>> name = '小甲鱼'
>>> '鱼' in name
True
>>> '肥鱼' in name
False

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

print("输入分数,计算评级")
score = input("输入分数")
scr = int(score)
if 100 >= scr >= 90:    
    print("A")
else:    
    if 90 > scr >= 80:        
        print("b")
    else:        
        if 80 > scr >= 60:            
            print("C")
        else:            
            if 60 > scr >= 0:                
                print("D")
            else:                
                print("end")

6. Python 中的三元操作符

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

7. range()函数的用法

>>> range(1,5) #代表从1到5(不包含5)
[1, 2, 3, 4]
>>> range(1,5,2) #代表从1到5,间隔2(不包含5)
[1, 3]
>>> range(5) #代表从0到5(不包含5)
[0, 1, 2, 3, 4]

8. break 和 continue 在循环中起到的作用

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

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

比如用于游戏实现,因为游戏只要运行着,就需要时刻接收用户输入,因此使用永远为真确保游戏“在线”。操作系统也是同样的道理,时刻待命,操作系统永远为真的这个循环叫做消息循环。另外,许多通讯服务器的客户端/服务器系统也是通过这样的原理来工作的。

所以永远为“真”虽然是“死循环”,但不一定是坏事,再说了,我们可以随时用 break 来跳出循环!

10. 以下代码效率方面怎样?有没有办法可以大幅度改进(仍然使用while)?

i = 0
string = 'ILoveFishC.com'
while i < len(string)):    
    print(i)
    i += 1

这段代码之所以“效率比较低”是因为每次循环都需要调用一次len()函数

i = 0
string = 'ILoveFishC.com'
length = len(string)
while i < length:    
    print(i)
    i += 1

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

i=0
myname='sa'
mypwd='pwd'
while 1:
    name=input('请输入用户名')
    pwd=input('请输入密码')
    if ('*' in name) or ('*' in pwd) :                print('输入的内容中不能包含*')
        continue    
    if name==myname and pwd==mypwd :        
        print('login success')
        break    
    else:
        i+=1
        #print('用户名或者密码错误,你还有'+str(3-i)+'次机会')        
        print('密码输入错误!您还有', 3-i, '次机会!', end=' ')
        if i==3:            
            print('3次机会用完,今日不能再次登录!')

12. 编写一个程序,求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)

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

print('红-黄-蓝')
for i in range(4):    
    for j in range(4):        
        for k in range(7):            
            if i+j+k==8:                
                print(i,'\t',j,'\t',k)
print('红-黄-蓝')
for i in range(4):    
    for j in range(4):        
        for k in range(2,7):            
            if i+j+k==8:                
                print(i,'\t',j,'\t',k)

注释:range(2, 7)是产生[2, 3, 4, 5, 6]5个数,蓝球不能是1个,因为如果蓝球是1个的话,红球+黄球需要有7个才能符合题意,而红球和黄球每种只有3个,因此是range(2, 7) 两种思路:1是绿球不能是0或1,因为如果绿球是1个的话,红球+黄球需要有7个才能符合题意,而红球和黄球每种只有3个,因此是range(2, 7)。 2是因为有条件(i+j+k==8)的限制,不需要考虑蓝球取值,因此是range(7):

原文发布于微信公众号 - 软件测试经验与教训(udatest)

原文发表时间:2017-12-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏生信技能树

【生信菜鸟经】如何系统入门Perl

Perl是典型的脚本语言,短小精悍,非常容易上手,尤其适合处理文本,数据,以及系统管理。它在老一辈的生物信息学分析人员中非常流行,出于历史遗留原因大家肯定会或多...

43790
来自专栏技术专栏

慕课网Flask高级编程实战-5.书籍详情页面的构建

大多时候,我们从数据库,或者外部网络获取到的原始数据,并不能满足复杂的业务需求。业务的直观体现就是页面。

16130
来自专栏惨绿少年

Python入门篇

42240
来自专栏美团技术团队

Android热更新方案Robust开源,新增自动化补丁工具

我们在之前的博客文章中介绍了高兼容性、高稳定性的实时热更新解决方案Robust之后,业内反响强烈,不断有读者咨询我们什么时候开源。今天我们非常高兴地宣布,Rob...

48350
来自专栏哲学驱动设计

EntityFramework 元数据 设计分析

    由于之前已经尝试使用过 EF CodeFirst CTP4,所以这次在EF4.1发布的第三天,在 OEA 框架中已经支持使用它来实现数据访问层。而且,我...

19280
来自专栏JetpropelledSnake

Python入门之面向对象的多态

本章目录:     一、多态     二、多态性     三、鸭子类型 ============================== 一、多态   多态指的是一...

36480
来自专栏技术专栏

慕课网Flask高级编程实战-6.书籍详情页面的构建

大多时候,我们从数据库,或者外部网络获取到的原始数据,并不能满足复杂的业务需求。业务的直观体现就是页面。

23210
来自专栏码洞

有趣的Python开源库之Hashids

Hashids是一个非常小巧的跨语言的开源库,它用来把数字编码成一个随机字符串。它不同于md5这种算法这种单向映射,Hashids除了编码还会解码。

8710
来自专栏竹清助手

深入理解 Laravel Eloquent(三)——模型间关系(关联)

Eloquent 是一个 ORM,全称为 Object Relational Mapping,翻译为 “对象关系映射”(如果只把它当成 Database A...

12930
来自专栏chafezhou

小说python何时使用生成器

生成器、迭代器作为python的两个高级特性,相信大家肯定耳熟能详,都能说道上一阵,但很多时候都是说说而已,知道有这么个东西,而且是好东西,但再看看写过的代码,...

7410

扫码关注云+社区

领取腾讯云代金券