Python学习第二天

一、一些概念

1.链式赋值

同一个对象赋值给多个变量。e.g. x=y=123 -->x=123;y=123

2.系列解包赋值

        给对应相同个数的变量(个数必须保持一致)e.g. a,b,c=4,5,6  -->a=4;b=5;c=6

Tips: 使用系列解包赋值实现变量交换(a,b=b,a)

>>> a,b=1,2
>>> a,b=b,a
>>> print(a,b)
2 1

3.常量

        Python不支持常量,无语法规则限制。仅能约定常量的命名规则(全大写字母,多单词间用_隔开),以及在程序的逻辑上不对常量的值作出修改。

>>> MAX_SPEED = 120
>>> print(MAX_SPEED)
120
>>> MAX_SPEED = 140 #实际是可以改的。只能逻辑上不做修改。
>>> print(MAX_SPEED)
140

二、最基本内置数据类型(type)

① 整型;②浮点型;③布尔型;④字符串型

1.数字(整数和浮点数)

 Tips:1.0不能做除数。

         2.divmod()函数可以同时得到商和余数,返回的是一个元组。

             e.g. >>> divmod(13,3)
                           (4, 1)

2.整数

         Python3 中,int 可以存储任意大小的整数。(Python2 中,int 是32 位,long 类型是64 位,存在限制),故Python3可以做超大数的计算,而不会造成“整数溢出”,特别适合科学运算。

Tips:   Googol 是Google 最初的名字,意为10的100次方。

        Ⅰ.整数有四种进制:①10进制;
                                         ②0b 或0B,二进制0 1
                                         ③0o 或0O,八进制0 1 2 3 4 5 6 7
                                         ④0x 或0X,十六进制0 1 2 3 4 5 6 7 8 9 a b c d e f
                                          后三者方便“位运算”操作

        Ⅱ.int()实现类型转换:①浮点数直接舍去小数部分。e.g.  int(9.9)结果是9;
                                            ②布尔值True 转为1,False 转为0。e.g.  int(True)结果是1;
                                            ③字符串符合整数格式(浮点数格式不行)则直接转成对应整数,否则报错。

>>>int("456")#整数格式直接变整数
456
>>>int("456abc")#有字母不行
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    int("456abc")
ValueError: invalid literal for int() with base 10: '456abc'
>>>int("456.78")#浮点格式不行
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    int("456.78")
ValueError: invalid literal for int() with base 10: '456.78'

        Ⅲ.自动转型:整数和浮点数混合运算时,表达式结果自动转型成浮点数。
                              e.g.  2+8.0 的结果是10.0


3.浮点数(float)

        Ⅰ.科学计数法表示(内存中同样)。e.g.   3.14 / 314E-2 / 314e-2

        Ⅱ.类型转换和四舍五入:①float().   注意:运算后,对象并未改变,而是生成了新的对象;

                                                ②浮点数格式字符串同样可以转换;

                                                ③round(value)可以返回四舍五入的值,同样不会改变原有值,而是产生新的值。

4.增强型赋值运算符

 Tips:    “+=”中间不能加空格!

5.时间的表示

       计算机中, “unix 时间点”:“1970 年1 月1 日00:00:00”(相当于这是一个基准点),其余时间以毫秒(1/1000 秒)进行计算。

        Python 中可以通过time.time() 获得当前时刻,返回的值是以秒为单位,带微秒(1/1000 毫秒)精度的浮点值。例如:1530167364.8566。注:使用前需导入import time。

6.定义多点坐标_绘出折线_并计算起始点和终点距离

import turtle
import math

#定义多个点的坐标
x1,y1=100,100
x2,y2=100,-100
x3,y3=-100,-100
x4,y4=-100,100

#绘制折线
turtle.penup()
turtle.goto(x1,y1)
turtle.pendown()
turtle.goto(x2,y2)
turtle.goto(x3,y3)
turtle.goto(x4,y4)

#计算起始点和重点距离
distance=math.sqrt((x1-x4)**2+(y1-y4)**2)
turtle.write(distance)

 Tips:  开方需要引入math中的sqrt(Value)

7.布尔值

        Python2:没有布尔值,直接用数字0 表示False,用数字1 表示True。
        Python3:True 和False 被定义为关键字,但本质还是1 和0,甚至可以和数字相加

8.比较运算符 

 9.逻辑运算符

#短路现象:30/0应报错,但或运算中,若a为True,后面的不运算
a=True
a or 30/0

10.同一运算符

        用于比较两个对象的存储单元,实际比较的是对象的地址。

        ①is:判断两个标识符是不是引用同一个对象;
        ②is not:判断两个标识符是不是引用不同对象。

Tips:1.is 与== 区别:
        is 用于判断两个变量引用对象是否为同一个,既比较对象的地址
        == 用于判断引用变量引用对象的是否相等,默认调用对象的__eq__()方法。

           2.整数缓存问题:
            Python在命令中对比较小的整数对象进行缓存(范围为[-5, 256]);在Pycharm 或者保存为文件执行时,范围是[-5,任意正整数]。        全局解释器范围
                          命令                     文件执行

 Tips:is 运算符比== 效率高(==存在调用__eq__()),在变量和None 进行比较时,应该使用is。

三、字符串

 逻辑思维的重要性远远超过数学能力

        字符串的本质是:字符序列。Python 的字符串是不可变的,我们无法对原字符串做任何修改,且不支持单字符类型,单字符也是作为一个字符串使用的。

1.字符串的编码

        Python3 的字符默认为16 位Unicode 编码,ASCII 码是Unicode 编码的子集。(Unicode可以表示世界上任何书面语言的字符。)
        使用内置函数ord()可以把字符转换成对应的Unicode 码;
        使用内置函数chr()可以把十进制数字转换成对应的字符。

2.创建字符串

        ①通过单引号或双引号创建字符串。

        小技巧:a = "I'm a teacher!"字符串包含‘’,使用“”来创建,反之同样。

        ②连续三个单引号或三个双引号,可以帮助我们创建多行字符串。
        >>> resume = ''' name="gaoqi"
        company="sxt" age=18
        lover="Tom"'''

3.空字符串和len()函数

        Python 允许空字符串的存在,不包含任何字符且长度为0。
        len()用于计算字符串含有多少字符。

4.转义字符

        使用“\+特殊字符”,实现某些难以用字符表示的效果。

 5.字符串拼接

        1. 可以使用+将多个字符串拼接起来。例如:’aa’+ ’bb’ ==>’aabb’。
            (1) 如果+两边都是字符串,则拼接。
            (2) 如果+两边都是数字,则加法运算。
            (3) 如果+两边类型不同,则抛出异常。
        2. 可以将多个字面字符串直接放到一起实现拼接。例如:’aa’’bb’==>’aabb’
         注:产生的是新的对象

6.字符串复制

        使用*可以实现字符串复制。

>>> a = 'Sxt'*3
>>> a
'SxtSxtSxt'

7.不换行打印(end="")

        调用print 时,会自动打印一个换行符。若不想换行打印,可以自己通过参数end = “任意字符串”。实现末尾添加任何内容:print("sxt",end=' '),前面双引号里面是打印的东西,后面是参数。

8.从控制台读取字符串input()

        使用input()从控制台读取键盘输入的内容。

        >>> myname = input("请输入名字:")
        请输入名字:school
        >>> myname
        'school'

9.str()实现数字转型字符串

        将其他数据类型转换为字符串。
        str(5.20) ==> ‘5.2’       str(3.14e2)==>’314.0’        str(True) ==> ‘True’

10.使用[]提取字符

        字符串中每个字符都有一个索引编号,可以在字符串后面添加[],在[]里面指定偏移量,来提取该位置的单个字符。

        正向搜索:
                最左侧第一个字符,偏移量是0,第二个偏移量是1,以此类推。直到len(str)-1为止。
        反向搜索:
                最右侧第一个字符,偏移量是-1,倒数第二个偏移量是-2,以此类推,直到-len(str)为止。
           a        b        c        d
正向:0        1        2        3
反向:-4      -3       -2       -1                    超范围报错

>>>a='abcdefghijklmnopqrstuvwxyz'
>>>a
'abcdefghijklmnopqrstuvwxyz'
>>>a[0]
'a'
>>>a[-26]
'a'

11.replace()实现字符串替换

        字符串不可改变,有时候需要替换某些字符时,只能通过创建新的字符串来实现。

>>>a = 'abcdefg'
>>>a
'abcdefg'
>>>a[0] = 'w'#此处相当于修改字符串中的字符,字符串不可修改
Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    a[0] = 'w'
TypeError: 'str' object does not support item assignment



>>>a = '123456789'
>>>a
'123456789'
>>>a = 'abcdefghijklmnopqrstuvwxyz'#这里是可以变的,因为只是把不同的对象给到变量
>>>a
'abcdefghijklmnopqrstuvwxyz'
>>>a = a.replace('c','王')
'ab王defghijklmnopqrstuvwxyz'

        实际上我们是创建了新的字符串对象,并指向了变量a,而不是修改了以前的字符串。

 12.字符串切片slice 操作

        快速的提取子字符串。标准格式为:[起始偏移量start:终止偏移量end:步长step] (包头不包尾)

        三个量为正数的情况:

         三个量为负数的情况:

        切片操作时,起始偏移量和终止偏移量不在[0,字符串长度-1]这个范围,也不会报错。起始偏移量小于0,则会当做0,终止偏移量大于“长度-1”会被当成-1。

        小练习:将”sxtsxtsxtsxtsxt”字符串中所有的s 输出 -->  ”sxtsxtsxtsxtsxt”[::3]

13.split()分割和join()合并

        split()可以基于指定分隔符将字符串分隔成多个子字符串(存储到列表中)。如果不指定分隔符,则默认使用空白字符(换行符/空格/制表符)。

>>> a = "to be or not to be"
>>> a.split()
['to', 'be', 'or', 'not', 'to', 'be']
>>> a.split('be')
['to ', ' or not to ', '']

        join()的作用和split()作用刚好相反,用于将一系列子字符串连接起来。

>>> a = ['sxt','sxt100','sxt200']
>>> '*'.join(a)
'sxt*sxt100*sxt200'

        Tips:join()和+的使用注意:使用字符串拼接符+,会生成新的字符串对象,因此不推荐使用+来拼接字符串。推荐使用join 函数,因为join 函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝,仅新建一次对象

        测试+拼接符和join()的效率:

import time

time1=time.time()# +的起始时间

a=""
for i in range(10000000):
    a += "sxt"

time2=time.time()# +的终止时间

print("运算时间:"+str(time2-time1))

time3=time.time()# join()的起始时间

li=[]
for i in range(10000000):
    li.append("sxt")

a="".join(li)

time4=time.time()# join()的终止时间

print("运算时间:"+str(time4-time3))

最终结果:运算时间:19.856602668762207
                  运算时间:0.6600668430328369

14.字符串驻留机制和字符串比较

        仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中。
        标识符规则的字符串:仅包含下划线(_)、字母和数字。启用字符串驻留机制

>>> a = "abd_33"#此字符串符合驻留机制
>>> b = "abd_33"
>>> a is b
True#             符合驻留机制,故为同一对象
>>> c = "dd#"#    此字符串不符合驻留机制
>>> d = "dd#"
>>> c is d
False#            不符合驻留机制,故不是同一对象

        可以直接使用==,!=对字符串进行比较,是否含有相同的字符。(Value值)

        成员操作符:in /not in 关键字,判断某个字符(子字符串)是否存在于字符串中。

>>>a = "abcdefg"
>>>"b" in a
True
>>>"bcd" in a
True
>>>"ddd" in a
False

15.字符串一些常用方法

        Ⅰ.常用查找方法

        a='''我是高淇,今年18 岁了,我在北京尚学堂科技上班。我的儿子叫高洛希,他6 岁了。我是一个编程教育的普及者,希望影响6000 万学习编程的中国人。我儿子现在也开始学习编程,希望他18 岁的时候可以超过我'''

         Tips:a.isalnum(),汉字也是字母

        Ⅱ.去除首尾信息

        strip()去除字符串首尾指定信息。通过lstrip()去除字符串左边指定信息,rstrip()去除字符串右边指定信息。不指定默认为空格。

>>> "*s*x*t*".strip("*")
's*x*t'
>>> "*s*x*t*".lstrip("*")
's*x*t*'
>>> "*s*x*t*".rstrip("*")
'*s*x*t'
>>> " sxt ".strip()
'sxt'

        Ⅲ.大小写转换

        a = "gaoqi love programming, love SXT"

         Ⅳ.格式排版

        center()、ljust()、rjust()这三个函数用于对字符串实现排版。

>>> a="SXT"
>>> a.center(10,"*")#一共10个字符,字符串居中,左右填补*
'***SXT****'
>>> a.center(10)#一共10个字符,字符串居中,左右填补空格(默认)
' SXT '
>>> a.ljust(10,"*")#一共10个字符,字符串左对齐,右边填补*
'SXT*******'

        Ⅴ.其他方法

        (1)isalnum() 是否为字母或数字
        (2)isalpha() 检测字符串是否只由字母组成(含汉字)。
        (3)isdigit() 检测字符串是否只由数字组成。
        (4)isspace() 检测是否为空白符          空白符:空格,\t(制表符),\n(换行符)
        (5)isupper() 是否为大写字母
        (6)islower() 是否为小写字母

16.字符串格式化

        Ⅰ.format()基本用法

        格式化字符串的函数str.format(),不限个参数,位置可以不按顺序。基本语法是通过{} 和: 来代替以前的% 。

        {索引}/{参数名},两种形式直接映射参数值。

>>> a = "名字是:{0},年龄是:{1}"     #{0}和{1}充当占位符角色,设定好格式,为后续填充占位
                                    #但有顺序
>>> a.format("高淇",18)             #把高淇和18填入上述占位符位置
'名字是:高淇,年龄是:18'
>>> a.format("高希希",6)            #把高希希和6填入上述占位符位置
'名字是:高希希,年龄是:6'
>>> b = "名字是:{0},年龄是{1}。{0}是个好小伙"     #同样数字的占位符使用同样的值
>>> b.format("高淇",18)
'名字是:高淇,年龄是18。高淇是个好小伙'
>>> c = "名字是{name},年龄是{age}"      #使用参数名来标识,不用关注顺序
>>> c.format(age=19,name='高淇')
'名字是高淇,年龄是19'

        Ⅱ.填充与对齐

        二者常一起使用。
        ^、<、>分别是居中左对齐右对齐,后面带宽度;
        :号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充。

>>> "{:*>8}".format("245")              #:后为信息,*为用*填充,>为右对齐,8为8个字符
'*****245'
>>> "我是{0},我喜欢数字{1:*^8}".format("高淇","666")
'我是高淇,我喜欢数字**666***'            #:后为信息,*为用*填充,^为居中,8为8个字符

        Ⅲ.数字格式化

        浮点数通过f,整数通过d 进行需要的格式化。

>>> a = "我是{0},我的存款有{1:.2f}"       #.2f表示2位有效数字
>>> a.format("高淇",3888.234342)
'我是高淇,我的存款有3888.23'

 17.可变字符串

         需要原地修改字符串,可以使用io.StringIO 对象或array 模块。

>>> import io
>>> s = "hello, sxt"
>>> sio = io.StringIO(s)              #可变字符串
>>> sio
<_io.StringIO object at 0x02F462B0>
>>> sio.getvalue()                    #获取字符串的值
'hello, sxt'
>>> sio.seek(7)                       #指针移动到修改的位置(0开始)
7
>>> sio.write("g")                    #改为g
1
>>> sio.getvalue()
'hello, gxt'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值