天天看点

6、python基础语法——数据类型之字符串

字符串

整数和浮点数

列表

字典

布尔类型

集合,元组,空值

对网络工程师来说,常用的数据类型有字符串(String)、整数(Integer)、列表(List)、字典(Dictionary)、浮点数(Float)、布尔(Boolean)。

1、字符串

字符串即文本,可以用单引号’’、双引号""和三引号’’’ ‘’'表示。

1.1、单引号和双引号

单引号和双引号不可以混用。

>>> a='huawei'
>>> b="cisco"
>>> c='h3c"
  File "<stdin>", line 1
    c='h3c"
          ^
SyntaxError: EOL while scanning string literal
>>> c='h3c'
           
>>> print(a)
huawei
>>> print(b)
cisco
>>> print(c)
h3c
           

除了使用 print()函数,我们还可以在解释器里直接输入变量名来获取它的值,这是编辑器交互模式下特有的,脚本模式做不到。

变量中存在换行符\n,则 print 会执行换行动作,但如果在解释器里直接输入变量名,则解释器会把换行符\n 当作字符串内容的一部分一起返回:

>>> banner="\n\n welcome to openlab.com \n\n"
>>> print(banner)


 welcome to openlab.com


>>> banner
'\n\n welcome to openlab.com \n\n'
           

还可以通过加号+来拼接(Concatenate)字符串:

#!/usr/bin/env python3.8
# coding=utf-8
# 网络工程师,数据中心工程师
a="路由器的接口地址为"
b="192.168.1.254"
print(a+b)

[[email protected] ~]# ./1.py
路由器的接口地址为192.168.1.254
           

注意,在使用加号+将变量拼接合并时,如果其中一个变量为字符串,那么其他所有要与之拼接的变量也都必须为字符串,否则 Python 会报错.

#!/usr/bin/env python3.8
# coding=utf-8
# 网络工程师,数据中心工程师
a="网段192.168.1.0/24下有"
b=200
c="个用户"
print(a+b+c)
[[email protected] ~]# ./1.py
Traceback (most recent call last):
  File "./1.py", line 13, in <module>
    print(a+b+c)
TypeError: can only concatenate str (not "int") to str
           

两种修改方式

#!/usr/bin/env python3.8
# coding=utf-8
# 网络工程师,数据中心工程师
a="网段192.168.1.0/24下有"
b="200"
c="个用户"
print(a+b+c)
[[email protected] ~]# ./1.py
网段192.168.1.0/24有60个客户
           
#!/usr/bin/env python3.8
# coding=utf-8
# 网络工程师,数据中心工程师
a="网段192.168.1.0/24下有"
b=200
c="个用户"
print(a+str(b)+c)
[[email protected] ~]# ./1.py
网段192.168.1.0/24有200个客户
           

1.2三引号

三引号形式的字符串通常用来表示内容较长的文本文字,它最大的好处是如果遇到需要换行的文本,文本内容里将不再需要用到换行符\n。

>>> aaa='''---------------------------------------------
...
... Warning: You are connected to the Cisco systems, incorporated network.
... Unauthorized access and use of this network will be vigorously prosecuted.
...
... ----------------------------------------------------'''
>>> print (aaa)
---------------------------------------------

Warning: You are connected to the Cisco systems, incorporated network.
Unauthorized access and use of this network will be vigorously prosecuted.

----------------------------------------------------
           

1.3与字符串相关的方法与函数

upper是将字符串内容里小写的英文字母转换为大写的英文字母。

lower是将字符串内容里大写的英文字母转换为小写的英文字母。

strip()用来在字符串的开头和结尾移除指定的字符(如字母、数字、空格、换行符\n、标点符号等)。如果没有指定任何参数,则默认移除字符串开头和结尾处的所有空格和换行符\n。

>>> ip="       192.168.10.1   "
>>> ip.strip()
'192.168.10.1'

>>> ip="192.168.10.1\n"
>>> ip
'192.168.10.1\n'
>>> print(ip)
192.168.10.1

>>> ip.strip()
'192.168.10.1'
           

count()用来判断一个字符串内容里给定的字母或数字具体有多少个。

>>> "3.1415926535".count("9")
1
           

len()用来判断字符串内容的长度

>>> a="3.1415926535"
>>> len(a)
12
           

split()将字符串转换成列表,join()将列表转换成字符串。

input()的返回值是字符串,提示用户输入数据与 Python 程序互动。

网络工程师如何在网络运维中使用 split()和 join()。

举例来说,在大中型公司里,IP 地址的划分一般是有规律可循的,某公司有一栋10层楼的建筑, 一楼的IP子网为 192.168.1.0/24, 二楼为192.168.2.0/24,三楼为192.168.3.0/24,依此类推。现在你需要做个小程序,让用户输入任意一个属于公司内网的 IP 地址,然后让 Python 告诉用户这个 IP 地址属于哪一层楼。思路如下:

因为该公司内网 IP 地址的第一段都为 192,第二段都为 168,第四段不管用户输入任何 IP 地址都不影响我们对楼层的判断。换句话说,我们只能从该 IP 地址的第三段来判断是哪一层楼,但是我们要怎样告诉 Python 去判断哪一个数字属于 IP 地址的第三段呢?这时就可以用 split()将用户输入的 IP 地址(字符串)转化成列表,然后通过列表的索引来指向 IP 地址的第三段,代码如下:

>>> floor1 = "192.168.1.1"
>>> floor1_list = floor1.split(".")
>>> print (floor1_list)
['192', '168', '1', '1']
>>> floor1_list[2]
'1'
           

先将’192.168.1.0’赋值给 floor1 这个变量,再对该变量调用 split()方法,然后将返回值赋给另一个变量 floor1_list,注意 split()括号里的“.”表示分隔符,该分隔符用来对字符串进行切片,因为 IP 地址的写法都是 4 个数字用 3 个点“.”分开,所以这里分隔符用的是“.”,因为 split()的返回值是列表,所以我们 print floor1_list 后可以看到,IP 地址的四个数字已经被切片独立开来,分别成为组成 floor1_list 列表的四个元素的其中之一,之后我们就可以通过 floor1_list[2]这种索引的方式来查询该列表的第三个元素,从而得到IP 地址的第三段的数字了,也就是这里的数字 1。

#!/usr/bin/env python3.8
# coding=utf-8
# 网络工程师,数据中心工程师
ip = input("请输入要查询的IP地址:")
ip_list=ip.split(".")
print("该IP地址输入"+ip_list[2]+"楼")
[[email protected] ~]# ./1.py 
请输入要查询的IP地址:192.168.3.1
该IP地址输入3楼
           

join怎么用

以上是思科产品最基本的命令,但是发现少了回车,可以使用 join()将换行符\n 加在每条命令的末尾,注意 join()的返回值是字符串。

>>> "\n".join(commands)
'enable\nconfig terminal\ninterface fastethernet0/1\nno shutdown'
           

把之前的列表 [‘192’, ‘168’, ‘1’, ‘0’]转换回字符串’192.168.1.0’,可以采用如下做法:

".".join(["192","168","1","100"])>>> 
'192.168.1.100'
           

startswith(),endswith(),isdigit(),isalpha()

以上四个函数的返回值都是布尔值,Ture,False,且首字母必须大写

startswith(),用来判断字符串的内容是否以给定的字符串开头

>>> ip="192.168.1.1"
>>> ip.startswith("17")
False
>>> ip.startswith("19")
True
           

endswith()与 startswith()恰好相反,用来判断字符串的内容是否以给定的字符串结尾

>>> ip="172.16.1.1"
>>> ip.endswith(".1")
True
           

isdigit()就是用来判断字符串的内容是否为整数的

>>> aaa="cisco"
>>> aaa.isdigit()
False
           

isalpha()用来判断字符串的内容是否为英文字母

>>> aaa.isalpha()
True
           

注意,isalpha()很严格,只要字符串的内容出现了哪怕一个非英文字母,isalpha()就会返回 False,比如’Parry Wang’(包含了空格)、‘Parry_Wang’(包含了下划线)等。