第1章 快速改造 : 基础知识

1. 交互式解析器

当我们输入下面的指令 : print "Hello,world!",当按下回车按键后,会得到下面的输出 : Hello,world!.

注意 :
Python一行就是一行,不管多少.

2. 算法是什么

对于如何做某事的一份详细描述.

3. 数字和表达式

1/2 得到的结果为 0 ,因为一个整数被另外一个整数除,计算结果的小数部分被截除了,只剩下整数部分.所以结果为 0 .

实数在 Python 中被称为浮点数(Float),如果参与除法的两个数中有一个数为浮点数,则运算结果为浮点数. 1.0 / 2.0 = 0.5

Python提供了另外一个实现整除的操作符(双斜线).1 // 2 = 0 1.0 // 2.0 == 0.0

1 % 2 = 1这是取余运算符(x%y的结果为x除以y的余数)

幕(乘方)运算符 :

1
2
3
4
5
6
7
8
9
>>> 2**3
8
>>> 2**3
8
>>> -3**2
-9
>>> (-3)**2
9
>>>

注意 : 幕运算符比取反的优先级要高,所以-3**2等同于-(3**2),如果想计算(-3)**2,就需要显式说明.

3.1 长整数

普通整数不能大于2147483647(也不能小于-2147483648),如果需要跟大的数,可以使用长整数.长整数的书写方法和普通整数一样,但要在结尾加L.

3.2 十六进制和八进制

1
2
3
4
5
>>> 0xaf
175
>>> 010
8
>>>

十六进制和八进制的首位数字都是0.

4. 变量

如果希望用名字X代表3,只需要执行下面的语句 :

1
2
3
>>> x=3
>>> x*2
6

这样的操作称为赋值(assignment),数值3被赋给了变量x.另外的一种说法是 : 将变量x绑定到了值(或者对象)3上面.在变量被赋值之后,就可以在表达式中使用变量.

注意 :
变量名可以包括字母,数字和下划线(_).变量名不能以数字开头,所以Plan9是合法变量名,而9Plan不是.

5. 语句

表达式就是某件事情,而语句是做某件事情.变量就像临时的存储器,它的强大之处在于操作变量的时候并不需要知道它们存储了什么值.

6. 获取用户输入

1
2
3
4
>>> input("The meaning of life:")
The meaning of life:42
42
>>>

接着下面的内容 :

1
2
3
4
5
6
7
>>> x = input("x:")
x:34
>>> y = input("y:")
y:42
>>> print x*y
1428
>>>

7. 函数

可以用一个函数pow来代替幕运算符(**),来实现.我们通常会把pow等标准函数称为内建函数.

1
2
3
4
>>> 2**3
8
>>> pow(2,3)
8

上面的例子我们称之为调用函数,你可以给它提供参数,它会返回值给用户.

1
2
>>> 2 + pow(2,10)
1026

还有很多内建函数,比如用abs函数可以得到数的绝对值,round函数则会把浮点数四舍五入为最接近的整数值 :

1
2
3
4
5
>>> abs(-10)
10
>>> round(6.999)
7.0
>>>

8. 模板

模板可以想象为导入到python以增强其功能扩展.如 :

1
2
3
>>> import math
>>> math.floor(32.9)
32.0

import导入模板,然后按照”魔板.函数”的格式使用这个模块的函数.

你确认自己不会导入多个同命函数(从不同模块导入)的情况下,那么可以使用import命令的另外一种方式 :

1
2
3
>>> from math import sqrt
>>> sqrt(9)
3.0

8.1 cmath和复数

sqrt函数用于计算一个数的平方根.

1
2
3
4
5
6
>>> sqrt(-2)
Traceback (most recent call last):
File "<pyshell#28>", line 1, in <module>
sqrt(-2)
ValueError: math domain error

因为负数的平方根是虚数又因为sprt只能处理浮点数,而虚数是完全不同的.因此,它们由另外一个叫做cmath(复数)的模板来处理.

1
2
3
>>> import cmath
>>> cmath.sqrt(-2)
1.4142135623730951j

9. 保存并执行程序

注释 : #打印圆的周长 :

10. 字符串

  • 单引号字符串和转义引号

  • 拼接字符串 : 建议使用+进行拼接

  • 字符串表示,str和repr
    所有通过python打印的字符串还是被引号括起来,这是因为python打印值的时候会保持该值在python代码中的状态,而不是你希望用户所看到的状态.如果使用print语句,结果就不一样了 :

1
2
3
4
>>> "Hello,world!"
'Hello,world!'
>>> print "hello,world!"
hello,world!
  • 一种是通过str函数,它会把值转换为合理形式的字符串,另外一种是通过repr函数,它会创建一个字符串,以合法的python表达式的形式来表示值.
1
2
3
4
5
>>> print repr(100000l)
100000L
>>> print str(1000l)
1000
>>>
  • input和raw_input的比较
1
2
3
4
5
6
7
8
>>> name = input("what is your name?")
what is your name?诸葛亮
Traceback (most recent call last):
File "<pyshell#36>", line 1, in <module>
name = input("what is your name?")
File "<string>", line 1
诸葛亮

出现错误的原因是用户必须输入的是合法的python表达式.所以我们必须要以字符串作为输入的名字.

1
2
3
4
5
>>> name = input("what is your name?")
what is your name?"诸葛亮"
>>> print "hello,"+name
hello,诸葛亮
>>>

因此,要求用户带入引号是不好的体验,我们需要raw_input函数,它会把所有的输入当做原始数据(raw data),然后将其放入字符串中.

1
2
3
4
>>> raw_input("hello!")
hello!hi
'hi'
>>>
  • 长字符串,原始字符串和Unicode
    • 长字符串 : 可以使用三个引号代替普通引号'''My name is 诸葛亮!'''. 也可以使用"""爽不爽!"""
    • 原始字符串 : 它不会把反斜线当作特殊字符.在原字符串中输入的每个字符都会与书写的方式保存一致 :
      1
      2
      >>> print r'c:\nowhere'
      c:\nowhere

可以看到,原始字符串以r开头.但不能以反斜线结尾!

  • Unicode字符串 : 在python3.0中,所有的字符串都是Unicode字符串.

11. 小结

  • 算法 : 算法是对如何完成一项任务的详尽描述,实际上,在篇写程序的时候,就是要使用计算机能够理解的语言来描述算法.这类对机器友好的描述就叫做程序.
  • 表达式 : 表达式是计算机程序的组成部分,它用于表示值.
  • 变量 : 变量是一个名字,它表示某个值.
  • 语句 : 语句是告诉计算机做某些事情的指令.
  • 函数 : Python中的函数就像数学中的函数,它们可以带有参数.并且具有返回值.
  • 模块 : 模块是一些对python功能的扩展,它可以被导入到python中.
函数 描述
abs(number) 返回数字的绝对值
cmath.sqrt(number) 返回平方根,也可以用于负数
float(object) 将字符串和数字转换为浮点数
help() 提供交互式帮助
input(prompt) 获取用户输入
int(object) 将字符串和数字转换为整数
long(objet) 将字符串和数字转换为长整型数
math.ceil(number) 返回数的上入整数,返回值的类型为浮点数
math.floor(number) 返回数的下舍整数,返回值的类型为浮点数
math.sqrt(number) 返回平方根,不适用于负数
pow(x,y[,z]) 返回x的y次幂(所有结果对z取模)
raw_input(prompt) 获取用户输入,结果被看做原始字符串
repr(object) 返回值的字符串表示形式
round(number[,ndigits]) 根据给定的精度对数字进行四舍五入
str(object) 将值转换为字符串