- Python的注释及乱码
- 单行注释:以#开头,#右边的所有东西当做说明,而不是真正要执行的程序,起辅助说明作用
- 多行注释:’’’多行注释’’’可以写多行的功能说明
- Python乱码问题 由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:
# -*- coding:utf-8 -*-
# coding=utf-8
整数
Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。 计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。
浮点数
浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是完全相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。 整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。 字符串 字符串是以单引号'或双引号"括起来的任意文本,比如'abc',"xyz"等等。请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符。如果'本身也是一个字符,那就可以用""括起来,比如"I'm OK"包含的字符是I,',m,空格,O,K这6个字符。 如果字符串内部既包含'又包含"怎么办?可以用转义字符\来标识,比如: 'I'm "OK"!' 表示的字符串内容是: I'm "OK"! 转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\表示的字符就是\,可以在Python的交互式命令行用print()打印字符串看看: 如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r''表示''内部的字符串默认不转义,可以自己试试: 如果字符串内部有很多换行,用\n写在一行里不好阅读,为了简化,Python允许用'''...'''的格式表示多行内容, print('''line1 line2 line3''')
布尔值
布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来 布尔值可以用and、or和not运算。 and运算是与运算,只有所有都为True,and运算结果才是True:
空值
空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。 此外,Python还提供了列表、字典等多种数据类型,还允许创建自定义数据类型,我们后面会继续讲到。 怎样知道一个变量的类型呢? 在python中,只要定义了一个变量,而且它有数据,那么它的类型就已经确定了,不需要咱们开发者主动的去说明它的类型,系统会自动辨别 可以使用type(变量的名字),来查看变量的类型
函数 说明 int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ) 将x转换到一个浮点数 complex(real [,imag ]) 创建一个复数 str(x ) 将对象 x 转换为字符串 repr(x ) 将对象 x 转换为表达式字符串 eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象 tuple(s ) 将序列 s 转换为一个元组 list(s ) 将序列 s 转换为一个列表 chr(x ) 将一个整数转换为一个字符 unichr(x ) 将一个整数转换为Unicode字符 ord(x ) 将一个字符转换为它的整数值 hex(x ) 将一个整数转换为一个十六进制字符串 oct(x ) 将一个整数转换为一个八进制字符串
在Python中,采用的格式化方式和C语言是一致的,用%实现,举例如下:
>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
你可能猜到了,%运算符就是用来格式化字符串的。在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。
常见的占位符
%d 整数 %f 浮点数 %s 字符串 %x 十六进制整数
其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数:
>>> '%2d-%02d' % (3, 1)
' 3-01'
>>> '%.2f' % 3.1415926
'3.14'
如果你不太确定应该用什么,%s永远起作用,它会把任何数据类型转换为字符串:
>>> 'Age: %s. Gender: %s' % (25, True)
'Age: 25. Gender: True'
有些时候,字符串里面的%是一个普通字符怎么办?这个时候就需要转义,用%%来表示一个%:
>>> 'growth rate: %d %%' % 7
'growth rate: 7 %'
输入
如果要让用户从电脑输入一些字符怎么办?Python提供了一个input(),可以让用户输入字符串,并存放到一个变量里
- python2版本中 1.1 raw_input() 在Python中,获取键盘输入的数据的方法是采用 raw_input 函数。 看如下示例: 注意: raw_input()的小括号中放入的是,提示信息,用来在获取数据之前给用户的一个简单提示 raw_input()在从键盘获取了数据以后,会存放到等号右边的变量中 raw_input()会把用户输入的任何值都作为字符串来对待 1.2 input() input()函数与raw_input()类似,但其接受的输入作为是表达式。 input()接受表达式输入,并把表达式的结果赋值给等号左边的变量 raw_input()输入的都当成字符串(和Python3的input功能一样)
- python3版本中 没有raw_input()函数,只有input() 并且 python3中的input与python2中的raw_input()功能一样
逻辑运算符
- 运算符 逻辑表达式 描述 实例
- and x and y 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 (a and b) 返回 20。
- or x or y 布尔"或" - 如果 x 是 True,它返回 True,否则它返回 y 的计算值。 (a or b) 返回 10。
- not not x 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 not(a and b) 返回 False
5、比较(关系)运算符
运算符 | 描述 | 示例 |
---|---|---|
== | 检查两个操作数的值是否相等,如果是则条件变为真。 | 如a=3,b=3则(a == b) 为 true. |
!= | 检查两个操作数的值是否相等,如果值不相等,则条件变为真。 | 如a=1,b=3则(a != b) 为 true. |
<> | 检查两个操作数的值是否相等,如果值不相等,则条件变为真。 | 如a=1,b=3则(a <> b) 为 true。这个类似于 != 运算符 |
> | 检查左操作数的值是否大于右操作数的值,如果是,则条件成立。 | 如a=7,b=3则(a > b) 为 true. |
< | 检查左操作数的值是否小于右操作数的值,如果是,则条件成立。 | 如a=7,b=3则(a < b) 为 false. |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件成立。 | 如a=3,b=3则(a >= b) 为 true. |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件成立。 | 如a=3,b=3则(a <= b) 为 true. |
Python的逻辑判断和循环 1、if elif else条件判断 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。 elif是else if的缩写,完全可以有多个elif,所以if语句的完整形式就是:
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现:
age = 20
if age >= 18:
print('your age is', age)
print('adult')
根据Python的缩进规则,如果if语句判断是True,就把缩进的两行print语句执行了,否则,什么也不做。
字符串常见操作
下标索引 所谓下标,就是编号,就好比超市中的存储柜的编号,通过这个编号就能找到相应的存储空间 字符串实际上就是字符的数组,所以也支持下标索引。 如果有字符串:name = 'abcdef',在内存中的实际存储如下:
如果想取出部分字符,那么可以通过下标的方法,(注意python中下标从 0 开始)
name = 'abcdef'
print(name[0])
print(name[1])
print(name[-2])
切片(分片)
切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。 切片的语法:[起始:结束:步长]
步长:表示下标变化的规律。 注意:选取的区间属于左闭右开型,即从"起始"位开始,到"结束"位的前一位结束不包含结束位本身
name = 'abcdef'
print(name[0:3]) # 取 下标0~2 的字符
name = 'abcdef'
print(name[0:5]) # 取 下标为0~4 的字符
name = 'abcdef'
print(name[3:5]) # 取 下标为3、4 的字符
name = 'abcdef'
print(name[2:]) # 取 下标为2开始到最后的字符
name = 'abcdef'
print(name[1:-1]) # 取 下标为1开始 到 最后第2个 之间的字符
>>> a = "abcdef"
>>> a[:3]
'abc'
>>> a[::2]
'ace'
>>> a[5:1:2]
''
>>> a[1:5:2]
'bd'
>>> a[::-2]
'fdb'
>>> a[5:1:-2]
'fd'
如有字符串 mystr = 'hello world and hhhzzzqqq yunshuxueyuan osvee beijing'
以下是常见的操作
- find == java Indexof方法 检测 str 是否包含在 mystr中,如果是返回开始的索引值,否则返回-1 mystr.find(str, start=0, end=len(mystr))
- index 跟find()方法一样,只不过如果str不在 mystr中会报一个异常. mystr.index(str, start=0, end=len(mystr))
- count 返回 str在start和end之间 在 mystr里面出现的次数 mystr.count(str, start=0, end=len(mystr))
- replace 把 mystr 中的 str1 替换成 str2,如果 count 指定,则替换不超过 count 次. mystr.replace(str1, str2, mystr.count(str1))
- split 以 str 为分隔符切片 mystr,如果 maxsplit有指定值,则仅分隔 maxsplit 个子字符串 mystr.split(str=" ", 2)
- capitalize 把字符串的第一个字符大写 mystr.capitalize()
- title 把字符串的每个单词首字母大写
- startswith 检查字符串是否是以 obj 开头, 是则返回 True,否则返回 False mystr.startswith(obj)
- endswith 检查字符串是否以obj结束,如果是返回True,否则返回 False. mystr.endswith(obj)
- lower 转换 mystr 中所有大写字符为小写 mystr.lower()
- upper 转换 mystr 中的小写字母为大写 mystr.upper()
- ljust 返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串 mystr.ljust(width)
- rjust 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串 mystr.rjust(width)
- center 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串 mystr.center(width)
- lstrip 删除 mystr 左边的空白字符 mystr.lstrip()
- rstrip 删除 mystr 字符串末尾的空白字符 mystr.rstrip()
- strip ---java trim 删除mystr字符串两端的空白字符
- rfind 类似于 find()函数,不过是从右边开始查找. mystr.rfind(str, start=0,end=len(mystr) )
- rindex 类似于 index(),不过是从右边开始. mystr.rindex( str, start=0,end=len(mystr))
- partition 把mystr以str分割成三部分,str前,str和str后 mystr.partition(str)
- rpartition 类似于 partition()函数,不过是从右边开始. mystr.rpartition(str)
- splitlines 按照换行符分隔,返回一个包含各行作为元素的列表 mystr.splitlines()
- isalpha 如果 mystr 所有字符都是字母 则返回 True,否则返回 False mystr.isalpha()
- isdigit 如果 mystr 只包含数字则返回 True 否则返回 False. mystr.isdigit()
- isalnum 如果 mystr 所有字符都是字母或数字则返回 True,否则返回 False mystr.isalnum()
- isspace 如果 mystr 中只包含空格,则返回 True,否则返回 False. mystr.isspace()
- join mystr 中每个字符后面插入list的每个元素后面,构造出一个新的字符串 mystr.join(list)
str.join() 元素序列是列表
>>> a = '!@'.join(['Fusion', 'Sphere', 'Cloud'])
>>> a
'Fusion!@Sphere!@Cloud'
2. 元素序列是元组
>>> " ".join(('China', 'Japan', 'USA', 'UK'))
'China Japan USA UK'
3. 元素序列是集合
>>> ''.join({'C', 'h', 'i', 'n', 'a'})
'ahCni'
可以看出,输出的字符顺序与集合中元素的顺序不是保持一致的。
4. 元素序列是字典
>>> ' ~ '.join({'Asia':'China', 'Europe':'UK'})
'Asia ~ Europe'
可以看出,如果序列是字典,拼接的字符是字典的键。
5. 元素序列是字符串
当元素序列仅仅是字符串时,join函数会将字符串中的每一个单个字符抽取出来,与连接符组合。
>>> ', '.join('happy')
'h, a, p, p, y'
注意事项
1. 要连接的字符串序列(参数)必须是字符串
join函数的参数应该是全部由字符串构成的可迭代对象。当可迭代对象不全是由字符串构成的时,Python会报错TypeError。
总结: 查找字符串: find:找不到返回-1 ,都是从左边找,右边查找r index:找不到报错
循环结构
Python的循环有两种,一种是for...in循环,另外一种是while循环。
for循环的格式
for 临时变量 in 列表或者字符串等: 循环满足条件时执行的代码 else: 循环不满足条件时执行的代码
列表的相关操作
列表中存放的数据是可以进行修改的,比如"增"、"删"、"改""
- 添加元素("增"append, extend, insert) append 通过append可以向列表添加元素 extend(+) 通过extend可以将另一个集合中的元素逐一添加到列表中
>>> a = [1, 2]
>>> b = [3, 4]
>>> a.append(b)
>>> a
[1, 2, [3, 4]]
>>> a.extend(b)
>>> a
[1, 2, [3, 4], 3, 4]
insert insert(index, object) 在指定位置index前插入元素object
>>> a = [0, 1, 2]
>>> a.insert(1, 3)
>>> a
[0, 3, 1, 2]
- 修改元素("改") 修改元素的时候,要通过下标来确定要修改的是哪个元素,然后才能进行修改
- 查找元素("查"in, not in, index, count) 所谓的查找,就是看看指定的元素是否存在
in, not in
python中查找的常用方法为: in(存在),如果存在那么结果为true,否则为false not in(不存在),如果不存在那么结果为true,否则false #查找是否存在if findName in nameList: print('在字典中找到了相同的名字') else: print('没有找到') 说明: in的方法只要会用了,那么not in也是同样的用法,只不过not in判断的是不存在
index, count
index和count与字符串中的用法相同
>>> a = ['a', 'b', 'c', 'a', 'b']
>>> a.index('a', 1, 3) # 注意是左闭右开区间
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 'a'isnotin list
>>> a.index('a', 1, 4)
3>>> a.count('b')
2>>> a.count('d')
0
- 删除元素 ("删"del, pop, remove) 类比现实生活中,如果某位同学调班了,那么就应该把这个条走后的学生的姓名删除掉;在开发中经常会用到删除这种功能。 列表元素的常用删除方法有: del:根据下标进行删除,其实可以删除所有变量 pop:默认删除最后一个元素 remove:根据元素的值进行删除第一个
>>> l
['abcdef', ['aaa', 'bb', 'ccc'], 'ddd', 'fff']
>>> del l[0]
>>> l
[['aaa', 'bb', 'ccc'], 'ddd', 'fff']
- 排序(sort, reverse) sort方法是将list按特定顺序重新排列,默认为由小到大,参数reverse=True可改为倒序,由大到小。 reverse方法是将list逆置。
>>> a = [1, 4, 2, 3]
>>> a
[1, 4, 2, 3]
>>> a.reverse()
>>> a
[3, 2, 4, 1]
>>> a.sort()
>>> a
[1, 2, 3, 4]
>>> a.sort(reverse=True)
>>> a
[4, 3, 2, 1]
<6>enumerate()
>>> chars = ['a', 'b', 'c', 'd']
>>> for i, chr in enumerate(chars):
... print i, chr
...
0 a
1 b
2 c
3 d