Crossin的编程教室

标题: 【Python 第7课】if [打印本页]

作者: iamocean    时间: 2013-7-30 21:28
标题: 【Python 第7课】if
本帖最后由 iamocean 于 2013-7-30 21:33 编辑

继续上次的程序。我们已经能让判断我们输入的值了,但这程序还是有点呆,不过怎样都要把话说三遍。因为到目前为止,我们的程序都是按照顺序从上到下一行接一行地执行。有同学发来问题了:怎么能让它根据我们输入的结果来选择执行呢?答案就是 -- if


来看一张图(纯手绘,渣画质)

786c097adab44aed39ff305fb21c8701a08bfb49.jpg


解释一下,程序顺序往下执行遇到if语句的时候,会去判断它所带条件的真假。

“如果”为True,就会去执行接下来的内容。“如果”为False,就跳过。


语法为:

if 条件:
选择执行的语句

特别说明:条件后面的冒号不能少,同样必须是英文字符。
特别特别说明:if内部的语句需要有一个统一的缩进,一般用4个空格。python用这种方法替代了其他很多编程语言中的{}。你也可以选择1/2/3...个空格或者按一下tab键,但必须整个文件中都统一起来。千万不可以tab和空格混用,不然就会出现各种莫名其妙的错误。所以建议都直接用4个空格。


上栗子:
  1. thisIsLove = input()
  2. if thisIsLove:
  3.     print "再转身就该勇敢留下来"
复制代码
试试看?输入True,就会得到回答。输入False,什么也没有。(如果你那里输出中文有问题,请自行改成英文)



所以,我们的游戏可以这样改写:
  1. num = 10
  2. print "Guess what I think?"
  3. answer = input()

  4. if answer < num:
  5.     print 'too small!'

  6. if answer > num:
  7.     print 'too big!'

  8. if answer == num:
  9.     print 'BINGO!'
复制代码
0277ad45d688d43f50ce1f497c1ed21b0ff43b9f.jpg



if在编程语言中被称为“控制流语句”,用来控制程序的执行顺序。还有其他的控制流语句,后面我们会用到。





有不少同学强烈要求布置作业。好吧,满足你们。还记得之前那个“你觉得我是什么人?”的程序吧?(不记得的请回复4。。。)
改写一下,只有你回答某些好话的时候,程序才会Oh yes。其他都不理你。甚至说某些词的时候,它还要反驳你。
至于用哪些词哪些条件,你们自己设定吧。




#==== Crossin的编程教室 ====#
微信ID:crossincode


面向零基础初学者的编程课
每天5分钟,轻松学编程

扫描二维码添加微信

f68e6e3d269759eee7be4973b3fb43166c22df15.jpg

作者: lanchu    时间: 2013-8-29 09:10
在3.3中  invalid syntax      2.x正常   是哪里不一样了?
作者: 海岸上的猪头    时间: 2013-10-14 18:04

为什么我输入'flase' 也能输出这段话?



未命名1.jpg (9.41 KB, 下载次数: 635)

未命名1.jpg


作者: 海岸上的猪头    时间: 2013-10-14 18:09
海岸上的猪头 发表于 2013-10-14 18:04
为什么我输入'flase' 也能输出这段话?

我自己尝试了一下,if thisIslove==’ture':这样的话输入ture就会得到回答,输入其他的就什么也没有 ,
作者: crossin先生    时间: 2013-10-14 19:16
海岸上的猪头 发表于 2013-10-14 18:09
我自己尝试了一下,if thisIslove==’ture':这样的话输入ture就会得到回答,输入其他的就什么也没有 , ...

'true' 'false'这种带引号的是字符串
True、Flase这样首字母大写不带引号,是python中的bool值。
你输入的时候输的是字符串,非空字符串永远是True
作者: 海岸上的猪头    时间: 2013-10-15 22:32
crossin先生 发表于 2013-10-14 19:16
'true' 'false'这种带引号的是字符串
True、Flase这样首字母大写不带引号,是python中的bool值。
你输入 ...

果然是这样的,大小写这些的话平常用应当多注意,要不然就犯我这样的错误啊,
作者: fuyuanjun12    时间: 2014-6-10 17:27
如何重复输入判断呢?以后会学到的吧,哈哈
作者: lenfari    时间: 2014-6-23 08:17
在官网下载python 3

thisIsLove = input()
if thisIsLove:
    print ("再转身就该勇敢留下来")

这样还是不管输入True或者False都会显示啊
作者: lenfari    时间: 2014-6-23 09:05
哦哦,知道了help (input) 发现说3里面input()返回的是字符串,改成下面的就实现目的了

thisIsLove=input()
if thisIsLove=='True':
    print ("再转身就该勇敢留下来")
作者: crossin先生    时间: 2014-6-23 16:30
lenfari 发表于 2014-6-23 09:05
哦哦,知道了help (input) 发现说3里面input()返回的是字符串,改成下面的就实现目的了

thisIsLove=input( ...

是的,如果你输了字符,不管什么,它的bool值都是True
作者: 萧风    时间: 2014-6-29 22:38
Crossion首先谢谢你搞了个这么好的东西。我是个编程白痴,以前学过C啊,JAVA什么的,到最后都只会编Hello World.鞋面附上我的代码:
  1. my="good guy"
  2. print"What do you think I am?"
  3. answer=input()

  4. if answer==my:
  5.     print "thank you very much,you too"

  6. if answer!=my:
  7.     if answer=="SB":
  8.         print"go away"

  9.     if answer=="just so so":
  10.         print"ok"
  11.     print"see you"
复制代码

作者: wikilike7    时间: 2014-7-29 17:23
有个疑问,这段代码的输出,当我输入good man或者good guy,结果see you被输出了,可是see you属于下面那个循环的啊,奇怪
  1. #-*- coding:UTF-8 -*-
  2. name = 'zibba'
  3. print 'what do you think i am?'
  4. youenter = input()

  5. if youenter == 'good guy':
  6.         print 'haha,you are good boy!'

  7. if youenter == 'good man':
  8.         print 'yeah, you too'

  9. if youenter == 'zibba':
  10.         print 'same name'

  11. if youenter != name:
  12.         if youenter == 'fuck':
  13.                 print 'go way'
  14.        
  15.         if youenter == 'ni mei':
  16.                 print 'ni mei'
  17.         print 'see you'
  18.        
复制代码

作者: casouri    时间: 2015-3-14 16:16
第一个例子里if后面的条件是什么?只是一个thisislove代表什么意思?
作者: catherinemic    时间: 2015-12-18 23:51
print 'who do you think i am?'
answer= raw_input()
me='a genius'

if answer==me:
    print 'Oh,of course i am!'

if answer != me:
    if answer=='an idiot':
        print 'fuck you!'
    if answer != 'an idiot':
        print 'actually i am '+ me
hahahha~~~

Python4.png (7.67 KB, 下载次数: 399)

Python4.png


作者: 德坤    时间: 2016-3-22 09:27
QQ截图20160322092705.png
作者: 追风    时间: 2016-4-28 16:45
wikilike7 发表于 2014-7-29 17:23
有个疑问,这段代码的输出,当我输入good man或者good guy,结果see you被输出了,可是see you属于下面那个 ...


当输入 good man 或者 good guy 时, 条件   youenter != name:     为真,所以以也会输出see you

作者: 追风    时间: 2016-4-28 16:50
在达到这个结果之前,我犯了很多错误,思考尝试之后 ,终于成功了!

      在这个过程中,犯得着最多的错误就是缩进。我整理如下:
      1,文件中要有统一的缩进。虽然我们的楼主在文中已经说过,但是我还是会犯这样的错误。但是,这样的错误,会有“期望的缩进”这样的错误提示。
      2,在有了一个统一的缩进之后,一个  if  对应一个相应缩进的  print  ,print不同的位置可能会有不同的结果。如下图所示:
4.png 1.png

作者: 追风    时间: 2016-4-28 17:02
casouri 发表于 2015-3-14 16:16
第一个例子里if后面的条件是什么?只是一个thisislove代表什么意思?

好吧,虽然这位同学不在这里了,我把这个问题当作课后习题了。thisIsLove=input(),所以thisIsLove本身就可以是一个条件,只要合法输入字符,就为真(除了输入False)
作者: liudaguo520    时间: 2016-7-18 18:06
老师您好,我是新学者,也没有基础,在我看到第七章if的时候,这个问题我有点理解不了,还请您解答一下!您的这个代码(下面)正确吗?,是不是在if后面应该是 thisIsLove==‘Ture’??我按照您的代码敲的,无论输入什么都返回‘再转身就该勇敢留下来’
如果我的代码是if thisIsLove==‘Ture’的话,输入什么都没反应,只有输入‘Ture’才会有结果!
thisIsLove = input()
if thisIsLove:
    print ("再转身就该勇敢留下来")
作者: crossin先生    时间: 2016-7-18 21:20
liudaguo520 发表于 2016-7-18 18:06
老师您好,我是新学者,也没有基础,在我看到第七章if的时候,这个问题我有点理解不了,还请您解答一下!您 ...

因为这是两个不同的逻辑判断。
直接作为判断条件,是判断这个参数非空。如果你直接输两个引号,里面什么都没有,那就不会输出。
你写的那个,就是判断这个值是不是为 “True”,是才输出
作者: liudaguo520    时间: 2016-7-19 10:51
感谢您还在晚上回复我!虽然还不是特别明白bool,但是这个问题已经没问题了,谢谢您!

作者: emoheiri    时间: 2016-8-6 17:04
不是很明白啊
thisIsLove = input()
if thisIsLove:
    print "再转身就该勇敢留下来"
为什么输入True就会显示汉字,输入False就不显示呢?

初学者,请各位老师耐心解答,多谢~
作者: crossin先生    时间: 2016-8-7 23:23
emoheiri 发表于 2016-8-6 17:04
不是很明白啊
thisIsLove = input()
if thisIsLove:

thisIsLove 是 False 的话,if 的判断条件不成立,所以就不执行
作者: vicky009    时间: 2016-8-10 04:47
Crossin先生好,
我用的是Python 3.5版本,按照您的教程输入以下代码,
thisIsLove = input()
if thisIsLove:
    print ("YOU STAY")

空格处输入False,
为何依旧返回字符YOU STAY呢?
请见截图,谢谢。

2016-08-09_16-46-36.jpg (11.43 KB, 下载次数: 520)

2016-08-09_16-46-36.jpg


作者: crossin先生    时间: 2016-8-10 10:16
vicky009 发表于 2016-8-10 04:47
Crossin先生好,
我用的是Python 3.5版本,按照您的教程输入以下代码,
thisIsLove = input()

python3的input直接得到的是字符串,所以一个非空的字符串是真,不管它是什么字符。除非你直接回车,什么都不输。或者用eval(input())
作者: zegna1003    时间: 2016-11-4 11:28
老师我想问一下,这课游戏那个实例,如果我的answer输入‘a’,他显示too big,这代表什么意思,‘a’能与数字比大小吗,还是代表asc2码?
作者: crossin先生    时间: 2016-11-4 14:21
zegna1003 发表于 2016-11-4 11:28
老师我想问一下,这课游戏那个实例,如果我的answer输入‘a’,他显示too big,这代表什么意思,‘a’能与 ...

不要让字符和数字比较大小,这个结果没有意义。应当做一个bug来处理
在py3里已经会直接报错了。
作者: clearlove    时间: 2019-9-17 06:10
老师能发一下python第七课if的课后作业答案吗
作者: crossin先生    时间: 2019-9-17 22:54
clearlove 发表于 2019-9-17 06:10
老师能发一下python第七课if的课后作业答案吗

你翻下就这个帖子,前面很多人都给出答案了




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5