跟我学Python从小白到入门之Part7——用户输入和while循环001

本章共有四节内容,如下图所示:

用户输入 和while循环

到今天,我们终于进入到激动人心的用户输入和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()的工作原理:

7.1 函数input()的工作原理

7.1.1 编写清晰的程序

函数input()的作用,是等待用户从键盘输入数据。

程序执行到函数input()时,会暂停运行,等待用户输入一些文本,用户输入完成之后,我们可以在Python代码中把接收到的值赋给一个变量,这样用户输入的文本就会存储在一个变量中,方便我们以后来使用。

我们先来看一个简单的程序

x=input("请输入一个数字:")
print(x)

请在你的Pycharm编辑器中,点击file-new-python file,新建一个Python文件

file-new-python file

在打开的窗口中,输入一个文件名“input函数练习001”,并点击OK。

截图03.png

此时,会打开一个新窗口,复制简书上的这两行代码,并在新窗口右键单击,选择第二个选项——Paste,这个是粘贴,左键单击就可以将刚刚复制的代码粘贴进去。

截图04.png

现在,你的屏幕如下图,再按组合键CTRL+SHIFT+F10运行程序,记住,在下面的窗口中,在“请输入一个数字”后面单击鼠标左键,在键盘上输入10,程序运行结果如下图所示:

截图05.png

7.1.2 使用int()来获取数值输入

我们来分析一下上面这两行代码:
第一行:

x=input("请输入一个数字:")

第一行代码实际上是两个语句的组合起来的,一个是赋值语句x=XXXXX,一个是input()函数

x=下面输入的内容放到这个变量中
input("请输入一个数字:")

第二行代码,就是打印输出刚刚用户在键盘输入的数字,这个我们已经非常熟悉了,就不多说。

print("你输入的数字是:"+x)

但是,大家要注意的是input()函数,默认用户输入的所有内容均为文本类型,所以,以下的代码就会出错

x=input("请输入一个数字:")
y=100
z=x+y
print(z)

运行时,出错信息为下图所示:

截图06.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循环简介

7.2 while循环简介

7.2.1 使用while循环
前面我们学习过For循环,用于针对集合中的每个元素的一个代码块。
使用while循环,如果不强行中断循环,使用while循环的代码会不断的运行。
所以,我们在使用while循环时,要退出循环有以下两种方法:

  1. while语句给定退出条件,当条件不满足时,会自动退出
  2. 使用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循环后续语句

今天就到这里吧!下次我们学习第七章第三节:

预告:7.3 使用while循环来处理列表和字典

正文到此结束,谢谢你的时间,谢谢你的阅读!

愿这个系列教程能够成为你在Python新世界里,行走漫步的陪伴,要知道,你并不孤独。

20171030开题
20171107完成


以下是一个话唠的例行PS,与正文无关,只为记录此文写作过程与心路历程:

  1. 决定回归程序设计入门写作,今天(11月7日)就交这篇。
    不输出,就会一直停止输入,这一章停了三周了。不行。
    今天(10月30日)经过长达两个小时的调试,终于搞定了这个程序。主要是好久没有写程序了,还是N年前的C和Basic以及FoxBase的基础,再加上今天一开始敲代码就没有“写作大纲”,直接开始一个字一个字的写进编辑器。但是,写程序其实跟写文章一模一样,都是要有大纲有骨架,然后再往里面填写具体内容,最后再进行完善的。
  2. 调试程序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
  1. 于是在纸上画了一个流程之后,发现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
  1. 从21号看完实体书的教程后开写,停了两周之后,10月30号开写主体程序并调试完成,实际上还不完善,但是完成大于完美,所以,就这样吧。但是,有点焦虑,这么简单一个程序都要花这么长时间调试,感觉有点泄气了。
    好吧,进入一个新领域,总是这样,要接受和原谅自己最开始的笨拙,嗯,谢谢李笑来老师教诲,让我能接受和忍受起步时的笨拙,会继续投入时间等待终有一天的起飞。
  2. 每次写程序学习的文发到群里都被战友说看不懂,决定改一下,所以昨天(10月21号)没发程序这篇,今天(10月22号)来写,现在是11:39,Go!然而只开了个头
  3. 决定回归程序设计入门写作,今天就交这篇。
    不输出,就会一直停止输入,这一章停了三周了。不行。

推荐阅读更多精彩内容