PYTHON 学习第七章 之 条件语句

缩进:

  将条件分支前,应该先说说 缩进:python 给我的感觉和广告里说的那样,就是简洁。简洁的语法也是要有规矩的,不是怎么写都可以。

如何缩进?

 

  通常大家 缩进都是一个 Tab键(Esc 键下面那个),一个 Tab 大概是四个空格。为了符合规范,我建议大家使用Tab键进行缩进。缩进距离是没有要求的,只要比语句块(所谓语句块就是 由冒号:结尾)不在同一条垂子线上就可以,但是语句体中缩进都必须在同一条垂直线上,除非存在另一语句块。

if 1<2:
    # 这里的 print 和 if 2<3: 都是  if 1<2: 中的 子句, 所以 他们是平级
    print('嘻嘻')
    if 2<3:
        # print("ok") 属于 if 2<3: 的 子句,所以要进行缩进
        print("ok")
    # print("是我属于if 1<2: 的") 和   print('嘻嘻') 及  if 2<3: 都是 if 1<2: 子句, 所以他们是平级
    print("是我属于if 1<2: 的")

#print("--------这里只是让你知道是成功的--------") 和 if 1<2: 是平级
print("--------这里只是让你知道是成功的--------")


#运行结果
嘻嘻
ok
是我属于if 1<2: 的
--------这里只是让你知道是成功的--------

  然后不是所有的地方都能缩进 ,如下,出现缩进错误。简单点说 缩进只能用于语句块中。

print("--------这里只是让你知道是成功的--------")
    print("xxxx")

#运行异常

    print("xxxx")
    ^
IndentationError: unexpected indent

为什么要缩进?

  知道如何缩进之后,就应该有疑问,为什么要缩进?python 和其他语言一样,属于模块化的,所谓的模块化就好比分块处理(而不是从头写到尾巴,都是在一条垂直线上)。好比古惑仔,若要在做我小弟,就必须加入我都阵营,语句块中的缩进,就是让他成为某个语句的“小弟”,大哥能做,小弟才能做(记住这句话,很抽象但是以后就明白了)。在java 中 语句块的表达方式为花括号({}),在python中是冒号:这是语法,没有为什么,若要问什么,去问你python开发者。

  缩进只是收“小弟”,肯定不只是这样啊,那还的设计到作用域问题(这才是关键)。

  算了,不乱扯皮了...

条件和条件语句:

  这东西该怎么说呢?不说点什么直接上代码,显得枯燥(本来就是),这个问题随着时间的积累,我会越做越好的。最开始到现在我们的代码都是逐个解释和运行,但是现实中肯定不是这样的,编程就好比创造一个世界,你的世界怎么样,就得看你编程的功底了。我们就拿一个实际案例来说 所谓的条件是什么?初中的时候我喜欢跑网吧,但是我没有满18岁,网吧禁止我进入的,所以我去了黑网吧(这是后话)。这个案例是什么意思呢?就是说你要去网吧去上网,是有一个条件限制的,就是 你必须十八岁。如果不满足这个条件就无法进入网吧中。

  案例一:这是简单的案例, 网管问我多少岁,我如实回答,我已经15岁了,然后对不起告诉我 禁止未成年人上网。

age =input('网管:请问你多少岁了?');

if int(age)<18:
    print("禁止未成年人上网!")

#运行结果
网管:请问你多少岁了?15
禁止未成年人上网

  这个案例中 明白了 python 的 条件语句

  语法:if ... 

if  [条件表达式] :

    [成立时执行语句块]

  else 子句

  案例二:我可是一个好孩子,好学生,这里不然我进去,我可以去别家啊

  于是程序稍微改了一下

age =input('网管:请问你多少岁了?');

if int(age)>=18:
    print("你已经成年,祝你上网愉快")
else:
    print("于是我来到另一家黑网吧")
    print("【金色玫瑰网吧欢迎你】")

#运行结果
网管:请问你多少岁了?15
于是我来到另一家黑网吧
【金色玫瑰网吧欢迎你】

  这里学习到了 第二个语法:

  if ... else 

if  [条件表达式] :

    [成立时执行语句块]
else:
     [条件不成立时执行语句块]

  elif 子句 及多个 elif 子句

  于是我很开心上起了网,不知不觉就已经很晚了,我有点饿,我想去买点东西吃,于是我来到网吧前台。上面有很多商品,于是把我兜里的 十元钱买了 薯片

print('网管:请问你想买什么?')
print("泡面:5元,薯片:10元,矿泉水:3元")
price=input('网管:选好了请支付');

if int(price)==5:
    print("这是你的泡面")
elif int(price)==10:
    print("这是你的薯片")
elif int(price)==3:
    print("这是你的矿泉水")
else:
    print("没有此价位的商品")
    

#运行结果
网管:请问你想买什么?
泡面:5元,薯片:10元,矿泉水:3元
网管:选好了请支付10
这是你的薯片

  原来 if 条件语句 是支持多个条件判断的

  语法: if...elif...else...

if [条件表达式]:
    [成立时执行语句块]
elif [条件表达式]:
    [成立时执行语句块]
elif:
     [成立时执行语句块]
....[更多elif]
else: [所有都不成立时执行]

  嵌套 if 子句  

  这时候父母给我打电话,问我什么时候回去...

print('父母:喂! 怎么这么晚还不会回家?是不是上网去了?')

a = input('我应不应该骗他们?')

if str(a)=='':
    print("我:没有啊,我在同学家辅导作业呢")
    print("父母:那早点回来吃饭啊")
    print('由于我还在上网,又买了点吃的,回去的车费被我花完了')
    b = input('是否找好朋友借钱?')
    if str(b)=='':
        print('我:小强,能借点车费给我吗?明天就给你')
        c = input("小强:借多少?")
        if int(c)<=2:
            print("坐公交回去咯!")
        elif 2<int(c)<=10:
            print('我可以打车回去咯!')
        else:
            print("小强:你咋借这么多,不借了")
            print('走路.png...')
    else:
        print("算了走路回去吧")
else:
    print("我:对不起,我马上回去")

#运行结果
父母:喂! 怎么这么晚还不会回家?是不是上网去了?
我应不应该骗他们?骗
我:没有啊,我在同学家辅导作业呢
父母:那早点回来吃饭啊
由于我还在上网,又买了点吃的,回去的车费被我花完了
是否找好朋友借钱?借
我:小强,能借点车费给我吗?明天就给你
小强:借多少?12
小强:你咋借这么多,不借了
走路.png...

  曾经要是能努力,不沉迷于网络,也许明年就大学毕业了....

   在 条件语句中 是可以支持多层条件语句的,但是实际开发中,并不会这么做,这样会代码层次变得复杂,不利于阅读和理解。

  

python 中的比较运算符

表达式 描述
x==y x 等于 y
x < y x 小于 y
x > y x 大于 y
x >= y x 大于或等于 y
x <= y x 小于或等于 y
x != y x 不等于 y
x is y x 和 y 是同一个对象
x is not y x 和 y 是不同一个对象
x in y x 是容器(序列)y 的成员
x not in y x 不是容器(序列)y 的成员

  

 

 

 

 

 

 

 

 

 

 

 

 小知识:对不兼容的类型进行比较

   从理论上说,可使用<和<=等运算符比较任意两个对象x和y的相对大小,并获得一个真值,但这种比较仅在 x 和 y 的类型相同或相近时(如两个整数或一个整数和一个浮点数)才有意义。

  将整数与字符串相加毫无意义,检查一个整数是否小于一个字符串也是一样。奇怪的是,在python3之前,竟然可以这么做。不过即便你使用的是旧的python版本,以应对这类比较进而远之,因为结果是不确定的,每次执行程序时都可能不同。在python3中,已经不允许这样的比较不兼容的类型了。


 链式比较:

   可以支持多个比较运算符:如:a<b<c

a=4
b=23
c=74
print(a<b<c)
#运行结果
True

字符串和序列的比较

  字符串是根据字符的字母排序顺序进行比较。

print('abc'<'bcd')
#运行结果
True

  虽然居于的是字母的排序顺序,但字母都是Unicode字符,他们都是按照点排列的。

print(ord('a'))
#运行结果
97

  除了字符串 序列也可进行比较

a=[1,[2,3]]
b=[1,[2,4]]
print(a<b)
#运行结果
True

短路逻辑和条件表达式

  实际开发中,我们可能会有多个条件进行判断,也就是一个if 可能存在多个条件语句,那么我们就要 andor 关键字了

  先说 and  案例( x > y and y < z) 只有当 x > y 和 y < z 同时成立时 ,才能正常执行。

x=2
y=3
z=6

if x<y and y<z:
    print("条件成立")
else:
    print("条件不成立")

#运行结果
条件成立

  若我们 把 z =2 看看是否能成立呢?

x=2
y=3
z=2

if x<y and y<z:
    print("条件成立")
else:
    print("条件不成立")

# 运行结果
条件不成立

  我们再说说 or  那上一个案例说事,当z=2 是,我觉得条件可以了,让我执行把。那好,那你就不要只用 and 了,换成 or

x=2
y=3
z=2

if x<y or y<z:
    print("条件成立")
else:
    print("条件不成立")

#运行结果
条件成立

  or 和 and 的区别就是 and 需要所有的添加 都成立,才能正常运行,而 or 只需要 其中一个 成立 即可, 只要一个成立之后,后台的条件运行就不会执行了。除非所有的条件都不成立

x=2
y=3
z=2

if x>y or y<z:
    print("条件成立")
else:
    print("条件不成立")

#运行结果
条件不成立

  并且两者是可以混合使用的。

x=2
y=3
z=2

if  x<y and y>z or x<z:
    print("条件成立")
else:
    print("条件不成立")

#运行结果
条件成立

  当 x<y 成立之后,遇到 and 看它后面的条件是否也成立,当两者条件都成立时,又去看后面的表达,遇到了or,两位大哥嘻嘻一笑,“看来不用管他了,我们走吧”。所以这条件表示成立。

 

断言(assert):

   if语句有个很有用的“亲戚”,断言。断言大家是怎么解释,assert 是一个检查机制。 在程序开发中,难免会出现异常,与其坐等异常产生,还不如当条件不满足时就产生一个异常。

  使用 assert 当条件成立时(True) ,它会有任何操作,只有为假时才会执行。

  正常运行:正常输出 打印语句

assert 1<2,'2居然小于1'
print("没事")

#运行结果
没事

  错误条件时

assert 2<1,'2居然小于1'
print("没事")

#运行异常
Traceback (most recent call last):
  File "D:/develTools/PycharmProjects/project1/venv/Include/test3.py", line 3, in <module>
    assert 2<1,'2居然小于1'
AssertionError: 2居然小于1

  关于断言知识远远不止这些,推荐一篇博客

 

pass 关键字

   说到这里就应该提一下 pass 关键字了,不知道别人叫他什么,这里我叫它为 “占位”,之所以叫他为占位,是因为在 python 语言中,凡是定义了一个表达式(以冒号:结尾),都必须写内容,哪怕是打印一句话。如:

if 1<2:
    print('成立')

#运行结果
    成立

  要是不给的话... 直接出现语法错误。

if 1<2:

#运行结果
      File "D:/develTools/PycharmProjects/project1/venv/Include/test3.py", line 5
    
    ^
SyntaxError: unexpected EOF while parsing

  但是在实际开发中,很多时候,我们并不是定义一个 函数,或者一个类 或者一个表达式,一上来就开始 劈里啪啦写代码,我们需要进行一下构思,想想该怎么做。这个时候我不知道写什么,为了满足语法,肯定会写一个 print('xxx')。语法满足了,但是觉得很不爽,这是我们就可以用 pass 进行占位。

if 1<2:
    pass

print("--------这里只是让你知道是成功的--------")

#运行结果
--------这里只是让你知道是成功的--------

 

 

笔后语录:

  这个效率还是挺慢的,两三个星期了,这个博客居然才写到分支,这也不能怪我,也是下班回家看看书,敲敲代码什么的。说到分支, python 似乎好像只有 if 语句? java 是还有  switch 语句(我用的比较少)除了工作场景不怎么用外,主要是觉得 if 方便一点。

 

 

 

 

posted @ 2019-11-11 20:38  不朽_张  阅读(271)  评论(0)    收藏  举报