首页 > 技术文章 > 初识基本数据类型,与用户交互,格式化输出,基本运算符

gengfenglog 2020-12-18 20:03 原文

初识基本数据类型

  • 什么是数据类型?

在现实生活中存储数据的方式和表现形式有很多。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
    

与用户交互

u=356406006,3900003378&fm=26&fmt=auto

获取用户输入

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、成员运算

  • innot 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
    

推荐阅读