think in python -5
think in python -5
条件和递归
求模操作符%
用于整数,可以计算出第一个操作数除以第二个操作数的余数
7%3 #结果是2
求模操作符%
有很多用途,比如可以检测一个数是不是另外一个数的倍数.
布尔表达式
是值为真或者为假的表达式
5==5 #True
5==6 #False
Ture
和False
是布尔表达式的2个值,他们不是字符串。=
是个关系操作符,其它的关系操作符有:
x!=y
x>y
x<y
x>=y
x<=y
逻辑操作符
or and not 跟他们英文语义差不多
and
,or
,not
三个逻辑操作符
17 and Ture
x>0 and x<10
x<1 or y<2
not(x>y)
条件执行
为了编写有用的程序,我们几乎总是需要检查条件,并据此改变程序的行为的能力。 条件语句可以给我们帮主
if
表达式很常用
if 之后的布尔表达式称为 条件。 如果为真 会执行之后缩进的语句,反之什么都不发生
if x>0:
print "x is positive"
选择执行
if else
if语句的第二种形式是 选择执行,这种形势下有2种可能
if x%2==0:
print "x is even"
else:
print "x is odd"
这2段不同的语句成为分支,因为他们是程序执行流程中的两个支流
条件链
有时候会超过2种可能,我们需要更多的分支
if x<y:
print "x is less than y"
elif x>y:
print "x is greater than y"
else:
print "x and y are equal"
嵌套条件
条件判断可以再嵌套条件判断。
if x<y:
print "x is less than y"
else:
if x<y:
print "x is greater than y"
else:
print "x and y are equal"
如上,我们可以嵌套条件。但过分嵌套条件分支 会导致程序越来越臃肿。
递归
函数调用另外一个函数是合法的,函数调用自己也是合法的。
def countdown(n):
if n<=0:
print "blastoff"
else:
print n
countdown(n-1)
coundown(3)
>>> 3
>>> 2
>>> 1
>>> blastoff
调用自己的函数成为递归函数,这个过程叫做递归。
无限递归
如果设定一个递归永远达不到的基准情形,那么会无限执行下去,称为无限递归。
def recurse():
recurse()
以上程序递归到上限以后,系统会报告一个错误。
键盘输入
raw_input
可以从键盘获取输入。还可以打印给用户一个提示信息。
x = raw_input("what...is you name? \n")
练习
- 编写一个函数
check_fermat
,接收4个参数(a,b,c,n),检验a的n次方 + b的n次方 是否等于 c的n次方
- 编写一个函数 提示用户输入
a b c n
的值,转换成整数,并调用check_fermat
来检查
def check_fermat(a,b,c,n):
abn = math.pow(a,n)+math.pow(b,n)
cn = math.pow(c,n)
if n>2 and abn==cn:
print"you"
else:
print"no"
def tips():
a = raw_input("plz input a value")
b = raw_input('plz input b value')
c = raw_input('plz input c value')
n = raw_input('plz input n value')
check_fermat(int(a),int(b),int(c),int(n))
- 有3根木棍,写个函数
is_triangle
判断是否可以拜成一个三角形。条件是如果有其中任意一个长度大于其他2个的和,则不能。
- 编写一个函数提示用户输入3个木棍的长度 ,转成整数 并使用
is_triangle
检查def is_triangle(a,b,c):
if a+b<c or a+c<b or b+c<a:
print "no"
elif a+b==c or a+c==b or b+c==a:
print "yes"
else:
print "Yes" #is_triangle(2,4,6) def tips2():
a = raw_input("plz input line length")
b = raw_input('plz input line length')
c = raw_input('plz input line length')
is_triangle(int(2),int(4),int(6))
术语表(新手建议阅读并尝试理解)
- 求模操作符(modules operator):用
%
表示的操作符,用于两个整数,计算其相除的余数。 - 布尔表达式(boolean expression):一种表达式,其值是
Ture
或者False
- 关系操作符(relational operator):用来表示两个操作对象的比较关系的操作符,比如
== != > < >= <=
- 逻辑操作符(logical operator):用来组合两个布尔表达式的操作符,有3个
and or not
- 条件语句(conditional statement):依照某些条件控制程序执行流程的语句。
- 条件(condition):条件语句中的布尔表达式,由它决定执行哪一个分支
- 复合语句(compound statement):一个包含语句头和语句体的语句。语句头以冒号
:
结尾。语句体相对语句头缩进一层 - 分支(branch):条件语句中的一个可能性分支句段。
- 条件链语句(chained conditional):一种包含多个分支的条件语句
- 嵌套条件语句(nested conditional):在其他条件语句中的分支中出现的条件语
- 递归(recursion):在当前函数中调用自己的过程
- 基准情形(base case):递归函数中的一个条件分支,里面不会再继续递归调用
- 无限递归(infinite recursion):没有基准情形的递归,或者永远无法达到基准情形的分支递归调用,最终,会导致运行错误