一、回忆、总结
被Android耽搁的时间有点长了,我又回来了。
001、002写了Python的基本数据类型有 String、List、Tuple、Dict。(其实还有Number和Set 共6种)
其中,String类型Python给出的方法大概有四类,我认为重要的是掌握以下列举的(3+6+3+2=14个):
一、大小写类的 如:lower()、 upper()、 swapcase()
二、查找、匹配、替换(和位置有关)类的 如:find()、 count()、 format()、 maketrans()和translate()、 replace()
三、自定义(自定义格式表示)类的 如:strip()、 split()、 expandtabs()
四、判断(是否是数字、字母、标识符)类的 如:isalpha()、 isdigit()
上面都是先写一个字符串,然后后面带上点+方法,比如:
strH = "Gone With The Wind"
v = strH.find('The')
print(v) #输出为10
下面说两个很重要的很基础的方法:
str()方法 字符串里没有这个函数,但这个函数是将非字符串转换为字符串的函数,试想你连字符串类型都不是,何谈应用字符串方法呢?这个可谓是从0到1的过程,所以很重要很重要。
len()方法 字符串里也没有这个函数,有了一个字符串,想知道它的长度,就用它了。
这两个方法都是把字符串写到括号里面的,比如:
num = 123456
v = str(num)
print(v,type(v)) #输出为:123456 <class 'str'>
对于这两个方法,我挨个举栗子:
1.1用到str()的例子:打印 九九乘法表
首先分析思路:九九乘法表的外形是一个直角三角形
分行、列,所以应该是个二重循环,外层循环控制行,内层循环控制列,然后在内层中print( i+"*"+j+"="+i*j )
先来看看版本0代码:
for i in range(1,10):
for j in range(1,10):
print(i+"*"+j+"="+i*j)
这是我脑子里真真实实想过的代码,不知你看出来Bug否?
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Bug1:print() 里面 出现了 i+"*"+j+"="+i*j 但是 i 是 range(1,10) 属于int型,+号只能字符串之间相连,所以应该用str() 把i、j、i*j转化为字符串类型
版本1代码:
for i in range(1,10):
for j in range(1,10):
print(str(i)+"*"+str(j)+"="+str(i*j))
这次是能运行了,但是,
Bug2:打印了很长一列
Bug3:而且还有重复的,比如1*2=2、1*3=3、1*4=4...和 2*1=2、3*1=3、4*1=4...
我们再看一下九九乘法表是没有重复的
解决一大长列格式的问题办法:把每一行中所有列的内容用字符串连接起来,为了分开一点,在结尾加上 '\t'
版本2代码:
for i in range(1,10):
string = ""
for j in range(1,10):
string += str(j)+"*"+str(i)+"="+str(i*j)+'\t'
print(string)
结果一运行,WTF!打脸
重复的问题还没解决,这也是 九九乘法表最最最关键的一步:
分析:行数对着呢,每一行应有的列数不对,所以是控制列输出的地方出了问题,也就是内存循环那里。我们注意到,真正的九九乘法表,第一行有一列,第二行有二列,第三行有三列......,是随着行数变化而变化的,那么行数是怎么变化的?是 i 在变化,所以行才会变化,那么,把它应用到列变化,有i行就打印i列,因为循环是左闭右开区间,所以需要循环到 i+1:
版本3代码(列的动态变化是重中之重!):
for i in range(1,10):
string = ""
for j in range(1,i+1):
string += str(j)+"*"+str(i)+"="+str(i*j)+'\t'
print(string)
运行一看结果,成了成了!!且稍等,既然打脸这么多次了,我再打脸最后一次。
Bug4:你有没有发现顺口溜中是一一得一、一二得二、一三得三;这里呢,这里是一一得一、二一得一、三一得一。顺序反了。所以,最后需要把str(i)和str(j)换一下顺序。
版本4代码(终极代码):
for i in range(1,10):
string = ""
for j in range(1,i+1):
string += str(j)+"*"+str(i)+"="+str(i*j)+'\t'
print(string)
完美!为自己鼓掌!piapiapia~~~
1.2用到len()的例子:列表(元素包含数字)转字符串
需要先用for循环把包含数字的列表转为纯字符串的列表,然后再用"".join()函数
直接上代码:
li = ['Hello','World',123]
strLi = []
for i in range(0,len(li)):
strLi.append(str(li[i]))
v = "_".join(strLi)
print(strLi)
print(v)
打印结果:
['Hello', 'World', '123']
Hello_World_123
当然我觉得这个例子的重点已经不是len()方法了,而是包含数字的列表转字符串的方法,哈哈,跑偏了。
二、劝告
把看源代码养成一种习惯,闲来无事,就点开源代码进去看看(Pycharm是按住Ctrl+鼠标左键单击关键词,Spyder是在控制台Console中输入 help(关键词))
有一哥们竟然进去 print()源码研究了一下,如果我没遇见他,那么我千想万想,也没想过进print()这个基本方法的源码看看。我用的是Spyder,所以在控制台中输入help(print):
进去一看,除了打印值value之外,竟然还可以再设置四个参数
直接看代码:
print("1","2")
print("1","2",sep="后面是")
print("1","2",sep="后面是",end="我是结尾 ")
print("1","2",sep="后面是",end="我是结尾")
运行结果:
1 2
1后面是2
1后面是2我是结尾 1后面是2我是结尾
我们看运行结果:
第一行,什么参数都没有,输出 1 空格 2 换行
第二行,sep的参数替换了1 2 之间的空格,仍然有换行
第三行,end的参数替换了换行
sep和end的作用也出来了,一个控制打印间隔(默认是空格)一个控制打印结尾(默认换行)
所以,常回源码看看,有时候会收到意想不到的知识。
三、补充
Python六种基本数据类型还差两个,一个是Number,不用细说,另一个是Set,集合是一种和字典类似的数据类型,集合的特点:
1.元素只能是不可变的(数字,字符串,元组)
2.元素之间符合数学对集合的定义,即:确定(存在元素,空集∅也是元素),无序,不重复
由于Python中的集合和数学中的集合高度重合,像什么 交、并、补、差 集都能实现,我这里就不赘述了。
分享一个连接,我觉得人家写的很完善了:https://www.cnblogs.com/chaoren399/p/4858253.html
贴一张总图作为Python基本数据类型的结尾,接下来我就要开辟函数和面向对象的内容了,哇咔咔~~:
-------------------------------------华丽丽的结尾线-------------------------------------