python数字、字符串、列表
3.1 python作计算器
3.1.1 数字
>>> 4444+5555
9999
>>> 100-25*3
25
>>> (50/2*3-25)/5
10.0
>>> 23/3
7.666666666666667
>>> 9/5
1.8
整数型 (如2, 4, 20)属于 int类型,带有小数部分的数字 (如5.0, 1.6) 属于float浮点型 。
除法(/)总是返回一个float类型数。要做 floor 除法 并且得到一个整数结果(返回商的整数部分) 可以使用 // 运算符;要计算余数可以使用 %:
>>> 25/3
8.333333333333334
>>> 25//3
8
>>> 25%3
1
>>> 5*3+2
17
通过Python,可以使用**做n次方运算[1]:
>>> 5**2
25
>>> 2**7
128
等号 (=) 用于给变量赋值。赋值之后,在下一个提示符之前不会有任何结果显示:
>>> w=100
>>> h=200
>>> w*h
20000
完全支持浮点数运算;同时混合的数型的运算将使结果由整数转换为浮点数︰
>>> 15*2.55/1.5
25.5
>>> 9.0/4
2.25
在交互模式下,最后输出的表达式会被赋值给变量_.这意味着,当您使用Python作为桌面计算器时,继续计算变得很容易,例如:
>>> tax=12.5 /100
>>> price = 100.50
>>> price*tax
12.5625
>>> price+_
113.0625
>>> round(_,2)
113.06
>>>
除了 整型 和 浮点,Python 支持其他类型的数字,如 小数 和 分数。Python 也具有内置支持的 复数,并使用 j 或 J 后缀 (例如指示的虚部3+5j)。
3.1.2 字符串
除了数字,Python还可以处理字符串,这可以用多种方式表示。他们可以被括在单引号 (’…’) 或双引号 ("…") 中,二者等价 。\ 可以用于转义’︰
>>> 'spam eggs'
'spam eggs'
>>> 'doesn\'s'
"doesn's"
>>> "doesn't"
"doesn't"
>>> ' "Yes," he said.'
' "Yes," he said.'
>>> " \"Yes,\" he said."
' "Yes," he said.'
>>> '"Isn\'t," she said.'
'"Isn\'t," she said.'
在交互式解释器中,输出的字符串用引号括起来,特殊字符用反斜杠进行转义。虽然可能和输入看上去不太一样(括起来的引号可能会变),但是两个字符串是相等的。如果字符串中只有单引号而没有双引号,就用双引号引用,否则用单引号引用。print() 函数生成可读性更好的输出,通过省略引号和通过打印字符转义和特殊字符︰
>>> print('"Isn\'t," she said.')
"Isn't," she said.
>>> s='First line. \nSecond line.'
>>> s
'First line. \nSecond line.'
>>> print(s)
First line.
Second line.
>>>
如果你不想让 \ 被解释为特殊字符开头的字符,您可以通过添加 r 使用 原始字符串︰
>>> print('D:\oracle\app')
D:\oraclepp
>>> print(r'D:\oracle\app')
D:\oracle\app
>>>
字符串可以跨多行。一种方法使用三重引号: “”"…""" 或 ‘’’…’’’。行结尾会自动包含在字符串中,但它是可以通过在一行的末尾增加 \防止以下情况。下面的示例(注意,没有开始的第一行 ):
>>> print("""\
... Usage: thingy [OPTIONS]
... -h
... -H hostname
... """)
Usage: thingy [OPTIONS]
-h
-H hostname
字符串可以用+操作符连接,也可以用*操作符重复多次:
>>> 'I '+3*' LOVE '+' You!'
'I LOVE LOVE LOVE You!'
相邻的两个或多个字符串字面量(用引号引起来的)会自动连接。
>>> 'you' 'love' 'me'
'youloveme'
>>>
这只适用于两个字面值,不适用于变量和表达式,如果你想连接多个变量或者连接一个变量和一个字面量,使用“+”::
>>> I='you'
>>> I 'like'
File "<stdin>", line 1
I 'like'
^
SyntaxError: invalid syntax
>>> I+' like'
'you like'
字符串可以索引,第一个字符的索引值为0。Python没有单独的字符类型;一个字符就是一个简单的长度为1的字符串。
>>> word[0]
'L'
>>> word[3]
'e'
索引也可以是负值,此时从右侧开始计数:
注意,因为 -0 和 0 是一样的,负的索引从 -1 开始。
>>> word[-1]
'e'
>>> word[-3]
'o'
>>> word[-4]
'L'
除了索引,还支持切片。索引用于获得单个字符,切片让你获得子字符串:
注意开始字符总包括在内,并且始终排除结束。这使得s[:i] + s[i:]永远等于s
切片索引具有非常有用的默认值;省略的第一个索引默认为零,省略第二个索引默认为切片字符串的长度。
>>> word[0:2]
'Lo'
>>> word[2:3]
'v'
>>> word[:3]+word[3:]
'Love'
>>>
Python 字符串不能更改 — — 他们是 不可变的。因此,赋值给字符串索引的位置会导致错误:
>>> word[-1]='J'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>>
如果你需要一个不同的字符串,你应该创建一个新的:
>>> 'I'+word[1:]
'Iove'
>>> word[:2]+'lo'
'Lolo'
>>>
内建函数 len() 返回字符串的长度:
>>> s='qwertyuiopasdfghjklzxcvbnm'
>>> len(s)
26
3.1.3 列表
Python 有几个 复合 数据类型,用来组合其他的值。最有用的是 列表,可以写成中括号中的一列用逗号分隔的值。列表可以包含不同类型的元素,但是通常一个列表中的所有元素都拥有相同的类型。
>>> squares = [1,4,9,16,25]
>>> squares
[1, 4, 9, 16, 25]
与字符串 (和所有其他内置 序列 类型)相似,列表可以被索引和切片︰
>>> squares[-1]
25
>>> squares[:3]
[1, 4, 9]
>>> squares[-3:]
[9, 16, 25]
列表也支持连接这样的操作:
>>> squares+[36,49,64,81,100]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
与字符串的不可变特性不同,列表是可变的类型,例如可以改变它们的内容:
>>> cubes = [1,8,27,65,125]
>>> 4**3
64
>>> cubes[3]=64
>>> cubes
[1, 8, 27, 64, 125]
你还可以通过append () 方法 在列表的末尾添加新的项目(我们将会看到更多相关方法)︰
>>> cubes.append(216)
>>> cubes.append(7**3)
>>> cubes
[1, 8, 27, 64, 125, 216, 343]
赋值到切片也是可能的,这甚至可以更改列表的大小或完全清除它:
>>> letters=['a','b','c','d','e','f','g','h']
>>> letters
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
>>> letters[2:5]=['C','D','E']
>>> letters
['a', 'b', 'C', 'D', 'E', 'f', 'g', 'h']
>>> letters[2:5]=[]
>>> letters
['a', 'b', 'f', 'g', 'h']
>>> letters[:]=[]
>>> letters
[]
>>>
内建函数 len() 同样适用于列表:
>>> len(squares)
5
列表可以嵌套 (创建包含其他列表的列表),例如:
>>> a=['a','b','c','d']
>>> n=[1,2,3]
>>> x=[a,n]
>>> x
[['a', 'b', 'c', 'd'], [1, 2, 3]]
>>> x[0][1]
'b'
>>>
3.2 编程第一步
当然,我们可以使用Python来完成更复杂的任务,而不仅是二加二。我们可以写一个生成斐波那契 初始子序列的程序,如下所示:
>>> a,b=0,1
>>> while b<10:
... print(b)
... a,b=b,a+b
...
1
1
2
3
5
8
第一行包含 多个赋值 ︰ 变量 a 和 b 同时获得新值 0 和 1。最后一行又这样使用了一次,说明等号右边的表达式在赋值之前首先被完全解析。右侧表达式是从左到右计算的。
while循环在满足条件为真时一直执行 (这儿: b < 10) .在 Python 中,像在 C 中,任何非零整数值为 True;零是 False。条件也可能是一个字符串或列表值,事实上任何序列,任何非零长度是真的;空序列都是false。
循环的本体是缩进的:缩进是Python对语句进行分组的方式。
print() 函数写入给定的参数。打印出来的字符串不包含引号,项目之间会插入一个空格,所以你可以设置漂亮的格式,像这样:
>>> 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] 因为 ** 的优先级高于 -, -32会被解释为 -(32) 并得到结果 -9.。为了避免这一点并得到结果 9, 你可以使用 (-3)**2。
[2] 不像其他语言,诸如 \n 等的特殊字符,在单引号中 (’…’) 和双引号中 ("…") 有着相同含义。两者唯一的不同在于使用单引号你不需要转义 " (但是你必须转义 ') ,反之亦然。