本章共有四节内容,如下图所示:
![](https://img.haomeiwen.com/i2563104/582788c834ec7bbf.png)
到今天,我们终于进入到激动人心的用户输入和while循环,我一直想要把这本书的作者小时候写的那个程序,放到我们的课程中。
学习完用户输入的input语句和while循环,我们就可以开始这个工作了。
好啦,我们开始学习吧!《跟我学Python从小白到入门》之Part7用户输入和while循环
《Python编程:从入门到实践》的作者在前言这样写到:
我还是个孩子时就开始学习编程了,当时我父亲在计算时代的先锋之一——数字设备公司(Digital Equipment Corporation)工作。我使用一台简陋的计算机编写了第一个程序,这台计算机是父亲在家里的地下室组装而成的,它没有机箱,裸露的主板与键盘相连,显示器是裸露的阴极射线管。我编写的这个程序是一款简单的猜数字游戏,其输出类似于下面这样:
I'm thinking of a number! Try to guess the number I'm thinking of: 25
Too low! Guess again: 50
Too high! Guess again: 42
That's it! Would you like to play again? (yes/no) no
Thanks for playing!
从一开始学习这本书,我就想把上面这个程序编出来,结果手机上和电脑上的网页版编辑器,完全不接受input()的用户输入,今天终于可以开始做我三个月前就想做的事了。
下面,请大家用Python学习群的Python大大的“代码三步上手”的方法,首先复制粘贴,再来慢慢看程序整体,再来慢慢看每一句有什么作用,再来自己模仿编写,再来创意编写,嗯,开始吧。
while循环的整体结构如下:
while 条件:
满足条件执行循环体
循环体中一定要设置条件被改变的语句
循环结束,执行While循环后续语句
注意:从今天这个内容开始,前面我们使用的网页版编辑器就要成为历史了哦,因为网页版不能接收input()语句请求的用户输入,所以我们必须安装电脑版的Python编辑器。
电脑上的Python编辑器的安装,请看我前一篇文章,点击下面的蓝色字就可以进入查看:
最好用的Python编辑器——Pycharm之安装与设置
记住,要运行程序,得到程序运行的结果可以使用快捷键:CTRL + SHIFT + F10
key="yes"
while key=="yes":
x = input("I thought of a double digit number! Try to guess the number I'm thinking of:")
if int(x)<42:
print("Too low! Guess again:")
elif int(x)>42:
print("Too high! Guess again:")
else:
print("That's it! ")
print("Thanks for playing!")
break
key = input("Would you like to play again? (yes/no)")
if key=="yes":
continue
elif key =="no":
print("Thanks for playing!")
记住,程序输入之后,运行程序使用CTRL+SHIFT+F10组合键。
如果你是英文小白也没有关系,下面这段程序与上面的代码完全相同,只是使用了中文提示信息,用户输入和系统接收的也是汉字:
key="好"
while key=="好":
x = input("嗨,你好!我是Robot,我想了一个两位数! 请你猜猜看:")
if int(x)<42:
print("你猜的数字太小了! 再试试吧!")
elif int(x)>42:
print("你猜的数字太大了! 再试试吧!")
else:
print("对啦,就是这个神奇的数字,你猜中啦! ")
print("谢谢你陪我玩这个游戏!")
break
key = input("继续玩吗? 请输入 (好/不)")
if key=="好":
continue
elif key =="不":
print("谢谢你陪我玩这个游戏!")
OK,与while语句和input()函数的第一次见面就到这里,我们现在开始细细的研究一下它们吧。
在第 7 章的用户输入和while循环的内容中,我们引进了一个新的函数input(),下面我们来看看函数input()的工作原理:
![](https://img.haomeiwen.com/i2563104/2ccc457de2e136b2.png)
7.1.1 编写清晰的程序
函数input()的作用,是等待用户从键盘输入数据。
程序执行到函数input()时,会暂停运行,等待用户输入一些文本,用户输入完成之后,我们可以在Python代码中把接收到的值赋给一个变量,这样用户输入的文本就会存储在一个变量中,方便我们以后来使用。
我们先来看一个简单的程序
x=input("请输入一个数字:")
print(x)
请在你的Pycharm编辑器中,点击file-new-python file,新建一个Python文件
![](https://img.haomeiwen.com/i2563104/4d89b229b533e1d1.png)
在打开的窗口中,输入一个文件名“input函数练习001”,并点击OK。
![](https://img.haomeiwen.com/i2563104/f8862a31989d42b5.png)
此时,会打开一个新窗口,复制简书上的这两行代码,并在新窗口右键单击,选择第二个选项——Paste,这个是粘贴,左键单击就可以将刚刚复制的代码粘贴进去。
![](https://img.haomeiwen.com/i2563104/eac3c528a918034d.png)
现在,你的屏幕如下图,再按组合键CTRL+SHIFT+F10运行程序,记住,在下面的窗口中,在“请输入一个数字”后面单击鼠标左键,在键盘上输入10,程序运行结果如下图所示:
![](https://img.haomeiwen.com/i2563104/0291ff50a8999824.png)
7.1.2 使用int()来获取数值输入
我们来分析一下上面这两行代码:
第一行:
x=input("请输入一个数字:")
第一行代码实际上是两个语句的组合起来的,一个是赋值语句x=XXXXX,一个是input()函数
x=下面输入的内容放到这个变量中
input("请输入一个数字:")
第二行代码,就是打印输出刚刚用户在键盘输入的数字,这个我们已经非常熟悉了,就不多说。
print("你输入的数字是:"+x)
但是,大家要注意的是input()函数,默认用户输入的所有内容均为文本类型,所以,以下的代码就会出错
x=input("请输入一个数字:")
y=100
z=x+y
print(z)
运行时,出错信息为下图所示:
![](https://img.haomeiwen.com/i2563104/16b9e6081b4a0c02.png)
因为,用户输入的数据,虽然是数字,但是,默认为文本格式,所以不能与数值型数据相加,所以出现了字符串不是整形数据的信息。
我们要进行相加的运算,就要转换数据类型,用到我们前面学习过的int()函数来进行转换,修改后的代码如下:
x=input("请输入一个数字:")
y=100
z=int(x)+y
print(z)
或者,我们要显示得更清楚,可以使用以下代码:
x=input("请输入一个数字:")
y=100
z=int(x)+y
print("你输入的数字加上100之后是:"+str(z))
脑洞时间
思考一下,为什么上面的代码最后一句要用str(z)来进行转换?将这句改为以下代码,会出现什么问题?
print("你输入的数字是:"+z)
7.1.3 求模运算符
不要被这个高大上的名称弄糊涂了,求模运算其实就是我们熟悉的取余运算。我们来看两个表达式。
x=10/2
y=10%2
print(x)
print(y)
第一个表达式是我们熟悉的除法,结果是两个数相除得到的商。
第二个表达式就是取余运算,结果是两个数相除得到的余数,这个运算通常可以用来判断一个数是偶数还是奇数,我们来看一段代码:
x=(input("请输入一个数字:")
x=int(x)
if x%2==0:
print("你输入的数字是偶数")
else:
print("你输入的数字是奇数")
注意:
x=int(x)
这一句的作用,是把输入的数据从字符型转换为整型,没有这一句,我们在上一段中已经说过,会出现错误。
7.1.4 在Python 2.7中获取输入
记住:在Python 2.7中获取用户输入,要使用函数raw_input()。
7.2 while循环简介
![](https://img.haomeiwen.com/i2563104/c16e6150e875ca62.png)
7.2.1 使用while循环
前面我们学习过For循环,用于针对集合中的每个元素的一个代码块。
使用while循环,如果不强行中断循环,使用while循环的代码会不断的运行。
所以,我们在使用while循环时,要退出循环有以下两种方法:
- while语句给定退出条件,当条件不满足时,会自动退出
- 使用break语句,强制退出循环
我们还是以开头的代码为例,完整代码如下:
key="好"
while key=="好":
x = input("嗨,你好!我是Robot,我想了一个两位数! 请你猜猜看:")
if int(x)<42:
print("你猜的数字太小了! 再试试吧!")
elif int(x)>42:
print("你猜的数字太大了! 再试试吧!")
else:
print("对啦,就是这个神奇的数字,你猜中啦! ")
print("谢谢你陪我玩这个游戏!")
break
key = input("继续玩吗? 请输入 (好/不)")
if key=="好":
continue
elif key =="不":
print("谢谢你陪我玩这个游戏!")
我们来看这个代码的第二句
while key=="好":
这一句就是用来进行给出退出条件的,循环条件满足时,会不断执行循环体。
key = input("继续玩吗? 请输入 (好/不)")
上面第十二句,等待用户输入,当用户输入的数据为“不”时,循环条件key=="好":就不再满足,会自动退出。
7.2.5 在循环中使用continue
代码的十三和十四行如下:
if key=="好":
continue
continue语句,用来跳过后面的语句,回到程序开头重新执行下一次循环。
注意:避免无限循环
为避免无限循环,我们在循环体中一定要设置循环条件被改变的语句。
如果程序陷入无限循环,可按Ctrl + C退出死循环。
归纳一下while循环的整体结构如下:
while 条件:
满足条件执行循环体
循环体中一定要设置条件被改变的语句
循环结束,执行While循环后续语句
今天就到这里吧!下次我们学习第七章第三节:
![](https://img.haomeiwen.com/i2563104/9315efe78699c254.png)
正文到此结束,谢谢你的时间,谢谢你的阅读!
愿这个系列教程能够成为你在Python新世界里,行走漫步的陪伴,要知道,你并不孤独。
20171030开题
20171107完成
以下是一个话唠的例行PS,与正文无关,只为记录此文写作过程与心路历程:
- 决定回归程序设计入门写作,今天(11月7日)就交这篇。
不输出,就会一直停止输入,这一章停了三周了。不行。
今天(10月30日)经过长达两个小时的调试,终于搞定了这个程序。主要是好久没有写程序了,还是N年前的C和Basic以及FoxBase的基础,再加上今天一开始敲代码就没有“写作大纲”,直接开始一个字一个字的写进编辑器。但是,写程序其实跟写文章一模一样,都是要有大纲有骨架,然后再往里面填写具体内容,最后再进行完善的。 - 调试程序1,第一次编写,直接敲代码开写,结果漏洞百出,下面程序有错:
x=input("I'm thinking of a number! Try to guess the number I'm thinking of:")
y="yes"
while True:
while y=="yes":
if int(x)<42:
print("Too low! Guess again:")
elif int(x)>42:
print("Too high! Guess again:")
else:
print("That's it! )")
y = input("Would you like to play again? (yes/no)")
if y == "no" or y == "NO" or y == "nO" or y == "No":
print("Thanks for playing!")
break
elif y == "yes":
continue
- 于是在纸上画了一个流程之后,发现While语句开始的位置完全出错,再进行编写,调试程序2:
key="yes"
while key=="yes":
x = input("I'm thinking of a number! Try to guess the number I'm thinking of:")
if int(x)<42:
print("Too low! Guess again:")
elif int(x)>42:
print("Too high! Guess again:")
else:
print("That's it! ")
print("Thanks for playing!")
break
key = input("Would you like to play again? (yes/no)")
if key != "yes" or key != "no":
print("Enter the data error,Please enter yes or no:")
key = input("Would you like to play again? (yes/no)")
if key=="no":
print("Thanks for playing!")
break
continue
- 从21号看完实体书的教程后开写,停了两周之后,10月30号开写主体程序并调试完成,实际上还不完善,但是完成大于完美,所以,就这样吧。但是,有点焦虑,这么简单一个程序都要花这么长时间调试,感觉有点泄气了。
好吧,进入一个新领域,总是这样,要接受和原谅自己最开始的笨拙,嗯,谢谢李笑来老师教诲,让我能接受和忍受起步时的笨拙,会继续投入时间等待终有一天的起飞。 - 每次写程序学习的文发到群里都被战友说看不懂,决定改一下,所以昨天(10月21号)没发程序这篇,今天(10月22号)来写,现在是11:39,Go!然而只开了个头
- 决定回归程序设计入门写作,今天就交这篇。
不输出,就会一直停止输入,这一章停了三周了。不行。
网友评论