条件和循环不仅是计算机语言中常用的语句,而且也是我们日常生活中常用的沟通方式,如果明天下雨那么我一定会拿伞,这就是比较鲜明的一个条件语句;当然如果你说男生不仅都是大猪蹄子,而且还是复读机,总是在说“多喝热水”;
那么这个复读就是一个循环的过程;所以本章我们主要讲一下条件判断和循环的用法。
4.1 改进数字游戏—if语句
还记不记得我们在第一章开始就写好的一个“小游戏”,我们把它再列出来看看:
# ----猜数字游戏----num = input("猜猜我心里想的是哪个数字?")guess = int(num)if guess == 6: print("恭喜你猜对了,真厉害")else: print("猜错了,真low")---------------------
# ----猜数字游戏----
num = input("猜猜我心里想的是哪个数字?")
guess = int(num)
if guess == 6:
print("恭喜你猜对了,真厉害")
else:
print("猜错了,真low")
---------------------
首先input我们就不必多说,是用于输入的方法,第3行为什么我们要用int()进行强制类型转换呢?因为通过input进行输入的不管我们输入数字还是字符,全部会被当成字符串来看待,因此这里加了强制类型转换。
然后我们仔细的讲一下if这个语句的用法,“if”众所周知,在英语里是“如果”的意思,“如果你有一个苹果,那请都给我。。。”对吧,在这里“如果”之后的语句就是一个起判断作用的句子,也是后面的程序能否执行的一个条件;另外这里其实也体现出了python的灵魂—缩进,在python中,不需要像其他语言一样,需要用花括号来体现一个语句的作用范围,比如C语言中是这样写的:
if (guess == 6){ printf("恭喜你猜对了,真厉害");}
在python中,一个缩进(TAB)就足够了,而且必须要有这个缩进;并且句尾的冒号也不能忘记!
那么接下来我们是不是还可以做一下改进,让它更人性化一些呢?
# ----猜数字游戏-第一次修改---- num = input("猜猜我心里想的是哪个数字?") guess = int(num)if guess == 6: print("恭喜你猜对了,真厉害") if guess > 6: print("错了,错了,猜大了")if guess < 6: print("错了,错了,猜小了")---------------------------
这样修改之后就会把你猜的结果和答案对比,并输出你错误的原因了;但这里使用了三个if判断语句,也就是说,程序在运行的时候会依次遍历这三个if条件,即使第一个if符合判断,程序还是会遍历下面的if,这对我们来说是没必要的,当然也会影响代码的执行速度,当然只有3个并列的if是感受不出来的,一旦有很多个if,比如有100万个if并列执行,即使第一个if条件已经满足了,系统还是会再去判断剩下的99.9999万个if,不管计算机的运行速度有多快,仍然会耗费一些时间,所以呢,我们可以做以下改进:
# ----猜数字游戏-第二次修改---- num = input("猜猜我心里想的是哪个数字?") guess = int(num)if guess == 6: print("恭喜你猜对了,真厉害") elif guess > 6: print("错了,错了,猜大了")else: print("错了,错了,猜小了")---------------------------
我们把第二个“if”改成了“elif”,其实就是“else if”的缩写,这样的话如果判断满足第一个if条件,就不会再向下执行了,并且最后一个条件可以直接写“else”,这就可以包含所有的情况了,所以建议都使用这种形式。
4.2 while循环语句
while是什么?字面意思是“当什么什么的时候”,并且“while后需要跟持续性动词,when后面跟瞬间性动词。。。”,有没有很熟悉?初中英语的知识记得还牢固吧!while感觉好像也是一个判断语句,但实际不然,虽然它和if都需要有条件;区别在于如果while条件满足它会一直的执行然后再判断再执行,while是个“无底洞”,如果代码出现失误,它会使程序无限的循环,进而进入“死循环”。下面看一个例子,但不要轻易尝试运行。
# 布尔类型True,代表条件为真。while True: print("进入死循环啦 \n")
# 布尔类型True,代表条件为真。
while True:
print("进入死循环啦 \n")
True是bool类型的真,当真时,while的语句会循环执行,那上面这行代码如果运行的话,会持续不断的输出“进入死循环啦”,除非你点击停止按钮。那我们是否可以改进我们之前的数字游戏呢,从而能够让我们多次进行输入,很简单:
# ----猜数字游戏-第三次修改---- while True: num = input("猜猜我心里想的是哪个数字?") guess = int(num) if guess == 6: print("恭喜你猜对了,真厉害") elif guess > 6: print("错了,错了,猜大了") else: print("错了,错了,猜小了")---------------------------
只需要在整个程序前加一个while True死循环就可以一次一次又一次的执行这个程序了,只要你不强制结束,他就永存不朽,所以while循环的常见格式就是:
while 条件: 循环体
当然,上面的游戏如果一直循环执行也不太合理,我们不妨想办法当答案猜对时就停止此程序:
guess = 0while guess != 6: num = input("猜猜我心里想的是哪个数字?") guess = int(num) if guess == 6: print("恭喜你猜对了,真厉害") elif guess > 6: print("错了,错了,猜大了") else : print("错了,错了,猜小了")
结果:
猜猜我心里想的是哪个数字?5错了,错了,猜小了猜猜我心里想的是哪个数字?7错了,错了,猜大了猜猜我心里想的是哪个数字?6恭喜你猜对了,真厉害
这样更改之后while就是有限的循环了,只要我们猜对数字,就会跳出循环,所以这里可以看出来——while每循环一次之前都会先判断一下条件是否满足。
4.3 for循环与range()函数
我们已经有了while循环,但毕竟while并不是万能的,有一些情况下while处理不了的循环,用了for你会感觉,嗯~真方便;比如我们创建一个字符串,然后用for循环将每个字符一个一个的输出:
string = "I Love Python!"for each in string: print(each)
string = "I Love Python!"
for each in string:
print(each)
结果:
I Love Python!
运行一下结果,是不是已经成功的将每个字符输出了呢。
但这样似乎只是一个“解包”的过程,并没有体现出循环的效果,其实这也是循环的一种功能——将字符串进行遍历并将每一个字符进行逐一输出;当然结合range函数会将循环体现的更明显一些。然后我们结合range来讲一下这两个小伙伴是怎么搭配使用的? range是“范围”的意思,一般的用法格式为:
range(start, stop, step)# start是这个范围的开始,stop是这个范围的结束,step代表步数。#范围包括start但不包括stop
range(start, stop)的使用是“前闭后开”,数学上我们学过,他的范围包含start但不包含stop,有了range这个小伙伴,for循环用起来才会如鱼得水,看一下下面的例子:
for each in range(1,10,2): print(each)
for的用法是如上使用的,for i in range():表示i从range的第一个数开始取值,每循环一次,都遍历到下一个值,因此上面代码的输出结果是:
13579
首先要知道在range(1,10)里面是包括1但不包括10的,同时step代表的步数也一清二楚了吧,代表跳几步然后输出,感受一下这个循环吧,是不是这样就可以改进我们的数字游戏,让它随我们的意愿执行多少次呢?录入下面的代码看一下吧。
# --------猜数字游戏-第四次修改--------n = int(input("请输入要猜的次数:"))for i in range(n): num = input("猜猜我心里想的是哪个数字?") guess = int(num) if guess == 6: print("恭喜你猜对了,真厉害") elif guess > 6: print("错了,错了,猜大了") else: print("错了,错了,猜小了")print("回答次数已用完!")---------------------------
运行一下,是不是可以随心所欲的来修改猜数字的次数了呢。
4.4 break语句
我们知道:既然有了循环语句,那么程序就可以一直不断的循环运行,那么我们如果要打断它,除了给它加一个循环条件之外,还有没有其他的方法?毕竟跳出循环的应用场景有很多,如果根据需求想在循环体内部跳出呢?
这里我们就要介绍一个同样经常用到的break语句,用来从循环体内部跳出循环,也就是说,在循环体内部,如果你想当满足一个条件时,跳出循环,直接写一个break就够了,我们对猜数字游戏再进行一次修改:
# --------猜数字游戏-第五次修改--------n = int(input("请输入要猜的次数:"))for i in range(n): num = input("猜猜我心里想的是哪个数字?") guess = int(num) if guess == 6: print("恭喜你猜对了,真厉害") break elif guess > 6: print("错了,错了,猜大了") else: print("错了,错了,猜小了")print("游戏结束!") ---------------------------
# --------猜数字游戏-第五次修改--------
n = int(input("请输入要猜的次数:"))
for i in range(n):
num = input("猜猜我心里想的是哪个数字?")
guess = int(num)
if guess == 6:
print("恭喜你猜对了,真厉害")
break
elif guess > 6:
print("错了,错了,猜大了")
else:
print("错了,错了,猜小了")
print("游戏结束!")
---------------------------
结果:
请输入要猜的次数:4猜猜我心里想的是哪个数字?6恭喜你猜对了,真厉害游戏结束!
请输入要猜的次数:4
猜猜我心里想的是哪个数字?6
恭喜你猜对了,真厉害
游戏结束!
看到差别了吗?一个简单的break语句,当你猜对了之后不会让你继续猜(猜对了,还要猜,这逻辑不对吧),而是输出“恭喜你猜对了,真厉害”之后跳出循环,好啦,这个猜数字游戏基本已经完善了,快让它运行起来吧。
4.5 continue语句
我们再来补充一个continue语句,虽然不常用,但毕竟有些情况下必须要用,continue是继续的意思,一般也是运用在循环语句里,跟break正是一对相反的老冤家。这个语句的作用是,终止本次循环,并开始下一轮循环,是不是有点懵,先看一下下面的例子吧:
for i in range(10): if i % 2 == 0: print(i) continue i += 2 print(i)
for i in range(10):
if i % 2 == 0:
print(i)
continue
i += 2
print(i)
结果:
03254769811
0
3
2
5
4
7
6
9
8
11
这串代码表明,程序自上而下运行,当满足if条件时,会直接输出当前的i值,然后continue会让程序直接回到for循环的开始位置,而不再运行continue下面的语句,当然在pycharm中有个debug功能,逐行运行的话会让我们看到程序的执行顺序。
如图示可以看出,当执行到continue时会跳过下面的代码直接跳回for循环的开始位置,继续执行。
这些就是条件判断和循环相关的基础知识了,整篇文章猜数字游戏穿插其中,希望通过这种方式能让我们更好理解。