Python3基础知识的讲解(三)


绪论

在前面几篇文章中,介绍了一些关于Python的相关知识点,当然那些都是比较基础的语法,那么今天,将向大家介绍稍微常用点的语法知识点,有过编程的人都应该清楚,如果要想实现一个功能,那么代码越简单、越容易理解的代码,绝对是上品,那么今天这篇文章将给大家介绍Python的代码简洁、易懂的相关知识点和例子。

主要知识点展示:

  • 字符串的介绍、输入、输出
  • 字符串的下标和切片
  • 字符串的常见操作
  • 列表的介绍
  • 列表循环遍历
  • 列表的常见操作
  • 知识点整合小Demo的展示

一、字符串

1、字符串的介绍、输入、输出

在打开某些网页的时候,有的时候需要你输入账号或者密码什么的,当用户输入完成后,点击提交或者登陆按钮时,这是l浏览器会把你输入的信息传给服务器后,服务器就会对你输入的账号或者密码进行一个验证,其验证的过程就是把存在服务器的账号或者密码拿来进行和你输入的信息进行一个对比,如果相等,那么就认为输入的信息正确,否则就不对,而服务器存储这些信息可以用数据库,比如可以用MySQL等,那么怎样存储带有字符或者其他字符的账号或者密码呢?
答案:字符串

在前面用Python3定义一个变量:a = 100 ,那么这句代码的含义就是,定义了一个变量名为a,其存储的是数字类型,值为100
那么:b = "ZuXia.com",变量b存储的就是字符串类型的值。其实也可以这样写:b = 'ZuXia.com'
总结:在Python3中,如果用双引号或者单引号引起来的数据,就是字符串


字符串的输出
对于字符串的输出,前面提过,这里直接例子展示

    print("="*40)
    name = "changfeng"
    position = "IT讲师"
    address = "重庆市XXXXXX"
    print("="*40)
    print("姓名:%s"%name)
    print("职业:%s"%position)
    print("地址:%s"%address)
    #代码运行后的结果:
    ========================================
    姓名:changfeng
    职业:IT讲师
    地址:重庆市XXXXXX
    ========================================    

字符串的输入
对于字符串的输入,前面其实也提到过,这里也直接上代码吧,是兄弟,上代码,无代码,无兄弟。

  print("*"*40)
  userName = input("请输入你的用户名:")
  print("你输入的用户名是:%s"%userName)
  position = input("请输入你的职业:")
  print("你输入的职业是:%s"%position)
  print("*"*40)
#代码运行后的结果:
****************************************
请输入你的用户名:changfeng
你输入的用户名是:changfeng
请输入你的职业:IT讲师 
你输入的职业是:IT讲师
****************************************


2、字符串的下标和切片
下标
所谓下标,其实就是编号,就好比一个小区里每一个住户都有一个门牌号,比如几栋几单元几号房。那么程序中的标和这个类似。
下标的使用

列表与元组支持下标索引好理解,字符串实际上就是字符的数组,所以也支持下标索引。
如果有字符串:name = 'abcdef',在内存中的实际存储如下:

1.png

如果想取出部分字符,那么可以通过下标的方法,(注意python中下标从 0 开始)
示例如图2:

2.png

切片

切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。
切片的语法:[起始:结束:步长]
注意:选取的区间属于左闭右开型,即从"起始"位开始,到"结束"位的前一位结束(不包含结束位本身)。
我们以字符串为例讲解。
如果取出一部分,则可以在中括号[]中,使用如下代码:

name = "helloworld"
print(name[2:5])#取的是小标为2——4的字符
    

代码运行结果如下如图3:

3.png
    name = "helloworld"
   #如果结束位什么都不写,这就是从开始取到字符串结尾
   print(name[2:])
   程序运行结果:
    lloworld
    name = 'helloworld'

    print(name[1:-1]) # 取 下标为1开始 到 最后第2个  之间的字符
    
    #程序运行结果:
    elloworl
>>> name = 'helloworld'
>>> name
'helloworld'
>>> name[1:5]
'ello'
>>> name[1:]
'elloworld'
>>> name[2:-1]
'lloworl'
>>> name[:]
'helloworld'
>>> name[2::2]
'lool'
>>> name[::-1]
'dlrowolleh'
>>> 
#总结:对于切片,要注意选取的区间属于左闭右开型,即从"起始"位开始,到"结束"位的前一位结束(不包含结束位本身),还有就是步长默认是1,上面最后一个例子就是对字符串倒序输出。切片,需要大家多去练习。

字符串常见操作
对于字符串操作,特别的多,这里就不一一讲完,其实有很多都是顾名思义的。
** 如有字符串:mystr = "a boy can do everything for girl but do everything need to try your best"**

下面的常见操作,我将采用Python3交互解释器演示

<1>find
检测 str 是否包含在 mystr中,如果是返回开始的索引值,否则返回-1
用法:mystr.find(str, start=0, end=len(mystr))
第一个是需要查找的字符串,第二个参数是起始位置,第三个是结束位置

>>> mystr = 'a boy can do everything for girl but do everything need to tyr your best'
>>> mystr
'a boy can do everything for girl but do everything need to tyr your best'
>>> mystr.find('everything')
13
>>> >>> mystr
'a boy can do everything for girl but do everything need to tyr your best'
>>> mystr.find("changfeng")
-1
>>> 

<2>index
跟find()方法一样,只不过如果str不在 mystr中会报一个异常.

mystr.index(str, start=0, end=len(mystr))
第一个是需要查找的字符串,第二个参数是起始位置,第三个是结束位置

>>> mystr
'a boy can do everything for girl but do everything need to tyr your best'
>>> mystr.index("do")
10
>>> mystr.index("girl",0,15)
>>> #这就是一个异常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found
>>> mystr.index("but",0,25)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found
>>> 

<3>count
返回 str在start和end之间 在 mystr里面出现的次数

mystr.count(str, start=0, end=len(mystr))

>>> mystr
'a boy can do everything for girl but do everything need to tyr your best'
>>> mystr.count("everything")
2
>>>

<4>replace
把 mystr 中的 str1 替换成 str2,如果 count 指定,则替换不超过 count 次.

mystr.replace(str1, str2, mystr.count(str1))

>>> name = 'ha ha hello hello world'
>>> name
'ha ha hello hello world'
>>> name.replace("ha","hello")
'hello hello hello hello world'
>>> name
'ha ha hello hello world'
>>> name.replace("hello","changfeng",1)
'ha ha changfeng hello world'
>>> 

<5>split

以 str 为分隔符切片 mystr,如果 maxsplit有指定值,则仅分隔 maxsplit 个子字符串

mystr.split(str=" ", 2)

>>> name
'ha ha hello hello world'
>>> name.split(" ")
>>> #全部分割
['ha', 'ha', 'hello', 'hello', 'world']
>>> name
'ha ha hello hello world'
>>> name.split(" ",2)
>>> #maxsplit有指定值为2,则只把前面两个进分割,后面就没有,得到的结果这个叫列表,后面提到
['ha', 'ha', 'hello hello world']
>>> 

**<6>capitalize **
把字符串的第一个字符大写

mystr.capitalize()

>>> name
'ha ha hello hello world'
>>> name.capitalize()
'Ha ha hello hello world'
>>> 

** <7>title**
把字符串的每个单词首字母大写

>>> name
'ha ha hello hello world'
>>> name.title()
'Ha Ha Hello Hello World'
>>> 

** <8>startswith**
检查字符串是否是以 obj 开头, 是则返回 True,否则返回 False

mystr.startswith(obj)

>>> name
'ha ha hello hello world'
>>> name.startswith("ha")
True
>>> name.startswith("Ha")
False
>>> 

** <9>endswith**
检查字符串是否以obj结束,如果是返回True,否则返回 False.

mystr.endswith(obj)

>>> name
'ha ha hello hello world'
>>> name.endswith("world")
True
>>> name.endswith("ld")
True
>>> name.endswith("d")
True
>>> name.endswith("h")
False
>>> 

** <10>lower**
转换 mystr 中所有大写字符为小写

mystr.lower()
** <11>upper**
转换 mystr 中的小写字母为大写

mystr.upper()

>>> name
'ha ha hello hello world'
>>> name.upper()
'HA HA HELLO HELLO WORLD'
>>> name = "HA WORLD hello python"
>>> name.lower()
'ha world hello python'
>>> 

** <12>rjust**
返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串

mystr.rjust(width)
** <13>ljust**
返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串
** <14>center**
返回一个原字符串居中,并使用空格填充至长度 width 的新字符串

mystr.center(width)

>>> mystr
'hello python life is short use python'
>>> mystr.ljust(50)
'hello python life is short use python             '
>>> mystr.rjust(50)
'             hello python life is short use python'
>>> mystr.center(25)
'hello python life is short use python'
>>> mystr.center(50)
'      hello python life is short use python       '
>>> 

** <15>lstrip**
删除 mystr 左边的空白字符

mystr.lstrip()
** <16>rstrip**

删除 mystr 字符串末尾的空白字符

mystr.rstrip()
** <17>strip**
删除mystr字符串两端的空白字符

>>> a = "\n\t zuxia \t\n"
>>> a.strip()
'zuxia'

** <18>rfind**
类似于 find()函数,不过是从右边开始查找.

mystr.rfind(str, start=0,end=len(mystr) )
** 后面这几个示例就不是举例了,当然,还有一些操作,这里就不多说了,大家可以在用的时候通过点语法进行查看**
** 3、列表的介绍**

前面我们已经介绍了字符串可以用来存储一串信息,那么如果,我们现在需要存储我们班的学生的姓名,那么这个应该怎么存储啊?当然,有办法,比如,用100个变量来进行存储,这是可以的,但是这样违背了Python3简洁、动态的高级程序特点,那么怎么办?
答案:列表

列表的格式

变量A的类型为列表

namesList = ['老王','老李','老郑']

比C语言的数组强大的地方在于列表中的元素可以是不同类型的

testList = [1, 'a']

怎么打印一个列表
上面说了,切片对列表也是可以用的。所以

namesList = ['老王','老李','老郑']
print(nameList(0))
print(nameList(1))
print(nameList(2))
程序运行结果:
老王
老李
老郑

** 列表的遍历**
1、用for循环进行遍历

name = ["laowang","laoli","laoliu"]
for name_temp in name:
    print(name_temp)
    程序运行结果:
    laowang
    laoli
    laoliu

2、利用while循环进行遍历

    name = ["laowang","laoli","laoliu"]
    i = 0
    while(i < len(name))
    print(name_temp[i])
    i+=1
    程序运行结果:
    laowang
    laoli
    laoliu

** 列表的增删改查操作**
添加元素("增"append, extend, insert)

append
通过append可以向列表添加元素

    A = ['xiaoWang','xiaoZhang','xiaoHua']

    print("-----添加之前,列表A的数据-----")
    for tempName in A:
        print(tempName)

    #提示、并添加元素
    temp = input('请输入要添加的学生姓名:')
    A.append(temp)

    print("-----添加之后,列表A的数据-----")
    for tempName in A:
        print(tempName)
    #程序运行结果:
    -----添加之前,列表A的数据-----
    xiaoWang
    xiaoZhang
    xiaoHua
    请输入要添加的学生姓名:laowang
    -----添加之后,列表A的数据-----
    xiaoWang
    xiaoZhang
    xiaoHua
    laowang

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]

** 修改列表中的元素**
修改元素的时候,要通过下标来确定要修改的是哪个元素,然后才能进行修改

#定义变量A,默认有3个元素
    name = ['laowang','laoliu','laoyu']

    print("-----修改之前,列表A的数据-----")
    for tempName in name:
        print(tempName)

    #修改元素
    name[1] = 'xiaoLu'

    print("-----修改之后,列表A的数据-----")
    for tempName in name:
        print(tempName)
    #程序运行结果:
    -----修改之前,列表A的数据-----
    laowang
    laoliu
    laoyu
    -----修改之后,列表A的数据-----
    laowang
    xiaoLu
    laoyu

** 裂变删除元素("删"del, pop, remove)**
比如比现实生活中,如果某位同学调班了,那么就应该把这个条走后的学生的姓名删除掉;在开发中经常会用到删除这种功能。

列表元素的常用删除方法有:

  • del:根据下标进行删除
  • pop:删除最后一个元素
  • remove:根据元素的值进行删除

1、利用del进行删除元素

    movieName = ['同桌的你','前任3','第一滴血','黑客帝国','魔戒','速度与激情4']

    print('------删除之前------')
    for tempName in movieName:
        print(tempName)

    del movieName[2]

    print('------删除之后------')
    for tempName in movieName:
        print(tempName)
    #程序运行结果:
    ------删除之前------
    同桌的你
    前任3
    第一滴血
    黑客帝国
    魔戒
    速度与激情4
    ------删除之后------
    同桌的你
    前任3
    黑客帝国
    魔戒
    速度与激情4

2、利用pop删除元素

    movieName = ['同桌的你','前任3','第一滴血','黑客帝国','魔戒','速度与激情4']

    print('------删除之前------')
    for tempName in movieName:
        print(tempName)

    movieName.pop()

    print('------删除之后------')
    for tempName in movieName:
        print(tempName)
    #程序运行结果:
    ------删除之前------
    同桌的你
    前任3
    第一滴血
    黑客帝国
    魔戒
    速度与激情4
    ------删除之后------
    同桌的你
    前任3
    第一滴血
    黑客帝国
    魔戒

3、利用remove删除元素

    movieName = ['同桌的你','前任3','第一滴血','黑客帝国','魔戒','速度与激情4']

    print('------删除之前------')
    for tempName in movieName:
        print(tempName)

    movieName.remove("黑客帝国")

    print('------删除之后------')
    for tempName in movieName:
        print(tempName)
    #程序运行结果:
    ------删除之前------
    同桌的你
    前任3
    第一滴血
    黑客帝国
    魔戒
    速度与激情4
    ------删除之后------
    同桌的你
    前任3
    第一滴血
    魔戒
    速度与激情4

** 列表的排序方法**
列表的排序包括两种

  • 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]

5、知识点整理小Demo

    #1、功能模块的选择
    print("*"*40)
    print("1、添加学员姓名")
    print("2、删除学员信息")
    print("3、修改学员信息")
    print("4、查看学员信息")
    print("5、退出管理系统")
    print("*"*40)
    #定义一个列表,用来存储学员姓名
    names = []
    while 1:
        #2、监听用户功能选择
        manager = input("请输入你要选择的功能:")
        manager_num = int(manager)
        if manager_num == 1:
            name = input("请输入你要添加学员的姓名:")
            if len(names) == 0:
                names.append(name)
                print("添加成功")
            else:
                if  name in names:
                    print("该学员已经存在")
                else:
                    names.append(name)
                    print("添加成功")
                    print(names)
        elif manager_num == 2:
            name1 = input("请输入你要删除的学员姓名:")
            if name1 in names:
            #   print("已经找到学员")
                names.remove(name1)
                print("删除成功")
                print(names)
            else:
                print("系统内,并没有找到这个学员信息")
        elif manager_num ==3:
            name2 = input("请输入你要修改的学员的姓名:")
            if name2 in names:
                #print("已经查询到学员信息,可以进行修改")
                name3 = input("请输入你修改后的信息:")
                i = 0
                while(i<len(names)):
                    if names[i] == name2:
                        names[i] = name3
                        print("修改成功")
                        break
                    i+=1
                print(names)
            else:
                print("系统并没有此学员信息,删除失败")
        elif manager_num == 4:
            name4 = input("请输入你需要查看学员的姓名:")
            if name4 in names:
                print("经查询,系统里面有这个学员信息,查询成功")
            else:
                print("经查询,系统里面没有这个学员信息,查询失败")
        elif manager_num ==5:
            break
        else:
            print("你输入的功能选择有误,请确认后重新输入")

程序运行结果:

****************************************
1、添加学员姓名
2、删除学员信息
3、修改学员信息
4、查看学员信息
5、退出管理系统
****************************************
请输入你要选择的功能:1
请输入你要添加学员的姓名:laowang
添加成功
请输入你要选择的功能:1
请输入你要添加学员的姓名:laoli
添加成功
['laowang', 'laoli']
请输入你要选择的功能:2
请输入你要删除的学员姓名:laoli
删除成功
['laowang']
请输入你要选择的功能:1
请输入你要添加学员的姓名:laoliu
添加成功
['laowang', 'laoliu']
请输入你要选择的功能:1
请输入你要添加学员的姓名:laozhao
添加成功
['laowang', 'laoliu', 'laozhao']
请输入你要选择的功能:3
请输入你要修改的学员的姓名:laozhao
请输入你修改后的信息:laoyu
修改成功
['laowang', 'laoliu', 'laoyu']
请输入你要选择的功能:4
请输入你需要查看学员的姓名:laoliu
经查询,系统里面有这个学员信息,查询成功
请输入你要选择的功能:5

总结

这篇文章主要就对字符串、列表进行了一个讲解,内容有点多,大家下来多练习就可以,希望看到的读者能点个喜欢,非常的感谢,祝你学业有成、事业蒸蒸日上。你们的支持就是我最大的动力。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350