chapter . 1 编程基础及分支循环语句

编程基础

程序:

  一组能让计算机识别和执行的指令

  算法+数据结构

电子计算机
  能够执行程序的机器

现代计算机:

  艾伦·麦席森·图灵(Alan Mathison Turing,1912年6月23日-1954年6月7日),英国数学家、
逻辑学家,被称为计算机科学之父,人工智能之父。图灵提出的著名的图灵机模型为现代计算
机的逻辑工作方式奠定了基础
  冯·诺依曼著名匈牙利裔美籍犹太人数学家、计算机科学家、物理学家和化学家,数字计算机之
父。他提出了以二进制作为数字计算机的数制基础,计算机应该按照程序顺序执行,计算机应
该有五大部件。

CPU由运算器和控制器组成

  运算器,完成各种算数运算、逻辑运算、数据传输等数据加工处理

  控制器,控制程序的执行

  存储器,用于记忆程序和数据,例如内存

  输入设备,将数据或者程序输入到计算机中,例如键盘、鼠标

  输出设备,将数据或程序的处理结果展示给用户,例如显示器、打印机等

    硬盘是输入输出设备,CPU只跟内存交换数据

    CPU中还有寄存器和多级缓存Cache

机器语言

   一定位数组成二进制的0和1的序列,称为机器指令。机器指令的集合就是机器语言

   与自然语言差异太大,难学、难懂、难写、难记、难查错
汇编语言
   用一些助记符号替代机器指令,称为汇编语言。ADD A,B 指的是将寄存器A的数与寄存器B的数相加得到的数放到寄存器A中

  汇编语言写好的程序需要汇编程序转换成机器指令
   汇编语言只是稍微好记了些,可以认为就是机器指令对应的助记符。只是符号本身接近自然语言

低级语言

  面向机器的语言,包括机器语言、汇编语言

  不同的机器不能通用,不同的机器需要不同的机器指令或者汇编程序

高级语言

  接近自然语言和数学语言的计算机语言

  高级语言首先要书写源程序,通过编译程序把源程序转换成机器指令的程序

  1954年正式发布的Fortran语言是最早的高级语言,本意是公式翻译

  人们只需要关心怎么书写源程序,针对不同机器的编译的事交给编译器关心处理

低级语言到高级语言

  语言越高级,越接近人类的自然语言和数学语言

  语言越低级,越能让机器理解

  高级语言和低级语言之间需要一个转换的工具:编译器、解释器

  C、C++等语言的源代码需要本地编译

  Java、Python、C#的源代码需要被解释器编译成中间代码(Bytecode),在虚拟机上运行

高级语言的发展

非结构化语言
  编号或标签、GOTO,子程序可以有多个入口和出口
  有分支、循环
结构化语言
  任何基本结构只允许是唯一入口和唯一出口
   顺序、分支、循环,废弃GOTO
面向对象语言
  更加接近人类认知世界的方式,万事万物抽象成对象,对象间关系抽象成类和继承
  封装、继承、多态
 函数式语言
  古老的编程范式,应用在数学计算、并行处理的场景。引入到了很多现代高级语言中
  函数是“一等公民”,高阶函数

Python解释器

  CPython     C语言开发,最广泛的Python解释器

  IPython     一个交互式、功能增强的Cpython

  JPython:将Python代码动态编译成Java字节码,然后在JVM上运行。

  IronPython   与Jython类似,运行在.Net平台上的解释器,Python代码被编译成.Net的字节码

  pypy --Python语言写的Python解释器,JIT技术,动态编译Python代码

基础语法

# 注释

数字 不区分long和int

进制x    o     b

bool值 2个值Ture、False

字符串

使用' " 单双引号引用的字符的序列
 '''和""" 单双三引号,可以跨行、可以在其中自由的使用单双引号
在字符串前面加上r或者R前缀,表示该字符串不做特殊的处理

转义序列

\\     \t    \r   \n    \'     \"

 

缩进
   未使用C等语言的花括号,而是采用缩进的方式表示层次关系
   约定使用4个空格缩进
续行
  在行尾使用\
  如果使用各种括号,认为括号内是一个整体,内部跨行不用\

 标识符

  1. 一个名字,用来指代一个值

  2. 只能是字母、下划线和数字

  3. 只能以字母或下划线开头

  4. 不能是python的关键字,例如def、class就不能作为标识符

  5. Python是大小写敏感的

 约定

  不允许使用中文
  不允许使用歧义单词,例如class_
  在python中不要随便使用下划线开头的标识符

 常量

  一旦复制就不能改变值的标识符

  python无法定义常量

  字面常量 :一个单独的量,例如12、"abc" 、'2341356514.03e-9'

变量

  赋值后,可以改变值的标识符

 Python的语言类型

Python是动态语言、强类型语言

静态编译语言

  实现声明变量类型,类型不能再改变
  编译时检查

动态编译语言

   不用事先声明类型,随时可以赋值为其他类型

  编程时不知道是什么类型,很难推断

 强类型语言

   不同类型之间操作,必须先强制类型转换为同一类型。print('a'+1)

弱类型语言

   不同类型间可以操作,自动隐式转换,JavaScript中console.log(1+'a')

算数运算符

  + - * / % **

  自然除/结果是浮点数,整除//。注:2.x中/和//都是整除

位运算符

  &   |   ~   ^   <<   >>

  常用方式:乘除2的倍数,32 // 8相当于32 >> 3,二进制右移动三位,前方补零

  12,0xc,0o14,0b1100

原码、反码、补码,负数表示法

   5=> 0b101,1 => 0b1 ,-1 => -0b1, bin(-1)

反码

  正数的反码与原码相同;负数的反码符号位不变其余按位取反

补码

  正数的补码与原码相同;负数的补码符号位不变其余按位取反后+1

负数表示法

  早期数字电路的CPU中的运算器实现了加法器,但是没有减法器,减法要转换成加法
  负数在计算机中使用补码存储,-1的补码为1111 1111
  5-1 => 5+(-1)直觉上是0b101-0b1,实际计算的是补码,存储在计算机中没有负数,存放的是补码,计算时补码相加。

  其实计算机中的计算是0b101+0b11111111,溢出位舍弃后,结果最高位是符号位。

10^9 等于? 10^-9等于?为什么     

^  异或   :相异出1,相同出0

    10->   0000 1010

    9->     0000 1001

       00000011->3

运算符

  ==   !=   >   <   >=   <=    返回一个bool值

逻辑运算符 

  与或非and or not

  短路运算符

    and 如果第一个表达式为False,后面就没有必要计算了,这个逻辑表达式一定是False

    or 如果第一个表达式True,后面没有必要计算了,这个逻辑表达式一定是True

赋值运算符

  a = min(3, 5)

  += -= *= /= %= 等

  x = y = z = 10

成员运算符

  in、not in

身份运算符

  is 、is not

运算符优先级(由高到低)

 

 

 

算数运算符> 位运算符> 身份运算符> 成员运算符> 逻辑运算符

  长表达式,多用括号,易懂、易读

表达式Expression

  由数字、符号、括号、变量等的组合

    算数表达式

    逻辑表达式

    赋值表达式    python中,赋值即定义,如果一个变量已经定义,赋值相当于重新定义

内存管理

变量无须事先声明,也不需要指定类型(动态语言的特性)

Python编程中一般无须关心变量的存亡,一般也不用关心内存的管理

python使用引用计数记录所有对象的引用数

  当对象引用数变为0,它就可以被垃圾回收GC

  计数增加:赋值给其它变量就增加引用计数,例如x=3;y=x

  计数减少:

    函数运行结束时,局部变量就会被自动销毁,对象引用计数减少

    变量被赋值给其它对象。例如x=3;y=x;x=4

有关性能的时候,就需要考虑变量的引用问题,但是该释放内存,还是尽量不释放内存,看需求

单分支结构

  if语句
    if condition:
      代码块
    condition必须是一个bool类型,这个地方有一个隐式转换bool(condition)
    if 1<2:
      print('1 less than 2')

代码块

  类似于if语句的冒号后面的就是一个语句块

  在if、for、def、class等关键字后使用代码块

 

 

 

False等价布尔值,相当于bool(value)

if...elif...else语句
  if condition1:
    代码块1
  elif condition2:
    代码块2
  elif condition3:
    代码块3
  ......
  else:
    代码块

 

举例
a = 5
if a<0:
  print('negative')
elif a==0:
  print('zero')
else:
  print('positive')

分支嵌套

score = 80
if score<0:
  print('wrong')
else:
  if score==0:
    print('egg')
  elif score <= 100:
    print('right')
  else:
    print('too big')

 

语法
while condition:
  block
  当条件满足即condition为True,进入循环体,执行block
  举例

flag=10
while flag:
    print(flag)
    flag-=1

flag 思路是开关,循环语句中,判断循环条件时,一旦出现,就不想再运行本条命令,用此方法。

 

flag=10
while flag:
    print(flag)
    flag-=1

for 循环在有循环体时进入循环

continue 中断当次执行,进入下一次循环

break 跳出当前循环,向上离break最近的循环被打破

 

语法
for element in iteratable:
block
  当可迭代对象中有元素可以迭代,进入循环体,执行block
  range函数
  举例:打印1~10
    for i in range(10):
      print(i+1)

 

continue

中断当前循环的当次执行,继续下一次循环
   举例:计算10以内的偶数(for循环)
for i in range(10):
  if not i%2:
    print(i)

break终止当前循环

总结
  continue和break是循环的控制语句,只影响当前循环,包括while、for循环
  如果循环嵌套, continue和break也只影响语句所在的那一层循环
  continue和break 不是跳出语句块,所以if cond: break 不是跳出if,而是终止if外的break所在的循环

 

posted on 2018-08-01 19:46  Riper  阅读(211)  评论(0编辑  收藏  举报

导航