Python 基础二:运算符和编码

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 = 10
b = 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 = 0
if ( 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 都为 true
2 - 变量 a 和 b 都为 true,或其中一个变量为 true
3 - 变量 a 和 b 有一个不为 true
4 - 变量 a 和 b 都为 true,或其中一个变量为 true
5 - 变量 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 = 10
b = 20
list = [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 = 2
if ( 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 = 20
b = 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 = 30
if ( 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 == 1TB


GBK:国标,只能中国人自己用,,一个中文用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=257
i2=257
print(i1 is i2)
#输出:False

#str型
s1='a1b2c1234'
s2='a1b2c1234'
print(s1 is s2)
#输出:True
s1='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))
#输出:abcd <class 'str'>
           b'abcd' <class 'bytes'>
           b'abcd' <class 'bytes'> 
#对中文编码来说
s = '中国'
b = s.encode('utf-8')
b1 = s.encode('gbk')
print(s,type(s))
print(b,type(b))
print(b1,type(b1))
#输出:中国 <class 'str'>
           b'\xe4\xb8\xad\xe5\x9b\xbd' <class 'bytes'>
           b'\xd6\xd0\xb9\xfa' <class 'bytes'>

 

posted @ 2018-01-22 17:15  半江  阅读(190)  评论(0)    收藏  举报