薛钦亮的python教程(二)一文读懂python基本数据类型和运算

接上篇:薛钦亮的python教程(一)从安装Anaconda开始

本文将简要介绍使用python所必须掌握的基本数据类型、各种运算符,适合初学者收藏,建议看博客的同时打开python的交互控制台(就是那个里面可以输入python语句的小黑框)或者jupyter notebook同步操作,收获会更大。

〇、python的输入输出

既然是编程语言教学,编号自然应该从〇开始(其实是这个部分后面发现应该先讲,不然学起来很影响体验)。

1. 输出

python的输出非常简单,不用指定类型,直接打印即可,举个栗子大家就懂了。

print("hello world")
print(100)
a = 2021.2021
print(a)
print(23,63,"Python") #还可以一次打印多个

总之,凡是python的基本类型,print都可以直接打印。

但python作为强大的编程语言,也可以指定类型,格式化符号基本同C语言,格式化字符串同变量之间用%连接。看个例子:

lan = "Python"
num = 3000
print("I love %s %d times"%(lan,num))

结果为:I love Python 3000 times

Python打印末尾默认加了一个换行符,如果打印多个变量分隔符默认为空格,如果要修改,可以用sep和end参数指定。

print(1,2,3,4,5,"python","打老虎",sep='%',end='$')

输出为:1%2%3%4%5%python%打老虎$
如果用Python2,可以使用print关键字来输出,可以不加括号(篇幅问题,不展开介绍)

2. 输入

Python3的输入只需要input()函数。这个函数接收任意任性输入,将所有输入默认为字符串处理,并返回字符串类型。

>>> a = input()
123
>>> a #可以看到a为字符串类型
'123'
>>> a = input("请输入:") #input内可以接受一个字符串作为输入的提示
请输入:ahhhhhh
>>> a
'ahhhhhh'

在Python2中,有input()和raw_input()两个函数,input()会根据输入自动识别类型,raw_input()相当于Python3的input()。

一、python基本数据类型及运算

Python只需要声明对象和变量名,不需要指定类型,类型是在内存中体现的,会根据数据的实际值来自动判断类型。大体上,类型可以分为以下几类:数值类型(int、float、bool、complex)、序列类型(string,list,tuple,set,dict)。其余所有的复杂类型和类都是基于这几种变量而生成的。

1. Number(数字)

python的Number不是单一类型,泛指一切数字,具体来讲,可以分为 int、float、bool、complex(复数)四种。

a = 10 #int类型,不多说明
b = 1.1 #float,此处不区分float和double,python的精度和机器有关
c = True #python中True和False是定义好的变量值,需要大写
d = 4+5j #python定义复数,复数符号应该用j而不是i,且只支持二维复数

由此引出常用的运算有:

1.1 算术运算

加法(+)、减法(-)、乘法(*)、除法(/)、整除(//)、幂指(**)、取余(%)。
特别需要说明的是:
1. python由于类型不是显式声明,所以除法会把所有数字都当做浮点数来计算,例如:40/2=20.0,而不是20。
2. 整除返回的结果是不大于余数的最大整数。
3. 幂指是python有而C++没有的运算,更方便地代替了C++中的pow函数,2**4即为2的4次方。

1.2 比较运算

>, <, =, >=, <=, !=, ==(易于理解,不再赘述)

1.3 赋值运算

=,及算术运算与等于号组成的联合运算,举个栗子:

a = 1
a += 3 #a此时为4
a *= 2 #a此时为8
a %= 3 #a此时为2

2. String(字符串)

python的字符串用’’(单引号)、""(双引号)均可定义,并且支持常用的转义字符,例如\n、\t等。Python的字符串一旦定义不可修改(与C语言不同),除非生成新的字符串。

s = "Life is short, and I love Python."
s[0] = 'w' #会报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

字符串最常用的操作是截取操作、相加操作、相乘操作(更多操作需要了解List类型再补充)。

  • 截取操作
>>> s = "Life is short, and I love Python."
>>> s[0] #取第0位的字符
'L'
>>> s[:5] #取0-4的字符组成的字符串
'Life '
>>> s[10:] #取10到最后一个字符组成的子串
'ort, and I love Python.'
>>> s[5:10] #取5-9到字符组成的子串
'is sh'
>>> s[:-8] #索引范围可以为负数,从后往前数,最后一个数字序号为-1
'Life is short, and I love'
  • 相加和相乘
a = "I love "
b = "Python"
c = a+b #c = "I love Python"
d = b*3 #d = "PythonPythonPython"

再补充一下,python获取字符串长度可以用内置的len()函数,例如len(s),返回字符串s的长度(类型为一个非负整数)。

字符串和数字类型的转换

数字转为字符串,可以用str()函数。字符串转为数字,需要分别用int()、float()、bool()、complex()等函数,其中转为int和float最常用。

s = str(123)
num = int(s)
fl = float(s)

3. List(列表)

列表用中括号声明,列表中可以存放任意不同类型的元素,灵活性很高,内置的方法也很多。
例如下面的list有5个元素,第五个元素为一个list,里面有三个元素(这样下去可以无限套娃)

l = ['a','b',123,"python",['5','6','7']]

list的截取操作和字符串的截取操作相同,获取长度操作相同,相加和相乘操作也相同(其实字符串也可以看作一个特殊的list)

字符串和列表类型的转换

字符串转列表
  1. 直接list(String),将会把字符串转为单个字符组成的列表
>>> string = "Python"
>>> list(string)
['P', 'y', 't', 'h', 'o', 'n']
  1. string.split(),按字符切割字符串,默认为空格,split()函数中可以指定切割符
>>> string1 = "I love Python very much"
>>> string1.split()
['I', 'love', 'Python', 'very', 'much']

>>> string2 = "I love Python very much, and I guess so do you, don't you?"
>>> string2.split(',')
['I love Python very much', ' and I guess so do you', " don't you?"]
列表转字符串
  1. 直接str(list),会把列表输出的结果直接转为字符串(一般不是我们想要的结果)
>>> a = [5,4,3]
>>> str(a)
'[5, 4, 3]'
>>> b = ['a','b','c']
>>> str(b)
"['a', 'b', 'c']"
  1. join操作,与split相反的操作,用指定的连接符把由字符串组成的列表合并为一个字符串
>>> b = ['a','b','c']
>>> ",".join(b)
'a,b,c'

列表还有很多常用的方便操作,例如:append为在末尾添加一个元素,max为取列表中最大值,count为统计列表中某一元素的个数,更多操作和详情推荐查看菜鸟教程

4. Tuple(元组)

元组用小括号声明,元组和列表的区别就是元组不可修改,列表可修改。因此更准确地说,字符串是一种特殊的元组。
元组和列表直接可以随意转换,用list()和tuple()函数互相转换即可。
声明长度为1的元组方法比较特殊,需要在元素后面加逗号,不然会忽略括号识别为单个元素。
元组与字符串可以用类似于列表的方式互相转换。

t = (20,)

5. Set(集合)

python中用大括号声明集合,集合满足无序性、无重复成员等集合的基本性质,并且支持并、交、差、环合(对称差)等运算。

>>> a = {1,2,3}
>>> b = {3,4,5}
>>> a|b #a并b
{1, 2, 3, 4, 5}
>>> a&b #a交b
{3}
>>> a-b #a减b
{1, 2}
>>> a^b #a环合b
{1, 2, 4, 5}

字符串可以转为集合,例如:

>>> s = set("Renmin")
>>> s
{'m', 'n', 'e', 'i', 'R'}

6. Dictionary(字典)

字典是无序的映射关系的集合,不能按下标索引,需要按值索引,本质是哈希表。
映射对又称为键值对(key: value),key在字典中必须唯一,且不可以为列表和字典类型(这两种类型不可哈希,具体原理不用了解),value可以为任意类型。
虽然字典类型不能按下标存取,但字典类型可迭代(简单来讲,就是可以用for循环来遍历整个字典,这一点和列表、元组、字符串是相同的)。

>>> dic = {"one":1,"two":2,"three":3}
>>> dic["one"]
1
>>> dic["one"] = "一"
>>> dic["one"]
'一'

7. 对运算的补充介绍

7.1 赋值运算

python中的赋值运算均为浅复制,即只是传递了对象的地址声明了另一个别名,具体到数值类型和序列类型(包括字符串、列表、元组、集合、字典)有不同的表现。
首先来看数值类型,我们用id()可以获得python中变量的地址。下图的结果可以总结为:

  1. 每一个值对应一个独特的地址,每一次赋值操作都会改变变量的地址。
  2. 相同的值的变量拥有相同的地址,例如a和c。
  3. 赋值运算的本质是将地址赋予了另一个变量,并没有新开空间。
>>> a = 1
>>> b = 2
>>> id(a)
1445946544
>>> id(b)
1445946560
>>> b = a
>>> id(b)
1445946544
>>> b = 3
>>> id(b)
1445946576
>>> c = 1
>>> id(c)
1445946544

接下来看序列类型,我们只需要记住一点,赋值运算的本质是将地址赋予了另一个变量,并没有新开空间,就可以理解python发生的一些从C语言入门角度无法理解的现象了。
下面先定义了a为[1,2,3],然后把a赋给了b,b和a的地址是一样的,接下来改变b,但对于复杂对象b改变之后地址没有改变,a的地址也不会改变,所以再去查看a的时候发现a也被相应修改了。
这是python初学者非常容易犯的错误,bug的50%以上来源是没有理解python的这一特性。

>>> a = [1,2,3]
>>> id(a)
45311160
>>> b = a
>>> id(b)
45311160
>>> b.append(4)
>>> id(b)
45311160
>>> a
[1, 2, 3, 4]

7.2 逻辑运算符

python的逻辑运算符有and、or、not,分别为与、或、非,对应C语言的&&、||、!运算符,可以用于并列两个条件,真值表略。

7.3 成员运算符

主要为in和not in,用于判断一个元素在不在一个序列中(记得序列包括字符串、列表、元组、集合、字典)

>>> a
[1, 2, 3, 4]
>>> a
[1, 2, 3, 4]
>>> a = [1,2,3]
>>> 3 in a
True
>>> 4 in a
False
>>> 0 not in a
True
>>> s = "Python"
>>> 'y' in s
True
>>> t = (2,5,6,8)
>>> 6 in t
True
>>> Set = {2,3,5,6,7,1}
>>> 4 in Set
False
>>> d = {1:1,2:2,3:3}
>>> 1 in d
True

7.4 身份运算符

is和is not,主要判断是否指向地址相同的对象,即判断id是否相同

>>> a = [1,3,4]
>>> b = [1,3,4]
>>> c = b
>>> a is b
False
>>> b is c
True
>>> id(a)
45311240
>>> id(b)
8473216
>>> id(c)
8473216

7.5 位运算符*

同C语言的位运算规则,初学者可以不必了解,详情请见位运算

学完这篇,大家就可以把python当做一个强大的计算器来使用了,可以写任意的顺序控制语句了,循环和分支等复杂的控制语句留待下一篇再讲。

下一篇:薛钦亮的python教程(三)python的分支与循环居然这么简单

  • 14
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛钦亮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值