Python学习笔记-布尔表达式

Python学习笔记-布尔表达式

一个布尔表达式只有两种取值:True/False

布尔操作符

布尔运算符只有三种,优先级从高到低依次是:not、and、or
例:a or not b and c==(a or((not b) and c))

布尔代数

计算机程序中的所有决策都可以归结为布尔表达式,而布尔代数可以使代码在不降低可读性的同时更加简洁
+:and
*:or

  1. 任何值和True进行or操作都是真
    a or True==True
  2. and和or操作符都符合分配率
    a or (b and c) (a or b) and (a or c)
    a and (b or c)
    (a and b) or (a and c)
  3. not操作符具有负负抵消的特性
    not(not a)==a
  4. 符合摩根定律
    not(a or b)(not a) and (not b)
    not(a and b)
    (not a) or (not b)
    利用次定律可以实现一个通用方法:在找到一个终止循环的条件前面放一个not,就转化成了循环继续的条件了。(有时候找终止循环的条件比最后一个循环继续的条件容易的多)
    有时代码里运用一个或两个摩根定律可以有效的简化代码

后测循环

条件循环在循环体后面,称之为后测循环(即代码强制循环体至少执行一次
Python学习笔记-布尔表达式_第1张图片
下面以要求输入非负数据为例:
合法性检验了两次,强制循环进行一次

#aftertest.py 后侧循环
number=-1
while number<0:#强制代码循环一次,相当于一个后测循环
    number=eval(raw_input("Enter a postive number:"))
    if number<0:#数值为负,不接受数值要求继续循环
        print"The number you entered was not positive" 

采用if-else语句来实现后测循环,使合法性只检验一次。

#aftertest_2.py (if-else)后侧循环
while True:#检验布尔表达式的真假
    number=eval(raw_input("Enter a postive number:"))
    if number>=0:#数值为非负,接受数值,直接跳出循环
        break
    else:#数值为负,不接受数值要求继续循环
        print"The number you entered was not positive" 

半路循环

循环出口在循环体中部(使用break),被称之为半路循环

Python学习笔记-布尔表达式_第2张图片

while True:#检验布尔表达式的真假
    number=eval(raw_input("Enter a postive number:"))
    if number>=0:break#数值为非负,接受数值,直接跳出循环
    print"The number you entered was not positive" 

总结

Python的布尔运算符是短路运算符,即一旦知道结果,就会立即返回True/False。
例:在and表达式中只要知道第一个是假,在or表达式中只要知道第一个为True,Python就不会去评估第二个表达式的值了
就比如下面两个代码效果是相同的:

ans=raw_input("What flavor do you want[vanilla]:")
if ans !="":
    flavor=ans
else:
    flavor="vanilla"
    #即只要ans不为空或者说假就将ans赋给flavor,否则就将vanilla赋给flavor
flavor=raw_input("What flavor do you want[vanilla]:")or"vanilla"

在第二个代码里,只要or前的第一个表达式不为空,就将输入的字符串赋给flavor;否则就返回vanilla。效果与第一个代码是完全相同的

编程题1

打印出用户指定的Fibonacci数,如1,1,2,3,5,8…Fibonacci数序列的前两项为1,1其余各项为前两项数值之和。

#Fibonacci.py  打印斐波那契数列
n=eval(raw_input("How many Fibonacci numbers do you want? "))#输入需打印的数列个数
def Fibonacci(n):
    f=[]#定义一个空列表
    for i in range(n):
        if i==0 or i==1:#数列的前两项都是1
            f.append(1)
        else:#数列的第三项及都是其前两项的和
            f.append(f[i-1]+f[i-2])
    print f
Fibonacci(n)

编程题2

计算并打印从1开始的前n个连续奇数的和,即打印1+3+5+…+2n+1的值,n由用户决定。

#the_odd.py 前n个奇数的和
n=eval(raw_input("How many Fibonacci numbers do you want? "))#输入需相加的奇数个数
def the_odd(n):
    odd=0#初始化变量
    for i in range(n):
        odd+=(2*(i+1)-1)#第i个奇数:2*i-1
    print odd
the_odd(n)

你可能感兴趣的:(Python)