一二章,数据类型
为什么要编程?
编程
python 八荣八耻
#以动手实践为荣,以只看不练为耻。
#以打印日志为荣,以单步跟踪为耻。
#以空白分隔为荣,以制表分隔为耻。
#以单元测试为荣,以手工测试为耻。
#以代码重用为荣,以复制粘贴为耻。
#以多态应用为荣,以分支判断为耻。
# 以Pythonic为荣,以冗余拖沓为耻。
#以总结思考为荣,以不求甚解为耻。
编程==写代码,写代码为了什么? 为了让计算机干你想要干的事情
有哪些高级语言
机器语言、汇编语言、高级语言
高级语言 (必须经过转换才能被执行)
编译类:
在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),效率高
编译后程序运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++、Delphi等
解释类:
执行方式类似于我们日常生活中的“同声翻译”,应用程序源代码一边由相应语言的解释器“翻译”成目标代码(机器语言),一边执行,因此效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其解释器(想运行,必须先装上解释器,就像跟老外说话,必须有翻译在场),但这种方式比较灵活,可以动态地调整、修改应用程序。如Python、Java、PHP、Ruby等语言。
Python目前已支持所有主流操作系统,在Linux,Unix,Mac系统上自带Python环境,在Windows系统上需要安装一下
变量
把程序运算的中间结果临时存到内存里,以备后面的代码继续调用
变量定义规范
- 变量名只能是字母、数字或下划线的任意组合
- 变量名的第一个字符不能是数字
- 以下关键字不能声明为变量名['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
定义变量不好的方式举例
- 变量名为中文、拼音
- 变量名过长
- 变量名词不达意
常量
在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量。(一旦定义为常量,更改即会报错?)
代码注释
代码注释分单行和多行注释, 单行注释用#,多行注释可以用三对双引号""" """
数据类型
数字:
int(整型)
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
long(长整型)
进制转换
整数之间的进制转换:
10进制转16进制: hex(16) ==> 0x10
16进制转10进制: int('0x10', 16) ==> 1
字符串
在Python中,加了引号的字符都被认为是字符串!
msg = "My name is Alex , I'm 22 years old!" (单双没区别,有时需配合使用)
多行字符串必须用多引号:
msg = '''
今天我想写首小诗,
歌颂我的同桌,
你看他那乌黑的短发,
好像一只炸毛鸡。
'''
print(msg)
- 补充:
1.字符串的单引号和双引号都无法取消特殊字符的含义,如果想让引号内所有字符均取消特殊意义,在引号前面加r,如name=r'l\thf'
2.unicode字符串与r连用必需在r前面,如name=ur'l\thf'
字符串拼接
相加
相乘(重复字符串再拼接)
注意,字符串的拼接只能是双方都是字符串,不能跟数字或其它类型拼接
布尔型(bool)
python中的布尔值
作者:ag128333
所有标准对象均可用于布尔测试,同类型的对象之间可以比较大小。每个对象天生具有 布尔True或False值。空对象、值为零的任何数字或者Null对象None的布尔值都是False。
下列对象的布尔值是False.
NONE;
False(布尔类型)
所有的值为零的数
0(整型)
0.0(浮点型)
0L(长整型)
0.0+0.0j(复数)
""(空字符串)
[](空列表)
()(空元组)
{}(空字典)
值不是上面列出来的任何值的对象的布尔值都是True,例如non-empty、non-zero等。
用户创建的类实例如果定义了nonzero(_nonzero_())或length(_len_())且值为0,那么它们的布尔值就是False.
测试题:Python中布尔运算是常见的运算,那么计算0 and 1的结果是_
(python 中的and从左到右计算表达式,python中的逻辑操作符and可以将任意表达式连接在一起,并得到一个布尔类型的值,如果两边都为真,则返回第二个值,如果第一(二)个为假,则返回第一(二)个值。所以如问题所述。)
流程控制之 if...else
缩进:让程序知道,每段代码依赖哪个条件(4个空格)
在其它的语言里,大多通过{ }来确定代码块,比如C,C++,Java,Javascript都是这样
Python的缩进有以下几个原则:
- 顶级代码必须顶行写,即如果一行代码本身不依赖于任何条件,那它必须不能进行任何缩进
- 同一级别的代码,缩进必须一致
- 官方建议缩进用4个空格,当然你也可以用2个,如果你想被人笑话的话。
第二章
字典
- 字典的常见操作
键、值、键值对
1、dic.keys() 返回一个包含字典所有KEY的列表;
2、dic.values() 返回一个包含字典所有value的列表;
3、dic.items() 返回一个包含所有(键,值)元祖的列表;
4、dic.iteritems()、dic.iterkeys()、dic.itervalues() 与它们对应的非迭代方法一样,不同的是它们返回一个迭代子,而不是一个列表;
新增
1、dic['new_key'] = 'new_value';
2、dic.setdefault(key, None) ,如果字典中不存在Key键,由 dic[key] = default 为它赋值;_
删除
1、dic.pop(key[,default]) 和get方法相似。如果字典中存在key,删除并返回key对应的vuale;如果key不存在,且没有给出default的值,则引发keyerror异常;
2、dic.clear() 删除字典中的所有项或元素;
修改
1、dic['key'] = 'new_value',如果key在字典中存在,'new_value'将会替代原来的value值;
2、dic.update(dic2) 将字典dic2的键值对添加到字典dic中
查看
1、dic['key'],返回字典中key对应的值,若key不存在字典中,则报错;
2、dict.get(key, default = None) 返回字典中key对应的值,若key不存在字典中,则返回default的值(default默认为None)
循环
1、for k in dic.keys()
2、for k,v in dic.items()
3、for k in dic
长度
1、len(dic)
元组
特别注意:
1、元组中只包含一个元素时,需要在元素后面添加逗号来消除歧义
tup1=(50,)
2、元组中的元素值使不允许修改的,但可以对元组进行连接组合
tup1=(12,34.56)
tup2=('abc','xyz')
tup1[0]=100 #非法操作,元组中的元素是不允许被修改的
tup3=tup1+tup2 #python运行元组进行连接组合
print(tup3)# 输出:(12,34.56,'abc','xyz')
3、元组中的元素是不允许删除的,但可以使用del语句来删除整个元组
4、元组之间可以使用+和*,即允许元组进行组合连接和重复复制,运算后会生成一个新的元组
tup1=(1,2,3)
tup2=(3,4,5)
tup3=tup1+tup2 #输出:tup3=(1,2,3,3,4,5)
tup4=tup1*3 #输出: tup4=(1,2,3,1,2,3,1,2,3)
5、元组运行切片操作
6、任意无符号的对象,以逗号隔开,默认为元组
a=1,2,3,'hello'
print(a) #输出:(1,2,3,'hello')
7、对元组进行操作的内建函数
——cmp(tup1,tup2): 比较两个元组元素
——len(tup): 返回元组中元素的个数
——max(tup): 返回元组中元素最大的值
——min(tup): 返回元组中元素最小的值
——tuple(seq): 将列表转化为元组
8、元组的方法(元组没有列表中的增、删、改的操作,只有查的操作)
——tuple.index(obj):从元组中找出某个值第一个匹配项的索引值
——tuple.count(obj): 统计某个元素在元组中出现的次数