while 格式化输出
第一种写法:
name = input('请输入你的名字:')age = int(input('请输入你的年龄:'))score = int(input('请输入你的成绩:'))msg = '我叫%s,今年%d岁,成绩为%d分'%(name,age,score)print(msg)
第二种写法
#第二种写法:name1 = input('请输入你的名字:')age1 = input('请输入你的年龄:')score1 = input('请输入你的成绩:')msg = '我叫%(name)s,今年%(age)s岁,成绩为%(score)s分'\%{ 'age':age1,'name':name1,'score':score1}print(msg)
Ps:
msg = '我叫%s,今年%d岁,学习进度为2%%' %('ming',18)print(msg)
Python运算符
算术运算符
常用的算术运算符包括 + :两个对象相加
- :两个数相减
* :两个数相乘
/ :两个数相除
% :两个数相除取余数
** :幂,a**b即a的b次方幂
// :两个数相除取商的整数部分,如9.0//2.0结果为4.0
Ps:Python2.x 里,整数除整数,只能得出整数。如果要得到小数部分,把其中一个数改成浮点数即可。
比较运算符
常用的比较运算符包括 ==:等于,比较符号两边对象是否相等,相等则返回True
!=:不等于,比较符号两边对象是否不相等,不相等则返回True
<>:不等于,使用方法同上
> :大于,符号左边大于右边则返回True
< :小于,符号左边小于右边则返回True
>= :大于等于,符号左边大于等于右边则返回True
<= :小于等于,符号左边小于等于右边则返回True
赋值运算符
常用的赋值运算符包括 = ,+= ,-= ,*= ,/= ,**= ,//=。‘=’是简单的赋值,将等号右边赋值给等号左边。其他几种的意义类似,如 a += b 就是 a=a+b,其他符号用法和 += 类似。
逻辑运算符
逻辑运算符包括 and or not 即逻辑运算中的与或非
and :a and b, 若a和b均为真则返回True,否则返回False
or :a or b ,a和b全为假则False,否则返回True
not : not a , a为真则返回False,a为假则返回True
#!/usr/bin/python# -*- coding: UTF-8 -*- a = 10b = 20 if ( a and b ): print "1 - 变量 a 和 b 都为 true"else: print "1 - 变量 a 和 b 有一个不为 true" if ( a or b ): print "2 - 变量 a 和 b 都为 true,或其中一个变量为 true"else: print "2 - 变量 a 和 b 都不为 true" # 修改变量 a 的值a = 0if ( a and b ): print "3 - 变量 a 和 b 都为 true"else: print "3 - 变量 a 和 b 有一个不为 true" if ( a or b ): print "4 - 变量 a 和 b 都为 true,或其中一个变量为 true"else: print "4 - 变量 a 和 b 都不为 true" if not( a and b ): print "5 - 变量 a 和 b 都为 false,或其中一个变量为 false"else: print "5 - 变量 a 和 b 都为 true"
结果如下:
1 - 变量 a 和 b 都为 true2 - 变量 a 和 b 都为 true,或其中一个变量为 true3 - 变量 a 和 b 有一个不为 true4 - 变量 a 和 b 都为 true,或其中一个变量为 true5 - 变量 a 和 b 都为 false,或其中一个变量为 false
运算优先级:not > and > or
逻辑运算符前后都是条件时,先判断高优先级,再判断低优先级,同一优先级从左往右判断。
逻辑运算符前后是数字时:x or y ,如过 x 为真,则输出为 x 的值 ,x 为假,则输出 y 的值。 如2 or 3 输出为2,0 or 3输出为3(0代表False)。
x and y 输出的值和 or 相反,即 x 为真则输出 y 的值,x 为假则输出 x 的值,也就是 0。
成员运算符
成员运算符 in 和 not in
in : a in b, 如果a在b序列里则返回True
not in :a not in b,如果a不在b序列里则返回True
#!/usr/bin/python# -*- coding: UTF-8 -*- a = 10b = 20list = [1, 2, 3, 4, 5 ]; if ( a in list ): print "1 - 变量 a 在给定的列表中 list 中"else: print "1 - 变量 a 不在给定的列表中 list 中" if ( b not in list ): print "2 - 变量 b 不在给定的列表中 list 中"else: print "2 - 变量 b 在给定的列表中 list 中" # 修改变量 a 的值a = 2if ( a in list ): print "3 - 变量 a 在给定的列表中 list 中"else: print "3 - 变量 a 不在给定的列表中 list 中"
结果如下:
1 - 变量 a 不在给定的列表中 list 中2 - 变量 b 不在给定的列表中 list 中3 - 变量 a 在给定的列表中 list 中
身份运算符
is :x is y ,判断x和y是不是一个对象,是则返回True
is not:x is not y ,判断x和y是不是不同对象,是则返回True
#!/usr/bin/python# -*- coding: UTF-8 -*- a = 20b = 20 if ( a is b ): print "1 - a 和 b 有相同的标识"else: print "1 - a 和 b 没有相同的标识" if ( a is not b ): print "2 - a 和 b 没有相同的标识"else: print "2 - a 和 b 有相同的标识" # 修改变量 b 的值b = 30if ( a is b ): print "3 - a 和 b 有相同的标识"else: print "3 - a 和 b 没有相同的标识" if ( a is not b ): print "4 - a 和 b 没有相同的标识"else: print "4 - a 和 b 有相同的标识"
结果如下:
1 - a 和 b 有相同的标识2 - a 和 b 有相同的标识3 - a 和 b 没有相同的标识4 - a 和 b 没有相同的标识
运算符优先级
**(指数) > * / % //(乘,除,取模和取整除) > +-(加减) > 比较运算符(<,>,>=,<=) > 等于运算符 (<>,==,!=) > 赋值运算符(=, %=,/=, //=, -=, +=, *=, **=) > 身份运算符(is , is not) > 成员运算符(in , not in) >逻辑运算符(and ,or,not)
编码历史
编码就是用特定位数的0和1代表特定字符。
计算机储存或者是传输文件,实际上是存储和传输的0和1的组合。
ASCII:因为最早的计算机诞生在美国,所以最早的编码方式是ascii码。ascii使用一个字节即8位,最大能对应2的8次方即256个字符,在计算机的发展前期在英文使用区域是足够使用的。
Unicode:后来,因为计算机的普及,越来越多的国家的语言需要编码,ascii码已经不足以存储这么多对应关系,于是ISO(国际标准化组织)组织创建了一个新的编码方式:万国
码unicode。万国码unicode码刚开始使用两个字节即16位来编码,后来因为不够用又扩展到4个字节即32位编码。
Utf-8:万国码unicode因为编码方式的原因,资源浪费严重,所以后来又升级成utf-8的编码方式,英文字符全部用一个字节即8位来表示,欧洲国家的字符则用两个字节即16位来表
示,亚洲国家的字符则用3个字节即24位来表示,这样大大节约了带宽资源,所以utf-8很快成为全世界公认的编码方式。utf-8的8意思是它最少用8位来编码。
8位bit 8bit == 1bytes(字节)
1024bytes == 1kB
1024KB == 1MB
1024MB == 1GB
1024GB == 1TBGBK:国标,只能中国人自己用,,一个中文用16位,两个字节表示。GBK的最后一个字母K的是Kuozhan的缩写。
编码进阶
id 函数查询内存地址
a = 'abc'print(id(a))#输出:2922965348736
is 函数判断内存地址
#在dos命令行下运行python下面代码s1='abc!'s2='abc!'print(s1 is s2)#输出:False
Python小数据池概念:int和str存在小数据池,即 Int 型数据在 -5—256之内的,则他们的内存地址一样。对于 str 型数据,由字母和数字,或者由两者任意组合组成,那么他们的内存地址是一样的。
#int 型i1=257i2=257print(i1 is i2)#输出:False#str型s1='a1b2c1234's2='a1b2c1234'print(s1 is s2)#输出:Trues1='a1b2c1234*'s2='a1b2c1234*'print(s1 is s2)#输出:False
文件的存储和传输:例如在unicode和utf-8和gbk之间,不同的编码方式不能互相识别对方的二进制编码方式,即解码会报错或产生乱码。另外,很重要一点,计算机文件传输和储存是必须使用非unicode得编码方式。而在Python3中,编码方式默认都是unicode,所以要把Python3的文件进行存储或传输,必须转码成其他编码方式才行。所以这里要引入另一个数据类型:二进制数据类型byte
byte:
对于非中文: 表现形式(即我们在屏幕上看到的形式): b'alex' 内部编码: utf-8 gbk,gb2312...(非unicode)可自行设定。
对于中文: 表现形式: b'xe3\xf2\x36\xe3\xf2\x36\'
内部编码: utf-8 gbk,gb2312...(非unicode) 可自行设定。
#byte的定义形式s = 'abcD's1 = b'abcD'print(s.capitalize())print(s1.capitalize())#输出:Abcd b'Abcd'
把unicode编码形式的 str 数据转换成其他编码方式的byte数据,这里用到encode函数
#以utf-8和GBK为对象s = 'abcd'b = s.encode('utf-8')b1 = s.encode('gbk')print(s,type(s))print(b,type(b))print(b1,type(b1))#输出:abcdb'abcd' b'abcd' #对中文编码来说s = '中国'b = s.encode('utf-8')b1 = s.encode('gbk')print(s,type(s))print(b,type(b))print(b1,type(b1))#输出:中国 b'\xe4\xb8\xad\xe5\x9b\xbd' b'\xd6\xd0\xb9\xfa'