think in python -5

think in python -5

条件和递归

求模操作符%

用于整数,可以计算出第一个操作数除以第二个操作数的余数

7%3   #结果是2

求模操作符%有很多用途,比如可以检测一个数是不是另外一个数的倍数.

布尔表达式

是值为真或者为假的表达式

5==5  #True
5==6 #False

TureFalse是布尔表达式的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")

练习

  1. 编写一个函数 check_fermat,接收4个参数(a,b,c,n),检验 a的n次方 + b的n次方 是否等于 c的n次方
  2. 编写一个函数 提示用户输入 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))
  1. 有3根木棍,写个函数is_triangle 判断是否可以拜成一个三角形。条件是如果有其中任意一个长度大于其他2个的和,则不能。
  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):没有基准情形的递归,或者永远无法达到基准情形的分支递归调用,最终,会导致运行错误

《think in python》学习-5的更多相关文章

  1. 学习C++ Primer 的个人理解(一)

    <C++ Primer>这本书可以说是公认的学习C++最好的书,但我觉得不是特别适合作为教材,书中内容的顺序让人有些蛋疼.我个人认为初学此书是不能跳着看的.如果急于上手的话,我更推荐< ...

  2. 学习C++ Primer 的个人理解(九)

    这一章介绍顺序容器,在之前的第三章中,了解到的vector就属于顺序容器的一种. 一个容器就是一些特定类型对象的集合. 除了vector,还有哪些顺序容器? vector: 大小可变,随机访问的速度很 ...

  3. 学习C++ Primer 的个人理解(三)

    第三章,主要内容是字符串和数组.感觉作者的意图是希望读者可以早一点可以写出简单的小程序,并且可以早点接触迭代器这种思想. 在我看来,这种内容的难度并不大. 对于编程来说,最重要的应该是思想,类似vec ...

  4. 学习C++ Primer 的个人理解(二)

    本身就一定基础的读者我想变量常量这些概念应该已经不是问题了.但是本章还是有几个重点,需要特别留意一下的: 1.初始化和赋值是不同的操作 2.任何非0值都是true 3.使用新标准列表初始化,在有丢失精 ...

  5. 学习C++.Primer.Plus 11 使用类

    1.操作符重载 重载操作符的几个限制: a)         重载的至少有一个操作数是用户定义的类型,这将防止用户为标准类型重载操作符. b)         不能违反操作符原有来的句法规则. c)  ...

  6. 学习C++.Primer.Plus 10 对象和类

    1.类的声明和定义 类的声明和定义. 类声明的格式如下: class className { private://private 是类对象的默认访问控制,因此,可以省略 data member del ...

  7. 学习C++.Primer.Plus 8 函数探幽

    1. 内联函数 普通函数调用: 存储调用指令的地址->将函数参数复制到堆栈->跳到函数地址执行代码(返回值放到寄存器)->跳回调用指令处 2.  当代码执行时间很短,且会被大量调用的 ...

  8. 学习C++.Primer.Plus 7 函数

    C++的返回值类型不能是数组 函数原型中的变量名相当于点位符,因此不要求提供变量名. void cheers(int); C++中不指定参数列表时就使用活力号: void saybye(...); 通 ...

  9. 学习C++.Primer.Plus 6 分支语句和逻辑操作符

    ||. &&操作符是一个顺序点 < 操作符从左向右结合 ; < age < )//17<age为true, = 1,肯定 < 27.所以为整个条件为tru ...

  10. 学习C++.Primer.Plus 5 循环和关系表达式

    C++将赋值表达式的值定义为左侧成员的值 赋值操作符是自右向左结合的 cout.setf(ios:: boolalpha);//调用设置标记,命令cout输出true或false,而非1或0. 任何表 ...

随机推荐

  1. Poj 1269 Intersecting Lines_几何模板

    #include <iostream> #include <math.h> #include <iomanip> #define eps 1e-8 #define ...

  2. OC基础16:复制对象

    "OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.浅复制即是指针赋值,复制对象的修改会影 ...

  3. Android 4.4 Kitkat 使能 USB adb 功能

    背景 在 Linux-3.8 以后,Android 的内核分支,便去掉了 f_adb,改使用 USB function FS,在用户空间实现 USB adb 功能.这篇文章依据原作者的 Google+ ...

  4. 【机房系统知识小结点系列】之遍历窗体中的控件,判断Text是否为空?

    做机房系统时,几乎每个窗体中都会用到判断界面中的控件是否为空的情景.我们曾经是这样走来的: 第一版: 好处:对窗体界面中的Text等控件,逐一做判断,当用户输入某一项为空的时候,会议弹出框的形式,告诉 ...

  5. TNS-12541,TNS-12560,TNS-00511,TNS-12542,TNS-12560,TNS-00512数据库启动监听报错

    第 1章   数据库server监听错误 1.1.1数据库监听错误 1.1.1.1 问题及现象 server环境为ORACLE11G RAC环境,系统启动后,监听没起来. [oracle@RAC4 ~ ...

  6. 在ASP.NET MVC自定义错误页面

    异常处理跳转页面 第一步,在项目的Web.config文件中找到节点<system.web> 在此节点下添加配置(Error为定义的控制器也可以多添加些error标签用于区分不同的错误) ...

  7. codevs1127

    学校里有一个水房,水房里一共装有m 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为1. 现在有n 名同学准备接水,他们的初始接水顺序已经确定.将这些同学按接水顺序从1到n 编号,i 号同学的 ...

  8. const与重载

    转载自CSDN博客:http://blog.csdn.net/polarbearboy/article/details/6762752   (由于该作者也属于转载,不知原出处) PS:我们很易对下面这 ...

  9. MySql按指定天数进行分组数据统计分析 1

    这几天,在做数据统计,在对数据库数据进行统计过程中,有个需求就是要按照指定天数进行分组, 之前一直没有找到好的方法,就先取出数据,在程序中进行分组. 后发现,可以在SQL语句中实现按天数分组. 例: ...

  10. WebApp 里Meta标签大全

    1.先说说mate标签里的viewport: viewport即可视区域,对于桌面浏览器而言,viewport指的就是除去所有工具栏.状态栏.滚动条等等之后用于看网页的区域.对于传统WEB页面来说,9 ...