003-Python总结一下基本数据类型

一、回忆、总结

        被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基本数据类型的结尾,接下来我就要开辟函数和面向对象的内容了,哇咔咔~~:



-------------------------------------华丽丽的结尾线-------------------------------------

猜你喜欢

转载自blog.csdn.net/midnight_time/article/details/80871933