初识基本数据类型,与用户交互,格式化输出,基本运算符
初识基本数据类型
-
什么是数据类型?
在现实生活中存储数据的方式和表现形式有很多。eg:文本文件 表格文件 视频文件 音频文件 图片文件...
在IT世界里数据的存储方式和表现形式也是千变万化的
数据类型是用来记录事物状态的,而事物的状态是不断变化的(如:一个人年龄的增长(操作int类型),单个人名的修改(操作str类型),学生列表中增加学生(操作list类型)等),这意味着我们在开发程序时需要频繁对数据进行操作,为了提升我们的开发效率, python针对这些常用的操作,为每一种数据类型内置了一系列方法。本章的主题就是带大家详细了解下它们,以及每种数据类型的详细定义、类型转换。
数据类型之整型int
-
作用:用来记录年龄、个数、号码、等整数相关的状态
age = 18 print(type(age) # <class 'int'>
数据类型之浮点型float
-
作用:用来记录身高、体重、薪资等小数相关的状态
weight = 80.3 print(type(weight)) # <class 'float'>
数据类型之字符串类型str
-
作用:用来记录姓名,性别,住址,等描述性质的状态
# 方式一:单引号 name = 'geng' # 方式二:双引号 name1 = "geng" # 方式三:三个单引号(赋值皆为字符串,否则为注释) name2 = '''geng''' # 方式四:三个单引号(赋值皆为字符串,否则为注释) name3 = """geng""" # 方式五:为了防止文本内需要用到引号,应采取外双内单的形式 name4 = "'大佬说':今天天气很好" print(type(msg4)) # <class 'str'> print(name4) # '大佬说':今天天气很好 gender = "male" country = "china" name="mike"
数据类型之列表类型list
-
[ ] 内用逗号分隔开多个任意类型的元素
-
作用:专门用来记录多个同种属性的值,并且存取都十分方便
# 0 1 2 3 l = [111, 3.3, [666, 777, 88], "abc"] print(type(l)) # <class 'list'> # 索引取值(从0开始的连续数字) print(l[0]) # 111 print(l[1]) # 3.3 print(l[2]) # [666, 777, 88] print(l[-1]) # "abc" print(l[2][0]) 666 hobbies = ["read", "music", "movie", "play"] print(hobbies[1]) # "music"
数据类型之字典类型dict
-
{ } 用逗号分隔开多个元素,每一个元素的组成都是key:value,键值对的形式,其中value可以是任意类型,而key通常是字符串类型
-
作用:按照key存放多个值,key反映的value的属性,能够更加精准的存储数据
d = {"k1": 111, "k2": 1.3, "k3": "abcdef", "k4": [111, 222, 333], "k5": {"a": 1, "b": 2}} print(type(d)) # <class 'dict'> print(d["k3"]) # abcdef print(d["k4"][1]) # 222 print(d["k5"]["a"]) # 1 # 案例:mike的个人信息 name = "mike" age = 18 gender = "male" level = 19 # 用列表记录个人信息非常的不清晰 # 0 1 2 3 info = ["mike", 18, "male", 19] print(info[1]) # 18 # 字典无法使用索引取值,需要借助于Key info = { "name": "mike", "age": 18, "gender": "male", "level": 19 } print(info["age"]) # 18 # 案例:存放多个同学的信息 students = [ {"name": "mike", 'age': 18, "gender": "male"}, {"name": "tom", 'age': 19, "gender": "male"}, {"name": "lili", 'age': 28, "gender": "female"}, ] print(students[1]['age']) # 19
数据类型之元组tuple
-
( )内用逗号隔开多个任意类型的元素,元素不支持修改,元组相当于不可变的列表
-
作用:用于记录多个固定不允许修改的值,单纯用于取
t = (11, 3.1, "jason", [11, 22, 33]) print(type(t)) # <class 'tuple'> # 如果元组内只有一个值,则必须加一个逗号,否则()就只是包含的意思而非定义元祖 t = (11,)
数据类型之集合set
-
作用:主要用于去重和关系运算
{}内逗号隔开多个元素,元素不是K:V键值对,集合具备以下三个特点 1)集合类元素必须是不可变类型 2)集合类元素不能重复 3)集合内元素无序 s = {1, 2, 3, 4} print(type(s)) # <class 'set'>
数据类型之布尔类型bool
-
作用:用来记录真假两种状态
# 布尔值只有两种状态 x = True y = False print(type(x)) # <class 'bool'> print(10 == 10y # True print(10 > 3) # True name = "tom" print(name == "mike") # False
与用户交互
获取用户输入
inp_name = input("请输入您的用户名:")
'''
将input获取到的用户输入绑定给变量名inp_name
input获取到的用户输入全部都会转成字符串
'''
print(inp_name,type(inp_name)) # geng <class 'str'>
# 案例:
inp_name = input("请输入您的用户名:") # inp_name = "geng"
inp_pwd = input("请输入您的密码:") # inp_pwd = "123"
格式化输出
print() # 输出
'''
1.括号可以使用逗号隔开多个元素一起打印
2.自带end参数 可以控制打印的排版
'''
print("1111",end='')
print("2222")
# 输出结果:11112222
# 将字符串中某些内容替换掉再输出就是格式化输出
"""
1.先使用占位符占位 %s
2.再使用%按照位置一一替换
"""
# 示例:
name = input("your name: ")
age = input("your age: ")
print("my name is %s my age is %s" % (name,age))
# 输出结果:my name is geng my age is 18
print("my name is %s my age is %d" % ("jack",19))
# 输出结果:my name is jack my age is 19
# %d 只能接收数字(了解)
print("my name is %s my age is %d" % ("jack","19")) # 报错
print("my name is %s my age is %s" % ("jack",[1,2,3]))
# 输出结果:my name is jack my age is [1, 2, 3]
基本运算符
1、算术运算符
python支持的算术运算符与数学上计算的符号使用是一致的
算数运算符 | 描述 |
---|---|
+ | 加,两个对象相加 |
- | 减,两个对象相减 |
* | 乘,两个对象相乘 |
/ | 除,相除后得到的返回值会保留整数与小数部分 |
// | 取整除,相除后得到的返回值只保留整数部分 |
% | 取余,相除后只返回余数 |
** | 幂,取一个数的n次方 |
salary = 3.3
res = salary * 12
print(10 + 1) # 11
print(10 / 3) # 3.3333333333333335
print(10 // 3) # 3
print(10 % 3) # 1000
print(10 ** 3) # 1000,10的3次方
print(10 + 3.1)
print(10 % 3)
# ps:整型和浮点型可以混着计算
2、比较运算符
比较运算用来对两个值进行比较,返回的是布尔值True或False
比较运算符 | 描述 |
---|---|
== | 等于,两个对象相等返回True,否则返回False |
!= | 感叹号等于,两个对象相等返回False,否则返回True |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
x = 10 # int
y = 10.0 # float
# 整型和浮点型比较
print(x == y) # True
m = 10 # int
n = "10" # str
# 仅限同类型
print(m == n) # False
# == 不限类型
print(10 == [1,2,3]) # False
print(10 + [1,2,3]) # 报错
print(10 == [1,2,3]) # False
print(10 != [1,2,3]) # True
print(10 > 3.1) # True
print(10 >= 3.1) # True
print(10 <= 3.1) # False
print(10 < 3.1) # False
3、赋值运算符
python语法中除了有=号这种简单的赋值运算外,还支持增量赋值、链式赋值、交叉赋值、
解压赋值,这些赋值运算符存在的意义都是为了让我们的代码看起来更加精简
- 增量赋值
复制运算符 | 描述 |
---|---|
= | 简单赋值运算 |
+= | 加法赋值运算 |
-= | 减法赋值运算 |
*= | 乘法赋值运算 |
/= | 除法赋值运算 |
//= | 取整赋值运算 |
%= | 取余赋值运算 |
**= | 幂赋值运算 |
age = 18 # 简单赋值运算
age += 10 # age = age + 10 加法赋值运算
print(age) # 28
age *= 10 # 乘法赋值运算
print(age) # 180
age %= 3 # age = age % 3 取余赋值运算
print(age) # 0
-
链式赋值
-
如果我们想把同一个值同时赋值给多个变量名,可以这么做
x = 10 y = x z = y # 链式赋值指的是可以用一行代码搞定这件事 x = y = z = 10 print(x, y, z) print(id(x), id(y), id(z))
-
-
交叉赋值
-
我们定义两个变量m与n,如果我们将m与n的值交换过来
m = 10 n = 20 # 方式一:利用中间变量 temp = m m = n n = temp print(m, n) # 20 10 # 方式二:交叉赋值指的是一行代码可以搞定这件事 m, n = n, m print(m, n) # 20 10
-
-
解压赋值
-
如果我们想把列表中的多个值取出来一次赋值给多个变量名,可以这么做
salaries = [11, 22, 33, 44, 55] mon1 = salaries[0] mon2 = salaries[1] mon3 = salaries[2] mon4 = salaries[3] mon5 = salaries[4] # 解压赋值:左右两边个数相等 mon1, mon2, mon3, mon4, mon5 = salaries # 变量名变少了 mon1, mon2, mon3, mon4 = salaries # 错误 # 变量名变多了 mon1, mon2, mon3, mon4, mon5, mon6= salaries # 错误 # 如果只想取前面的几个值,可以用*_匹配 mon1, mon2, mon3, *_ = salaries print(mon1) # 11 print(mon2) # 22 print(mon3) # 33 print(_) # [44, 55] # 取倒数两个值 *_, last2, last1 = salaries print(last1) # 55 print(last2) # 44 print(_) # [11, 22, 33] # 取前一个以及后两个值 mon1,*_,last2,last1=salaries print(mon1) # 11 print(last1) # 55 print(last2) # 44 # 如果想取中间的值,*加middle _,*middle,_=salaries print(middle) # [22, 33, 44] print(_) # 55
-
4、逻辑运算符
逻辑运算符用于连接多个条件,进行关联判断,会返回布尔值True或False
-
not:非,将紧跟其后的那个条件取反,not优先级最高
print(not 10 > 3) # False
-
and:与,连接多个条件,且多个条件必须为True,最终结果才为True
print("jack" == "jack" and 10 > 3) # True print("jack" == "Jack" and 10 > 3) # False
-
or:或,连接多个条件,有一个条件为True,最终结果就为True
print("jack" == "jack" or 10 > 3) # Ture print("jack" == "Jack" or 10 > 3) # Ture
优先级:not>and>or
-
① 三者的优先级关系:not>and>or,同一优先级默认从左往右计算。
3>4 and 4>3 or not 1 == 3 and 'x' == 'x' or 3 >3 print(3>4 and 4>3 or not 1==3 and 'x' == 'x' or 3 >3) (3>4 and 4>3) or (not 1==3 and 'x' == 'x') or 3 >3 # True
-
② 但是我们在编写的时候应该人为的规定好优先级,其实意义与上面一样
-
原理为:
-
(1) not的优先级最高,就是把紧跟其后的那个条件结果取反,所以not与紧跟其后的条件不可分割
-
(2) 如果语句中全部是用and连接,或者全部用or连接,那么按照从左到右的顺序依次计算即可
-
(3) 如果语句中既有and也有or,那么先用括号把and的左右两个条件给括起来,然后再进行运
-
print(1 != 1 or 3 > 4 and not "xx" == "jack" or 1 > 10 and 9 > 3 and 1 > 0) 1 != 1 or (3 > 4 and not "xx" == "jack") or ((1 > 10 and 9 > 3) and 1 > 0) # False
-
-
③ 短路运算:偷懒原则(能少算就尽量少算)
- 逻辑运算的结果一旦可以确定,那么就以当前处计算到的值作为最终结果返回
print(1 > 0 and 1 != 1 and 3 > 2) # False print(1 > 0 or 1 != 1 or 3 > 2) # True
5、成员运算
-
in与not in
判断某一个个体在不在某个群体内-
in :某一个对象包含于另一个对象则返回True,字符串,列表,字典,集合,元祖都支持成员运算
-
not in 某一个对象没有包含于另外一个对象则返回True
-
```python
name_list = ['jason', 'kevin', 'tony', 'jackson']
name = input('请输入您要查询的学生姓名>>>:')
# print(name in name_list)
# print(name not in name_list)
# print('j' in 'jason j j j n n')
print('jason' in {'username': 'jason', 'age': 18}) # False
# 字典默认暴露给外界的只有K
print('username' in {'username': 'jason', 'age': 18})
```
6、身份运算
-
is与 = =
判断两个数据的值和内存地址是否相等-
is :判断左右两个值内存地址(身份id)是否相等
-
== :判断左右两个值是否相等
-
注意:
(1)如果内存地址(id)相等,意味着 type(类型) 和 value(值)必定相等
x = 1000
y = x
print(x is y)
(2)value (值)相等 type(类型)肯定相等,但内存地址(id)不一定相等
C:\Users\oldboy>python3
Python 3.8.6 (tags/v3.8.6:db45529, Sep 23 2020, 15:52:53) [MSC
v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more
information.
>>> x=1000
>>> y=1000
>>> id(x)x
2577369562032
>>> id(y)
2577369562096
>>>
>>> x is y
False
>>> x == y
True
>>>
补充了解:布尔值分为两大类
-
1、显式的布尔值:能明确地得到True或False,比如x=True,10 > 3, 10 > 3 and 1==1
3 == 1 and True and 10 > 3 print(3 == 1 and True and 10 > 3) # False
-
2、隐式的布尔值:所有的数据类型的值都可以当作隐式的布尔值,其中0、None、空对应隐式布尔值为False,其余对应隐式布尔值为True
10 and 3 and 4 > 2 print(10 and 3 and 4 > 2) # True print(10 and 0 and 4 > 2) # 0 print(0 and 2 or 1) # 1