目录

Python基础(二)--数据类型,运算符与流程控制

1 数据类型

1.1 Python中的数据类型

1.2 整数类型(int)

1.3 布尔类型

1.4 浮点类型

1.5 复数类型

1.6 类型转换

2 运算符

2.1 算术运算符

2.2 布尔运算符

2.3 比较运算符

2.4 位运算符

2.5 赋值运算符

2.6 运算符优先级

3 流程控制

3.1 选择结构

3.2 循环结构


Python基础(二)--数据类型,运算符与流程控制

1 数据类型

1.1 Python中的数据类型

在Python中,数据可以分为如下类型:

数值类型

整数类型:int

浮点类型:float

复数类型:complex

布尔类型:bool  
序列类型

列表:list

元组:tuple

字符串:str

字节:bytes

映射类型:dict  
集合类型:set  
其他内置类型  

注意:①变量本身严格来说是没有类型的,其所关联的对象类型,这与其他语言的差别较大(C,Java等)。因此,我们常习惯的成Python的类型为“鸭子类型”,这是一种动态类型的体现;②由于变量必须要关联一个具体的对象,才能确定变量的值,所以在定义变量时,不能只给出变量的名字,必须同时要给出变量多关联的对象;③Python2中还支持长整数类型(long),在Python3中取消。

1.2 整数类型(int)

我们数学上使用的整数,例如,3,-50等,这些都是整数类型。整数类型支持四种进制表示:①二进制(使用0b或0B前缀)②八进制(使用0o或0O前缀)③十进制(无前缀)④十六进制(使用0x或0X前缀,10 ~ 15使用a ~ f或A ~ F表示)

# 二进制
x = 0b10111
print(x)
# 八进制
x = 0o666
print(x)
# 十进制
x = 6
print(x)
# 十六进制
x = 0x1f66
print(x)

结果为:,以十进制的形式显示

进制转换:①bin其他进制转换为二进制②oct其他进制转换为八进制③int其他进制转换为十进制④hex其他进制转换为十六进制

x = 666
print(bin(x))
print(oct(x))
print(int(x))
print(hex(x))

结果为:

注意:返回的不是数值,是字符串

分割符_:当数值较大时(尤其是二进制),对程序的可读性会造成影响,此时,我们可以在数值之间使用一个_进行分隔,从而提高程序的可读性(Python3.6)。

number = 1234_5665_4321

1.3 布尔类型

布尔类型(bool)表示的是一种条件的判断,具有两个值:True与False。其中,True表示条件成立,即为“真”,而False表示条件不成立,即为“假”。

布尔类型是整数类型的子类型。实际上,True就是1,False就是0。因而,我们也可以使用布尔类型参与数学上的运算,与使用1与0参与运算的结果是一样的。

1.4 浮点类型

浮点类型(float)就是数学上的小数类型。例如:6.0,-6.6等,都是浮点类型。在进制表示上,浮点类型仅支持十进制表示(这点不同于整数类型)。除了常规的表示方式外,浮点类型也可以使用数学上科学计数法的形式表示,例如:6.6e30

注意:①十进制的整数类型不能使用0开头,但是,浮点类型可以以0开头。②浮点类型具有两个特殊值:NaN(Not A Number)与Infinity(无穷大),其中无穷大又可分为正无穷(+Infinity)与负无穷(-Infinity)。我们可以通过float函数来获得这些值。NaN有一个特征,就是自己不等于自己,因此,我们不能通过==来判断一个数值是不是NaN。

import sys
# 浮点类型的范围与实现有关,通常使用程序中的double类型来实现
f = 6.6e666
print(f)
print(sys.float_info)
print(sys.float_info.max)
print(sys.float_info.min)

结果为:

# float类型的特殊值
print(float("NaN"))
print(float("Infinity"))
n = float("NaN")
# NaN是特殊的值,不等于任何值,包括自身
print(n == n)
# 因为NaN不等于任何值,所以不能用==进行判断,而是使用math提供的函数isnan进行判断,如果参数是nan,则返回true,否则返回False
import math
print(math.isnan(n))

结果为:

浮点类型的不精确性:

在使用浮点类型时,我们需要留意,浮点类型在计算机中仅是近似的存储,浮点类型是不精确的。因此,我们要避免进行如下的操作:①避免数量级相差很大的浮点值之间进行运算②避免进行等量的比较。

# 避免数量级相差很大的两个浮点数进行计算
f1 = 6e20
f2 = 6
print(f1 + f2)
# 避免进行等量的判断
f1 = 0.1
f2 = 0.2
print(f1 + f2)
print(f1 + f2 == 0.3)

考虑到浮点类型的不精确性,因此,如果我们需要进行精确计算时,我们可以使用decimal模块中的Decimal类来实现,该类提供精确的浮点计算。此外,我们也可以指定Decimal的计算精度,即计算结果最多保留的有效数字位数,默认为28位有效数字。

但是Decimal要慎用,因为非常消耗性能

# Decimal类型进行精确的浮点计算
import decimal
x = decimal.Decimal(0.1)
y = decimal.Decimal(0.2)
print(x)
print(y)
# Decimal计算,默认有28位有效数字
# 获取decimal计算上下文环境后,即可设置有效位数
context = decimal.getcontext()
context.prec = 10
x = decimal.Decimal(0.1)
y = decimal.Decimal(0.2)
print(x + y)

1.5 复数类型

复数类型(complex)类似于数学上的复数。含有虚部(使用j或J后缀)的数值为复数类型。例如:3 + 5j,-2 - 3j(数学中虚部后缀为i)。复数分为实部与虚部两个部分,我们可以通过real与imag属性分别获取复数的实部与虚部的值。

x = 6 + 8j
print(x.real)
print(x.imag)

1.6 类型转换

(1)获取数据类型

我们可以通过type函数获取变量的类型,准确的讲,应该是变量所关联的对象的类型。

a = 6
b = 6.6
c = 6 + 8j
# int,float,complex可以进行混合运算,结果类型为参与运算的数据类型中较高的一个:int<float<complex
print(type(a + b))
print(type(a + c))
print(type(b + c))

(2)类型转换函数

Python中为我们提供了如下的转换函数:

①int(value):将数值类型或字符串转换为整数(int)类型。如果没有参数,返回0

②float(value):将数值类型或字符串转换为浮点(float)类型。如果没有参数,返回0

③complex(real,imag):根据实部与虚部(可选)创建一个复数。如果没有参数,返回0j

④bool(value):参数为真值时,返回True,否则返回False

a = 6
b = 6.6
c = True
d = 6 + 8j
# float类型转换为int类型时,去掉小数点后面的内容,取整数部分,int,float转换成complex时,虚部为0
print(int(b))
print(complex(a))
print(complex(b))
# 注意:复数类型就不能够通过int或float转换为整数或浮点类型。
# print(int(d))  这是不合法的# 在Python中任何类型都能转换成bool类型。True就是1,False就是0
print(bool(0),bool(6),bool(6.6),bool(6+6j))
print(int(True),int(False),float(True),float(False),complex(True),complex(False))

其他:①int函数还可以提供第二个参数,指定解析转换时,使用的进制。此时,第一个参数需要是字符串类型(或字节等类型),不能是数值类型。例如:int(“600”, 16),则会根据16进制来解析600。如果没有指定第二个参数,则默认为十进制。

2 运算符

运算符,即具有特殊计算规则的符号。运算符涉及到的,参与运算的数据,称为操作数。不同的运算符,涉及的操作数也不相同。由运算符与操作数结合起来的计算式,称为“表达式”。

运算符可分为:算术运算符;布尔运算符;比较运算符;位运算符;赋值运算符

2.1 算术运算符

用来进行类似数学上的加减乘除运算

符号

说明

x + y

加法运算,返回x与y的和。

x – y

减法运算,返回x与y的差。

x * y

乘法运算,返回x与y的积。

x / y

除法运算,返回x与y的商(浮点类型)。

x // y

除法运算,返回x与y的商(向下取整)。

x % y

取模运算,返回x模y的结果。

x ** y

乘方运算,返回x的y次方。

+x

正号,x的值不会改变,该符号可以省略。

-x

负号,取x的相反数。

在除法运算时,除数不能为0,否则会产生错误(ZeroDivisionError)。

取模运算(“Module Operation”)和取余运算(“Complementation ”)两个概念有重叠的部分但又不完全一致。主要的区别在于对负整数进行除法运算时操作不同。

取余与取模的差别:取余向0取整(余数符号与被除数相同),取模向下取整(余数符号与除数相同)。

被除数 - 除数 * 商 = 余数,被除数 = 除数 * 商 + 余数

# 正数的取余运算与取模运算结果一样
print(7 % 4)
# 负数的取模运算:
# 被除数为-7,除数为4,商为-1.75,向下取整为-2(取模),向0取整为-1(取余)
# 根据公式:被除数 - 除数 * 商 = 余数 得 -7 - 4*(-2)=1
print(-7 % 4)

2.2 布尔运算符

布尔运算符也称逻辑运算符

符号

说明

x and y

如果x为True,返回y,否则返回x。

x or y

如果x为True,返回x,否则返回y。

not x

如果x为True,返回False,否则返回True。

x与y可以是任意类型,因为在Python中,任意类型都可以转换为布尔类型。

# and连接两个表达书,表示并且。两个表达式都为True,整个表达式才为True
print(6 == 8 and 6 ==6)
# or连接两个表达式,表示或。两个表达式中有一个为True,整个表达式为True
print(6 == 8 or 6 ==6)
# not表示对条件的否定。True-》False。False-》True
print(not True)

注意:and与的表达式未必一定是bool类型,可以是任意类型,因为任何类型都可以转换成bool类型

# and,如果如果第一个表达式为False,第二个表达式不是True或False,则返回第一个表达式;如果第一个表达式为True,则返回第二个表达式
# or,与and相反,如果第一个表达式为True,返回第一个表达式,否则返回第二个表达式
print(6 and "a")
print(6 or "a")
#and与or的短路操作,当and的第一个表达式为False,或者or的第一个表达式为True,此时就可以确定整个表达式的值,第二个表达式会直接跳过,不会执行
print(0 and print("不执行"))

2.3 比较运算符

比较运算符执行的是比较运算,如果表达式成立,返回True,否则返回False。

符号

说明

x > y

如果x大于y,返回True,否则返回False。

x >= y

如果x大于等于y,返回True,否则返回False。

x < y

如果x小于y,返回True,否则返回False。

x <= y

如果x小于等于y,返回True,否则返回False。

x == y

如果x等于y,返回True,否则返回False。

x != y

如果x不等于y,返回True,否则返回False。

x is y

如果x与y是同一个对象,返回True,否则返回False。

x is not y

如果x与y是不同的对象,返回True,否则返回False。

在Python语言中,比较运算符支持链式比较,在java语言中是不支持的。x < y < z相当于x < y and y < z,不同之处仅在于,后者中y只会计算一次。链式比较与拆分成and或or连接的表达式一样,也会进行短路操作。

is与==,is not与!=的区别在于,==与!=比较的是对象内部的值是否相等,而is与is not比较的是两个对象是否为同一个对象。

2.4 位运算符

位运算符提供的是对位(bit)进行的操作。位运算符的操作数要求是整数类型(布尔类型)。位运算符如下表所示

符号

说明

x & y

x与y按位与运算,如果两个位都是1,结果为1,否则结果为0(有0则结果为0)。

x | y

x与y按位或运算,如果两个位都是0,结果为0,否则结果为1(有1则结果为1)。

x ^ y

x与y按位异或运算,如果两个位相同,则结果为0,如果两个位不同,则结果为1(有1则为1,但又不同时为1)。

x << y

将x向左移动y位,右侧以0进行填充。y不能为负值,否则会产生ValueError。

x >> y

将x向右移动y位,左侧以符号位进行填充。y不能为负值,否则会产生ValueError。

~x

对x进行按位取反,即1变为0,0变为1。

注意:布尔类型作为整数类型的子类型,也可以参与位运算,但是,最好不要这样,因为布尔类型的作用是进行逻辑上的判断,而不是当成数值1与0参与数学运算。

2.5 赋值运算符

赋值运算符包括简单赋值运算符与复合赋值运算符。

符号

说明

x = y

简单赋值运算。即x关联y所关联的对象。

x op= y

复合赋值运算。op可以是任意二元算术运算符与二元位运算符。

x op= y相当于x = x op y。例如x += y相当于x = x + y。

2.6 运算符优先级

同一行的运算符具有相同的优先级从高到低进行排列。如下:

运算符优先级

.    ()    []

**

+(正号)    -(负号)    ~

*    /    //    %

+    -

<<    >>

&

^

|

in    not in    is    is not    <    <=    >    >=    ==    !=

not

and

or

=    op=(+ - * / // % ** >> << & ^ |)

当我们在使用表达式,无法确定优先级时,我们可以使用小括号()来调整表达式的结合性,小括号()的优先级是最高的。

3 流程控制

流程:即程序执行的过程。程序的三种结构:顺序结构(按部就班,自顶而下的去执行的);选择结构;循环结构

3.1 选择结构

(1)if

缩进的语法:缩进大小随意,但是要保持一致。按照惯例,使用4个空格。

if 表达式:

if语句体

如果表达式为True,或者可以转换为True则执行语句体,否则不执行

age = 20
if age >18:print("成年了")
print("没有缩进,不是if的语句体")

(2)if-else

提供两条分支。

age = 16
if age >18:print("成年了")
else:print("未成年")

(3)if-elif

可以实现多分支判断,if-else只能实现两分支判断

if 表达式:

语句体

elif 表达式:

语句体

更多的elif 表达式:

语句体

# 注意:多分支选择条件有包含关系,需要将范围小的放在前面,范围大的放在后面
number = int(input("输入数字"))
if number > 90:print("A")
elif number > 80:print("B")
elif number > 70:print("C")
elif number > 60:print("D")

(4)if-elif-else

if 表达式:

语句体

elif 表达式:

语句体

...

else:

语句体

# 注意:多分支选择条件有包含关系,需要将范围小的放在前面,范围大的放在后面
number = int(input("输入数字"))
if number > 90:print("A")
elif number > 80:print("B")
elif number > 70:print("C")
elif number > 60:print("D")
else:print("E")

(5)if-else的简化

类似于其他语言中的三元运算符。格式为:

表达式1 if 条件表达式 else 表达式2

其中,条件表达式执行条件判断,如果条件表达式的值为True,则返回表达式1的值,否则返回表达式2的值。

number = int(input("输入数字"))
print("小" if 1<= number <3 else ("大" if 3<= number<6 else "输入有误"))

(6)if嵌套

if是嵌套使用的,用来多层选择分支的判断。

gender = "男"
age = 20
if gender == "男":print("男性")if age >= 18:print("做苦力")else:print("玩耍")
else:print("女性")if age >= 18:print("做饭")else:print("玩耍")

(7)断言

断言:判断某些语句是否正确。通过断言,我们可以为应用程序加入调试信息,从而检测程序关键点位置的准确性。

断言使用assert关键字,语法格式为:

assert 表达式        或          assert 表达式,错误信息

在执行断言语句时,会对表达式1进行求值,如果该值转换为布尔类型后为False,则会产生错误信息。其中,第二种形式的错误信息是可选的,如果给出错误信息,则会在表达式为False的时候,输出我们指定的错误信息。

断言有什么用处呢?我们可以自行通过if语句,使用raise抛出异常来实现啊。其实断言底层其实就是通过if语句判断与异常来实现的。

断言是通过__debug__来控制的,如果该变量为True,则会开启断言,进行判断,一旦断言表达式为False,就会产生异常。如果该变量为False,则不会开启断言,就算断言表达式为False,也不会产生异常(因为根本没有执行)。__debug__是Python中的内置常量值,该常量值默认为True,如果在运行Python时,命令行指定了-O选项,则该常量值为False。因此,我们可以方便的开启与关闭断言(通过-O选项)。这比使用if语句要灵活,因为使用if语句,程序会无条件的判断,无法进行控制。

password1 = input("请输入密码")
password2 = input("请再次输入密码")
# 设下断言,当两次密码一致才进行后续的操作
assert password1 == password2
print("继续执行")

3.2 循环结构

循环就是重复性的执行一件相同或相似的事情

(1)while

while 表达式:

循环体

如果表达式为true则重复执行语句体

x = 0
y = 10
sum = 0
while x <= 10:sum += xx += 1
print(sum)

(2)for

for 变量 in 可迭代对象:

循环体

对可迭代对象的每个值,依次赋值给变量,然后执行一次循环体

# range函数,能够产生一个区间的整数值,是一个可迭代对象
# range(end) 产生0-end区间的整数值,包括0,不包括end
# range(start,end) 产生start-end区间的整数值,包括start,不包括end
# range(start,end,step) 产生start-end区间的整数值,包括start,不包括end,step指定步长,默认为1
for x in range(2,10,2):print(x,end=" ")

(3)循环嵌套

循环嵌套,是指外层循环的内部,还有内层循环,即内层循环作为外层循环的循环体。当循环嵌套时,外层循环每执行一次,内层循环都会完整的执行一轮。如果外层循环会执行m次,内层循环会执行n次,则总共会执行m * n次。

for i in range(1,5):for j in range(1,i+1):print("*",end= "")print()

(4)break与else

break只能在循环中使用。else可以跟随在for或while循环之后,当循环正常执行完毕,会执行else语句,如果循环非正常执行完毕,而是通过break跳出循环,则else语句块不会得到执行。else语句是可选的。

# break用于提前完成任务,结束循环
for i in range(1,10):if i == 5:print("i为5")break
# for 与 while循环可以加上一个可选的else,如果循环没有因为break提前结束,则执行else语句体,否则不执行
num = 6
for i in range(1,10):if i == num:print("存在num")break
else:print("不存在num")

(5)continue

continue只能用在循环语句中。用来结束本次循环,开启下一次循环,对后续的循环没有影响

注意:break与continue基本只会用在选择判断中。无条件的break与continue虽然语法上没有错误,但从实际的角度来说是没有意义的。

# continue用来表示当前循环已经不满足条件时,可以使用continue提前结束本次循环,开启对下一个值进行判读。
for i in range(1,10):if i == 5:continueprint(i,end=" ")

Python基础(二)--数据类型,运算符与流程控制相关推荐

  1. JavaScript基础-基本数据类型和基本流程控制

    2019独角兽企业重金招聘Python工程师标准>>> JavaScript基础1 一.基本数据类型 1.Number 2.String 3.Null 4.Undefined 5.t ...

  2. Java基础语法之变量、运算符、流程控制、数组和方法等基础语法

    变量.运算符.流程控制.数组和方法等基础语法.Java程序的执行流程,符合Java语法规则的程序. 1.1.1 Java初识 对Java进行简单介绍,Java程序如何执行,以及Java程序的结构. J ...

  3. 好好学python·运算符和流程控制

    运算符和流程控制 运算符类型 Python算术运算符 Python比较运算符 Python赋值运算符 Python位运算符 Python逻辑运算符 Python成员运算符 Python身份运算符 Py ...

  4. java的注释、关键字、标识符、变量常量、数据类型、运算符、流程控制等

    java的注释.关键字.标识符.变量常量.                             数据类型.运算符.流程控制等 1. java概述 1.1 java的技术体系 Java SE:是Ja ...

  5. python 运算符与流程控制

    运算符与流程控制 运算符 赋值运算 用'='表示,'='的左边只能是变量 算术运算 +.-.*:加.减.乘 /:除法运算,运算结果为浮点数 //:除法运算,运算结果为整数(商) %:求余 **:求幂 ...

  6. php 获取 js json数据类型,JS基础-JS的数据类型和访问/流程控制/JSON格式字符串和js对象相互转换...

    JS的数据类型和访问/流程控制/JSON格式字符串和js对象相互转换 1. JS的数据类型和访问 1.1. 原始类型JS中的原始数据类型有: number , string , boolean ; 声 ...

  7. C语言零基础入门级数据类型+运算符+控制流+ASCII 码表+面试题【系统学习第二天】

    C语言零基础入门级数据类型+运算符+控制流 第一项 C语言->数据类型全讲解上 [1]整型int [2]整型修饰符short.long.unsigned [3]符号位 [4]格式控制符%d+%h ...

  8. 【 js基础 Day2】js的流程控制:分支语句,循环.顺序结构

    复习 JavaScript简称为JS JavaScript是什么? 是一门脚本语言:不需要编译,直接运行 是一门解释性的语言:遇到一样代码就解释一行代码 C#语言是一门面向对象的语言,也是编译语言,是 ...

  9. ChapterTwo---Java基本语法:变量、运算符与流程控制(上)

    ChapterTwo---Java基本语法:变量.运算符与流程控制(上) ⑴关键字和保留字 ⑵标识符(Identifier) ⑶变量以及基本数据类型 整数类型:byte.short.int.long ...

最新文章

  1. kafka教程视频百度网盘下载,聊一聊-MySQL-数据库中的那些锁
  2. 扩展ToolBarManager、ListView和Grid控件以实现气球式的ToolTip
  3. linux下普通用户更改密码原理(S权限)、SetUID
  4. pku 1850 Code 组合数学排列组合的应用
  5. java决策_机Java解决决策表
  6. 一文读懂802.1x协议,随便秒杀面试官
  7. Useful link
  8. python程序变量名_python 变量名的规范
  9. Apache 优化配置10条建议
  10. 1007 素数对猜想 (20 分)—PAT (Basic Level) Practice (中文)
  11. Ubuntu系统多屏幕时 触摸屏如何分屏定位
  12. Linq to sql(六):探究特性(四)
  13. Photoshop 常用快捷键
  14. 【九度OJ1348】|【剑指offer36】数组中的逆序对
  15. HI3798MV200驱动移植
  16. 记一次刷票过程的感想
  17. 解决IDEA的Plugin org.apache.maven.plugins:maven-archetype-plugin:RELEASE or one of its dependencies cou
  18. 笔记本建立WIFI热点的bat命令
  19. 使用 TreeView IE Web 控件
  20. python文件写入后,但文件还是空白

热门文章

  1. html:web前端开发规范
  2. 算法题之求二叉树的最大距离
  3. jquery hover事件中 fadeIn和fadeOut 效果不能及时停止
  4. vim学习笔记(3)眼花缭乱的Vim模式
  5. CSS 实现加载动画之五-光盘旋转
  6. tcl/tk demo
  7. 开始学习ZendFramework框架了
  8. 整理一篇Linux drm显示系统的文章
  9. Linux中,文件创建的时间是怎么保存的?
  10. 聊聊身边的嵌入式,乘风破浪的比特币