编程语言
目标:
找到一种计算机能执行的、描述机械步骤的方式
程序语言定义这种方式的语法和语义
编程语言的选择:
1 低水平编程语言
源代码使用简单的计算和逻辑运算,checker检查语法和语义,没有错误后交给interpreter执行,最后得到output。
2 高水平编程语言
使用更加抽象的术语,封装了更复杂的运算
编译型(compiled)语言,在checker之后,将复杂的运算编译成最基础的运算——低水平的编程语言——再交给计算机执行。
3 比较
低水平编程语言更快,但是更难找bug;
高水平(编译型)编程语言更慢,但是更容易debug。
python 程序
程序是由定义和命令组成的一个序列
定义赋值,命令由python编译器执行
python的IDLE名字为shell,是因为遮住了编译成低水平编程语言的过程。
数据类型定义了程序对数据的使用方法
标量(不可分割)
非标量(可以访问其内部结构)
python中的标量:
整型(int)
浮点型(float)
布尔型(bool)
表达式的一般语法:
对象(object)+ 操作(operator) + 对象(object)
适用于整型和浮点型的操作:
加 减 乘 除 取余(%) 幂(**)大小比较(> >= < <= == !=)
改变数据类型(int() float())
若对象皆为整型,则结果亦为整型;若对象包含浮点型,则结果为浮点型(除法即向下取整)
适用于布尔型的运算:
或且非(or and not)
简单的抽象:赋值(assignment)
一个容易出bug的地方:更新一个变量的值,并不会将用到这个变量的其他变量的值一起更新,因为其他变量的值在之前就储存好了。
python中的非标量:
字符型(‘str’):放在两个、四个或六个单引号中间
适用于字符型的操作:
加 乘 求长度(‘len’)提取(‘[ ]’)切片(‘[ : ]’、‘[ : : ]’(最后一位为步长))
操作符重载:同样的操作符,针对不同的对象,做不同的操作(例如针对数字的+和针对字符的+)
提取和切片时,位置索引可以去负数,最后一位的索引为-1,倒数第二位为-2,以此类推
‘[::-1]’意为倒序。例:
>>> 'helloworld'[::-1] 'dlrowolleh'
好的代码应该具备提升代码可读性的注释(‘#’),这些注释记录程序员为什么做出这个决定、每个区块的作用等。
分支程序
最简单的分支程序——条件
其中,False block不是必要的。
例:二叉分支
x=int(input('plz enter an integer: '))
if x%2==0:
print('') #换行
print('even')
else:
print('') #换行
print('odd')
print('done')
例:多叉分支
x=int(input('pls enter an integer:'))
if x%2==0:
if x%3==0:
print(str(x) +' is divisible by 2 and 3!')
else:
print(str(x) +' is divisible by 2 and not by 3!')
elif x%3==0:
print(str(x) +' is divisible by 3 and not by 2!')
else:
print(str(x) +' is not divisible by 3 or 2!')
以上程序都是常数时间的(constant time),即程序运行时间仅取决于程序长度。