一个布尔表达式只有两种取值:True/False
布尔运算符只有三种,优先级从高到低依次是:not、and、or
例:a or not b and c==(a or((not b) and c))
计算机程序中的所有决策都可以归结为布尔表达式,而布尔代数可以使代码在不降低可读性的同时更加简洁。
+:and
*:or
条件循环在循环体后面,称之为后测循环(即代码强制循环体至少执行一次)
下面以要求输入非负数据为例:
合法性检验了两次,强制循环进行一次
#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),被称之为半路循环
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。效果与第一个代码是完全相同的
打印出用户指定的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)
计算并打印从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)