Pythod初学之简单语法
[TOC]
前言
以下为学习Python3.5官方文档记录。简单的数据类型学习
1.安装
官网地址:https://www.python.org/downloads/ 下载安装的时候勾选添加到path中。然后打开cmd,输入python就进入python命令行了。
2.注释
使用#作为注释符号
3.计算
3.1加减乘除求余
+-*/和大多数编程语言类似。不同的是,除法(/
)的结果是float
。如果想要只保留整数则用//
。
>>> 1+1
2
>>> 2*5
10
>>> 6-4
2
>>> 5/3
1.6666666666666667
>>> 5//3
1
>>> 5%3
2
3.2平方
使用**
作为平方的操作符。
>>> 5**2
25
>>> 2**10
1024
3.3赋值
变量赋值用=
:
>>> width=20
>>> height=5*9
>>> width*height
900
如果一个变量没有定义,使用它就会报错:
>>> n # try to access an undefined variable
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'n' is not defined
3.4浮点型
有一个参数是浮点型的,则结果为浮点型。
>>> 1+2
3
>>> 1+2.0
3.0
3.5最后一次计算值
最近一次的计算的结果可以使用变量_
来表示
>>> 1+2
3
>>> _
3
3.6四舍五入
>>> round(12.556,2)
12.56
4.字符串
除了数字,python也可以操作strings
。String可以用几种不同的方式表示(express)。可以使用单引号(quotes)或者双引号包围(enclosed)。使用\
来转义(escape)引号。
>>> span
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'span' is not defined
>>> span='spam eggs'
>>> span
'spam eggs'
>>> span='doesn\'t'
>>> span
"doesn't"
>>> span='"Yes,"he said'
>>> span
'"Yes,"he said'
>>> span='"Isn\'t, she said."'
>>> span
'"Isn\'t, she said."'
在交互式解释器中,输出的字符串被引号包围并且特殊字符被用反斜杠(backslash)转义。最然有时候和输入的字符串不同(包围的引号会改变),这两个string是等价物(equivalent)。输出的字符串在这种情况下使用双引号包围:如果输入字符串包含(contain)一个单引号或者没有双引号。否则,输出字符串会使用单引号包围。使用pring()
函数可以生产(produce)一个可读性更强的输出字符串,通过省略(omitting)包围的引号和打印被转义(escaped)的特殊字符串。
>>> span = '"Isn\'t," she said'
>>> span
'"Isn\'t," she said'
>>> print(span)
"Isn't," she said
>>> span = 'First line.\nSecond line.'
>>> span
'First line.\nSecond line.'
>>> print(span)
First line.
Second line.
4.1转义
如果想要\
被解释为特殊字符作为开头,你可以使用raw strings
,通过在第一个引号前加一个r
。
>>> span=r'C:\some\name'
>>> span
'C:\\some\\name'
>>> print(span)
C:\some\name
4.2多行
String的字面值可以跨越多行。一种方式是使用三引号(triple-quotes)"""..."""
或者'''...'''
. 行结束符会自动的包含在string中,但可以在行尾添加\
来阻止这种。
>>> span = '''
... 此前会换行'''
>>> print(span)
此前会换行
>>> span = '''\
... 此前不会换行'''
>>> print(span)
此前不会换行
4.3拼接
strings可以使用操作符+
串起来(concatenated, glued together),使用*
来表示重复:
>>> 3*'um'+'ium'
'umumumium'
几个字符串拼在一起会自动合并:
>>> 'a''b''c'
'abc'
上面的这种特点只是针对字符串字面量,但不包括变量(variables)和表达式(expressions):
>>> prefix="Py"
>>> prefix 'thon'
File "<stdin>", line 1
prefix 'thon'
^
SyntaxError: invalid syntax
如果你想要合并变量和string字符串,请使用+
:
>>> prefix
'Py'
>>> prefix+'thon'
'Python'
多字符串合并:
>>> text = ('Put several strings within parentheses'
... ' to have them joined together.')
>>> text
'Put several strings within parentheses to have them joined together.'
>>>
4.4截取
字符串可以使用索引来获取字符。第一个字符的索引为0,没有单独的字符类型,一个字符就是简单的长度为1的字符串。
>>> word='Python'
>>> word[0]
'P'
>>> word[2]
't'
索引也可以是负数,从右开始计数:
>>> word='Python'
>>> word[0]
'P'
>>> word[2]
't'
>>> word[-1]
'n'
>>> word[-5]
'y'
注意,因为-0和0一样,负数索引从-1开始。 除了索引(indexing),切片(slicing)截取也是支持的。因为索引是用来获取单个字符串的,切片允许你获取(obtain)字串(substring)。
>>> word[0:2] # characters from position 0 (included) to 2 (excluded)
'Py'
>>> word[2:5] # characters from position 2 (included) to 5 (excluded)
'tho'
注意开始一直是包含的,结尾不包含。这种特点可以保证s[:i]+s[i:]
等价于s
:
>>> word[:2]
'Py'
>>> word[2:]
'thon'
>>> word[:2]+word[2:]
'Python'
因为索引有有效的默认值:省略的第一个索引默认为0,省略的第二个索引默认值是string的长度:
>>> word
'Python'
>>> word[-2]
'o'
>>> word[-2:]
'on'
>>> word[:]
'Python'
记住切片原理的一个方法是想象索引是字符间的点,左边的第一个字符排序为0,右边的最后一个字符为n:
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
>>> word[0:1]
'P'
>>> word[5:6]
'n'
第一行数字显示了string中索引的位置0...6;第二行显示了相应的负数索引。从i
到j
之间的切片(slice)包括了所有的在标签i
和j
之间的字符。
对于非负索引,切片的长度是索引的距离,如果都在范围内。比如word[1:3]
的长度是2.
试图使用超过范围的索引会得到一个错误:
>>> word[42]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
然而,超过范围的切片会优雅的处理索引:
>>> word[:]
'Python'
>>> word[0:1]
'P'
>>> word[0:42]
'Python'
>>> word[42:45]
''
>>> word[2:2]
''
>>> word[3,1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: string indices must be integers
>>> word[3:1]
''
可以理解为i
到j
是从左到右的顺序,不是循环计算的。负数索引也要换算成正数索引从左开始计数。这个顺序范围内没有截取到字符则返回空字符。
python中的字符串不能被改变,string是不可变的。因此给string中索引位置初赋值会得到一个错误:
>>> word[0]='j'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
如果你想要一个不同的string,你应该创建一个新的:
>>> 'j'+word[1:]
'jython'
>>> word[:2]+'py'
'Pypy'
4.5长度
内置函数len()
返回string的长度:
>>> len(word)
6
5. Lists
众所周知,python有很多组合的数据类型,用来将其他数据聚合起来。最出众的就是list
。list可以写成一系列用方括号(square brackets)包围的用逗号间隔(comma-separated)的数据。lists可能包含不同类型的数据,但通常是相同的类型。
就像strings(以及其他内置(built-in)的序列化(sequence)的类型), lists可以建立索引和切片。
>>> squares = [1, 4, 9 ,16, 25]
>>> squares
[1, 4, 9, 16, 25]
>>> squares[0]
1
>>> squares[2]
9
>>> squares[-1]
25
>>> squares[-3:]
[9, 16, 25]
>>> squares[:]
[1, 4, 9, 16, 25]
>>> squares[3:1]
[]
>>> squares[23:45]
[]
所有的切片操作返回一个包含需要元素的新的list。即得到的切片都是新的浅(shadow)拷贝。
5.1拼接
lists也支持聚合操作:
>>> squares + [36, 49]
[1, 4, 9, 16, 25, 36, 49]
不像strings,lists是可变的类型。lists的内容可以改变。
>>> cubes = [1, 8, 27, 65, 125] # something's wrong here
>>> 4 ** 3 # the cube of 4 is 64, not 65!
64
>>> cubes[3] = 64 # replace the wrong value
>>> cubes
[1, 8, 27, 64, 125]
你也可以添加新的元素到list的结尾。通过使用append()
方法。
>>> cubes.append(216) # add the cube of 6
>>> cubes.append(7 ** 3) # and the cube of 7
>>> cubes
[1, 8, 27, 64, 125, 216, 343]
5.2赋值
赋值给切片也是可以的,并且会改变list的大小甚至完全的清空
>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> letters
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> # replace some values
>>> letters[2:5] = ['C', 'D', 'E']
>>> letters
['a', 'b', 'C', 'D', 'E', 'f', 'g']
>>> # now remove them
>>> letters[2:5] = []
>>> letters
['a', 'b', 'f', 'g']
>>> # clear the list by replacing all the elements with an empty list
>>> letters[:] = []
>>> letters
[]
5.3长度
内置的方法len
也适应于lists:
>>> letters = ['a', 'b', 'c', 'd']
>>> len(letters)
4
5.4多维数组
lists也可以嵌套lists(创建一个lists包含其他lists)
>>> a = ['a', 'b','c']
>>> n = [1,2,3]
>>> x = [a,n]
>>> x
[['a', 'b', 'c'], [1, 2, 3]]
>>> x[0]
['a', 'b', 'c']
>>> x[0][1]
'b'
6程序设计第一步
当然,我们可以使用python做更复杂的任务,不仅仅是加2或者两个一起。比如,我们可以写一个Fibonacci
新的子序列:
>>> # Fibonacci series:
... # the sum of two elements defines the next
... a, b = 0, 1
>>> while b < 10:
... print(b)
... a, b = b, a+b
...
1
1
2
3
5
8
这个示例包含了几个特点:
- 第一行包含
多重赋值
。变量a
和b
同时获得新value 0 和 1. 最后一行再次使用,展示了右边的表达式(expression)先执行,在任何赋值发生之前。右边的表达式执行顺序是从左到右。 - 只要条件(condition),此处(
b<10
)结果仍然是true,while
循环就执行。在Python,就像C语言,任何非零整数为true。条件也可以是string或者list value,事实上任何序列(sequence),任何非零长度的序列为true,空序列是false。测试中用到的是一个简单的比较。标准的比较操作同C语言相同:<
(less than),>
(greater than),==
(equal to),<=
(less than or equal to),>=
(greater than or equal to) and!=
(not equal to). - 循环体是缩进的:缩进是Python的声明分组的方法。在交互式情景中,你必须为每个缩进行输入一个制表符(tab)或者空格(spaces)。实际上,你会使用文本编辑器准备更复杂的输入; 所有的正规的编辑器都带有自动缩进的功能。当交互式的输入一个复杂语句,你必须随后输入一个空白行来表示完成(因为解析器不能猜测你什么时候输入最后一行)。注意一个基本模块的每一行都必须缩进相同的数量。
-
print()
方法打印传进来的参数。不同于仅仅是打印,你想要写的表达式(像我们之前在计算示例中使用的)处理多种参数,浮点型float数量,string. string打印的时候不带括号,每个条目之间会插入一个空格,因此你可以格式化string更美观:
>>> i = 256*256
>>> print('The value of i is', i)
The value of i is 65536
关键字end
用来避免输出的新行,或者以一个不同的string来结尾:
>>> a, b = 0, 1
>>> while b < 1000:
... print(b, end=',')
... a, b = b, a+b
...
1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,
注脚
[1] 因为 **
比-
有更高的优先级, -3**2
将会被解释为-(3**2)
,即-9
。为了避免这种情况并得到9
,你可以使用(-3)**2
.
[2] 不像其他语言,特殊字符,比如\n
和...
有相同的意义。唯一的不同是单引号不必转义"
(但要转义\'
),反之亦然。