一.python基本数据类型
1. 背景
面试题案例: 123和“123”一样么?
- 从数字角度讲
- 从程序语言的识别来讲
>>> a = 123
>>> stra = "123"
>>> a == stra
False
>>> print a
123
>>> print stra
123
2.数字
(1)整型
>>> num1 = 123
>>> type(num1)
<type 'int'>
>>> type(123)
<type 'int'>
In [1]: num =1
In [2]: type(num)
Out[2]: int ####当输入一个数时,默认为数据类型为整型
(2)长整形
In [3]: num =111111111111111111111111111111111111
In [4]: type(num)
Out[4]: long ####当输入一个数比较大时,默认为数据类型为长整型
In [5]: num =1
In [6]: type(num)
Out[6]: int
In [7]: num =1L ###当输入一个数后加了“L”时,强制定义为长整型
In [8]: type(num)
Out[8]: long
3.浮点型:表示小数
In [9]: a=12e9
In [10]: print a
12000000000.0 ####12e9 表示12成以10的九次方,类型时浮点型
In [11]: type(a)
Out[11]: float
4.复数类型:python对复数提供内嵌支持,eg:3.14j, 8.32e-36j(几乎用不到)
>>> c = 3.14
>>> type(c)
<type 'float'>
>>> c = 3.14j
>>> type(c)
<type 'complex'>
二 字符串类型
1.字符串的定义
# 字符串定义的第一种方式:
>>> str1 = 'our company is westos'
# 字符串定义的第二种方式:
>>> str2 = "our company is westos"
# 字符串定义的第三种方式:
>>> str3 = """our company iswestos"""
>>> type(str1)
<type 'str'>
>>> type(str2)
<type 'str'>
>>> type(str3)
<type 'str'>
2.转义符号
一个反斜线加一个单一字符可以表示一个特殊字符,通常是不可打印的字符
\n: 代表换行符 \": 代表双引号本身
\t: 代表tab符 \': 代表单引号本身
>>> say = 'let\'s go'>>> say ##### \': 代表单引号本身
"let's go"
>>> say = "let's go "
>>> say
"let's go "
>>> mail = "tom: hello i am westos "
>>> print mail
tom: hello i am westos
>>> mail = "tom:\n hello\n i am westos " #####\n: 代表换行符
>>> print mail
tom:
hello
i am westos
In [13]: print '\hello\n'
\hello
In [14]: print 'hello\n'
hello ####\n 表示换行
In [15]: print '\t hello\n'
hello #####\t表示留出每行前面的几个字符 \t: 代表tab符
3.三重引号
块注释:多行代码注释
函数的doc文档:讲函数时会说到
字符串格式化
>>> mail = """tom:
... i am jack
... good luck
... """ ####块注释
>>> print mail
tom:
i am jack
good luck
>>> mail
'tom:\n\ti am jack\n\tgood luck\n'
4.字符串操作预览
字符串属于序列,序列支持的操作如下:
索引 切片
判断子串 重复
连接 计算长度索引
(1)字符串索引
索引(s[i] ):获取特定偏移的元素。给出一个字符串,可输出任意一个字符,如果索引为负数,就是相当于从后向前数。
索引理解
字符串 h e l l o \n
索引 0 1 2 3 4 5
索引 -6 -5 -4 -3-2 -1
>>> a = 'abcde'
>>> type(a)
<type 'str'>
>>> a[0]
'a'
>>> a[1]
'b'
>>> a[3]
'd'
>>> a[0]+a[1]
'ab'
>>> a[0]+a[2]
'ac'
In [16]: a='hello westos'
In [17]: a[1] ###给hello westos每个字符编号从0开始(包括空格),输出第1个字符
Out[17]: 'e'
In [18]: a[6] ####输出第6个字符
Out[18]: 'w'
(2)字符串切片
切片S[i:j]提取对应的部分作为一个序列:
上边界并不包含在内;
如果没有给出切片的边界,切片的下边界默认为0,上边界为字符串的长度;
扩展的切片S[i:j:k],其中i,j含义同上,k为递增步长;
s[:]获取从偏移量为0到末尾之间的元素,是实现有效拷贝的一种方法
>>> a
'abcde'
>>> a[1:5:2] //从第1至5个字符之间每隔两个字母切取
'bd'
>>> a[1:5] //代表切片取出第2个到第4个
'bcde'
>>> a[:5] //从头取
'abcde'
>>> a[4:] //取到结尾
'e'
>>> a[4:1] //python中默认是从左向右取值
''
>>> a[4:1:-1] //当步长为-1时,从右向左取值
'edc'
>>> a[:]'abcde'
>>> a[-1]
'e'
>>> a[-4:-1] //代表倒数第2个到倒数第4个切片
'bcd'
>>> a[-2:-4]
''
>>> a[-2:-4:1]
''
>>> a[-2:-4:-1]
'dc
In [19]: a[0:5] ####输出从0到5 个字符
Out[19]: 'hello'
(3)判断子符串
判断一个sub字符串是不是属于s字符串:
sub in s ####字符属于s字符串
sub not in s ####字符不属于s字符串
截图:
(4)重复、连接及计算长度
In [7]: print '=='*10 ######双等号重复10遍
====================
In [8]: print 'hello'+'linux' ####链接hello和linux
hellolinux
In [9]: s = 'linux'
In [10]: len(s) #####计算s的长度
Out[10]: 5
(5)字符串的类型转换
str(obj) 将其他类型内容转换为字符串
int(obj) 将字符串转换为为整数
float(obj) 将字符串转换为浮点型
long(obj) 将字符串转换为长整型
(6)字符串常用操作:
In [19]: s = 'westos'
In [20]: s. (+tab键)
s.capitalize s.format s.isupper s.rindex s.strip
s.center s.index s.join s.rjust s.swapcase
s.count s.isalnum s.ljust s.rpartition s.title
s.decode s.isalpha s.lower s.rsplit s.translate
s.encode s.isdigit s.lstrip s.rstrip s.upper
s.endswith s.islower s.partition s.split s.zfill
s.expandtabs s.isspace s.replace s.splitlines
s.find s.istitle s.rfind s.startswith
####1. s.capitalize()- 将字符串首字母大写,并返回新的首字母大写后的字符串;
In [20]: s.capitalize()
Out[20]: 'Westos'
In [21]: help (s.capitalize) ###查看s.capitalize()的用法
#####2. s.center(width[,fillchar])- 返回一个长为width的新字符串,在新字符串中原字符居中,其他部分用fillchar指定的符号填充,未指定时通过空格填充。
In [26]: s = "welcome"
In [27]: s.center(10,'*') ####返回一个长为10的新字符串,其他部分用 '*' 填充
Out[27]: '*welcome**'
In [28]: s.center(20,'*') ####返回一个长为20的新字符串,其他部分用 '*' 填充
Out[28]: '******welcome*******'
In [29]: s.center(20)
Out[29]: ' welcome ' ####返回一个长为20的新字符串,其他部分用空格填充
######3.str.count(sub[, start[, end]]) -> int- 返回sub在s中出现的次数,如果start与end指定,则返回指定范围内的sub出现次数。
In [30]: s= "i like fentiao"
In [31]: s.count("i") #####整个"i like fentiao"中有几个'i'
Out[31]: 3
In [32]: s.count("i",1) #### 在" like fentiao"中有几个'i'
Out[32]: 2
In [34]: s.count("i",1,5) ####在" like"中有几个'i'
Out[34]: 1
#######4. s.endswith(suffix[, start[, end]])- 判断字符串是否以suffix结束,如果start和end指定,则返回str中指定范围内str子串是否以suffix结尾,如果是,返回True;否则返回False
In [35]: s= "i like fentiao"
In [36]: s.endswith('iao') #####字符串是否以iao结束
Out[36]: True
In [37]: s.endswith('iao',1,5) #####在" like"中,字符串是否以iao结束,
Out[37]: False
In [38]: s.endswith('iao',1,20) ####整个"i like fentiao"中,字符串是否以iao结束,
Out[38]: True
#######5. s.startswith(prefix[, start[, end]])- 判断字符串是否以prefix开始,如果start和end指定,则返回s中指定范围内s子串是否以prefix结尾,如果是,返回True;否则返回False
In [39]: s.startswith('iao',1,5) #####在"like"中,字符串是否以iao开始
Out[39]: False
In [40]: s.startswith('i',0,5) #####在"i like"中,字符串是否以i开始
Out[40]: True
####6.s.find(sub[,start[,end]]) - 判断sub是否在s中,存在返回索引值,不存在返回-1.
In [41]: s= "i like fentiao"
In [43]: s.find('i') #####i是否在s中,存在返回索引值0
Out[43]: 0
In [44]: s.find('o') #####o是否在s中,存在返回索引值13
Out[44]: 13
In [45]: s.find('u') #####u是否在s中,不存在返回-1
Out[45]: -1
####7.s.index(sub[,start[,end]])- 与find方法函数功能相同,如果sub不存在时抛出ValueError异常;
In [41]: s= "i like fentiao"
In [46]: s.index('i',5,8) #########i是否在5-8的字符中,不存在时抛出ValueError异常;
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-46-1bbced859d67> in <module>()
----> 1 s.index('i',5,8)
ValueError: substring not found
In [47]: s.index('i',0,8) #########i是否在0-8的字符中,存在返回索引值0
Out[47]: 0
In [48]: s.index('i',1,20) #########i是否在1-20的字符中,存在,返回i的个数
Out[48]: 3
#######8. s.isalnum() //判断是否都是字母或数字
#######9. s.isalpha() //判断是否都是字母
#######10. s.isdigit() //判断是否都是数字
#######11. s.islower() //判断是否都是小写
#######12. s.isspace() //判断是否都是英文空格
#######13. s.istitle() //判断是不是都是标题(有大小写)
#######14. s.isupper() //判断是不是都为大写字母
#######15. s.join(seq)- 以s作为分隔符,将序列seq中的所有元素合并为一个新的字符串。
In [53]: s= 'hello'
In [54]: b="linux"
In [55]: s.join(b) #####以hello作为分隔符,将序列linux中的所有元素合并为一个新的字符串
Out[55]: 'lhelloihellonhellouhellox' ###l hello i hello n hello u hello x 用hello将linux中的每个字符隔开
#######16. s.replace(old,new[,count])- 将s中的old字符串替换为new字符串,并将替换后的新字符串返回,如果count指定,则只替换前count个
In [60]: s= "i i like cat cat "
In [61]: s.replace("i","we") #####将s中的i字符串替换为we字符串,(全部)
Out[61]: 'we we lweke cat cat '
In [62]: s.replace("i","we",1) #####将s中的i字符串替换为we字符串,(替换前一个)
Out[62]: 'we i like cat cat '
#######17. s.split([sep[,maxsplit]])- 以sep字符串作为分割符对s进行切割,默认为空格;
-maxsplit代表切割的此处
In [73]: s = '172.25.254.144'
In [74]: s.split() ###### 以空格作为分割符对s进行切割
Out[74]: ['172.25.254.144']
In [75]: s.split('.')###### 以'.'作为分割符对s进行切割
Out[75]: ['172', '25', '254', '144']
In [76]: s= "i like ww qq"
In [77]: s.split() ###### 以空格作为分割符对s进行切割
Out[77]: ['i', 'like', 'ww', 'qq']
#######18. s.strip([chars]) -返回一字符串,将s中首尾包含指定的chars字符删除的字符串,未指定时,删除首尾的空格。
In [78]: s= " westo "
In [79]: s.strip() #####删除首尾的空格。
Out[79]: 'westo'
In [80]: s.lstrip() #####删除首的空格。
Out[80]: 'westo '
In [81]: s.rstrip() #####删除尾的空格。
Out[81]: ' westo'
In [88]: s='oowwoo'
In [89]: s.rstrip('o') #####删除尾的o。
Out[89]: 'ooww'
In [90]: s.lstrip('o') #####删除首的o。
Out[90]: 'wwoo'
In [91]: s.strip('o') #####删除首尾的o。
Out[91]: 'ww'
(7)当s的定义类型不一样,执行的操作也不一样;
截图:
习题;
(1)判断变量名是否合法:
代码:
import string
name = raw_input("changename: ")
if name[0] not in string.letters + "_":
print "the first number is errot"
exit(0)
else:
for item in name[1:]:
if item not instring.letters+"_"+string.digits:
print "changename iserror"
exit(0)
print "changename is error"
截图:
第一问:
myint= raw_input("input english : ")#####输入
myint1 = myint.split() ########### 以空格作为分割符对myint进行切割
print len(myint1) #####myint1的长度
第二问:
myint= raw_input("input english : ") #####输入
myint1 = myint.split() ########### 以空格作为分割符对myint进行切割
myint2 = set (myint1) ####运用集合的知识
print len(myint1) #####myint1的长度
print len(myint2) #####myint2的长度