Welcome to kimi's blog

数据类型与逻辑运算

数据类型与逻辑运算

数据类型了解

数据类型有整数型、浮点型、字符串、列表、字典

整型 Int

通俗一点其实就是整数

应用场景:年龄、班级人数、年份

eg;
age = 18
stu_num = 78
year = 2022

浮点型 Float

网址:https://baike.baidu.com/item/浮点数/6162520?fromModule=lemma_search-box

浮点数其实就是小数

应用场景:身高、体重、薪资

eg:
height = 1.82
weight = 65
salary = 17

字符串String

在编程语言中,字符串就是文本的数据类型>>>>:引号引起来的部分都是字符串

eg:
name = '康辉'
addr = '北京'
Bobby = '看书'
  1. 定义字符串有四种方式

    name = '康辉'
    name = "康辉"
    name = '''康辉'''
    name = """康辉"""
    
  2. 为什么定义字符串需要有多种方式

    我们在字符串中编写文本也可能会使用到引号 为了避免冲突 有了多种方式

    ​ info = "Jason老师说:‘年轻不是用来挥霍的资本’"

  3. 如何区分三个引号是字符串还是注释

    注释左侧是否含有赋值符号和变量名,如果有是字符串,没有则为注释

列表List

大白话的意思其实就是可以储存多个数据值的类型,并且可以非常方便的取

应用场景:存储多个数据值 并且将来可能需要单独取其中一些

eg:
name_list = [12, 23, 34, 56, 45]
  • 列表的文字描述

列表是用中括号括起来 的数据值,内部可以存放多个数据值,数据值与数据值之间用逗号隔开,数据值可以是任意数据类型

list = [11, 12.3, "董卿", [11,22]]
  • 索引取值

    起始数字是从 0开始

    name_list = [12, 23, 34, 56, 45]
    列表中12对应的索引是0,
    23对应的索引是1,
    34对应的索引是2,
    56对应的索引是3,
    45对应的索引是4
    列表索引的区间是0到4
    
    

字典Dict

字典能够非常精确的存储和表达数据值的含义

info_dict = {
		'name' : '康辉',
		'age' :  18,
		'hobby' : 'read'
}
  1. 字典文字描述

    大括号括起来的数据值,内部可以存放多个数据,数据的组织形式是K:V键值对

    键值对与键值对之间逗号隔开

    ​ K是对v的描述性性质的信息(解释说明),一般都是字符串类型,V 是真正的数据值,也可以是任意数据类型

  2. 按k 取值

    字典只能按K取值,因为字典是无序的,没有索引的概念

    info_dict = ['username']
    

数据类型详解

数据类型分为整型、浮点型、列表、字符串和字典

整型 Int

大白话就是整数

应用场景:年龄、班级人数

eg:    
 name = 'kevin'
 age = 18
 stu_sum = 56

浮点型 Float

用计算机语言就是小数的数据值

应用场景:身高、体重

eg:
name = ’kevin'
haight = 1.65
weight = 45.6

字符串 String

用计算机语言就是文本的数据类型:引号引起来的部分都是字符串

引用场景:姓名

eg:
name = '康辉'
addr = '北京'
Bobby = '看书'

定义字符串有四种方式

eg:
['小七', '小五', '张三']
[11,22,33,44,55,66,77]

索引值对应的数据值
[11,22,33,44,55,66,77]
[0,1 ,2,3,4,5,6]

使用

1.数字可以进行加减乘除等运算,字符串呢?也可以,但只能进行"相加"和"相乘"运算。
 name = 'kiki'
age = '18'
name + age #相加其实就是简单的字符串拼接
'kiki18'
name * 5 #相乘就相当于将字符串相加了5次
'kikikikikikikikikiki'

字典 Dict

字典一般是以键值对(k:v)的形式存在,一般只要取到键值对的k,对应就是v的值,键值对与键值对之间逗号隔开,字典是无序

eg;
{'name':'kevin',
'age':16
'year':18
'hometown':'云南'}

布尔常量bool

1.常用来判断事物的对错,是否可行,只用于流程控制

2.只要两种状态

	True    对的  真的  可行的
	False   错的  假的 不可行的

3.python中所有数据都自带布尔值

​ 布尔值为false的数据有:0 None '' [] {}

​ 布尔值为True的数据有:除了上述的都是True

4.存储布尔值的变量名一般推荐使用is 开头

​ is_delete = False

​ is_alive = True

"""
很多程序中提供的注销账户的功能 其实底层并没有删除数据 而是修改了数据的状态
id		username	password    phone    is_delete
1		jason		123		   110     	 1
2		kevin		321		   120		  0
"""

元组tuple

1.元组也称为'不可变'的列表

​ 元组内索引绑定的内存地址不能修改

2.元组是用小括号括起来 ,内部存放多个数据值,数据值与数据值之间是用逗号隔开,数据值可以是任意任何数据类型

3.代码实现:

eg:	a1 = (1, 24, 'kevin')

4.元组与列表的对比


l = [11,22,33]
print(l[0])  # 获取0对应的值
l[0]=666
print(l)  # [666, 22, 33]

b = (11, 22, 33)
print(b[0])  # 获取0对应的值
b[0] = 888
print(b)  # 报错

注意:元组是不可变的列表

eg: B
c = (11, 22, [345, 566])
c[2][1] = 888
print(c)    # (11, 22, [345, 888])

"""
A.直接报错
B.(11, 22, [345, 888])
C.不知道,超出了我的认知

5.元组内如果只有一个数据值

# 元组内只有一个数据值
# 第一种情况下
d1 = (1)
d2 = (22.22)
d3 = ('kevin')
print(type(d1), type(d2), type(d3))   # <class 'int'> <class 'float'> <class 'str'>

# 第二种情况下
d4 = (1,)
d5 = (22.22,)
d6 = ('kevin')
print(type(d4), type(d5), type(d6))  # <class 'tuple'> <class 'tuple'> <class 'str'>


以后在使用可以存放多个数据值的数据类型时,如果里面暂时只有一个数据值,那么也建议你加上逗号

集合set

  1. 集合只能用于去重和关系运算

    ​ 后面详细讲

  2. 集合内数据只能是不可变类型

    ​ 后面详细讲

  3. 大括号括起来,内部存放多个数据值,数据值与数据值之间逗号隔开,数据值不是k:v键值对

  4. 代码的实现

    eg:
    a1 = {1, 2, 3, 4, 5, 6}
    
  5. 定义空集合与空字典

      {}      默认是字典
      set()   定义空集合
    
eg:
k1 = {}
k2 = {}
se =set()
print(type(k1))  # <class 'dict'>
print(type(k2))  # <class 'dict'>
print(type(se))  # <class 'set'>

空集合一定要set()

与用户交互

"""
以前银行取钱只能拿着存折去柜台跟柜姐交流才可以
	你想干嘛 我想取钱 
	请输入密码 滴滴滴密码
	想取多少钱 我想取一万
	...
随后程序代替了小姐姐跟我们交互
	ATM机器
"""
  1. 获取用户输入,使用input

    input  # 获取用户的输入
    
    username = input('请输入您的用户名:')  #请输入您的用户名:花花
    
    """
    1.先执行input 获取用户输入
    2.将输入的数据绑定给变量名
    3.以后在程序中就可以使用变量名反复调用用户数据
    """
    

    强调:input 获取到的数据都会统一处理成字符串类型

  2. 输出内部信息

    print()
    1.括号内既可以放数据值也可以放变量名,并且支持多个数据值(变量名),之间用逗号隔开即可
    2.print 自带换行符
    	换行符: \r\n  \n (斜杠与字母组合到一起可能产生特殊的含义)
    3.print 也可以切换结束符
    	print(数据,end='默认是\n' )
    	
    
    扩展:
    python2与python3中两个关键字的区别
    	python2中
    		input 方法需要用户自己提前指定数据类型,写什么类型就是什么类型
    		raw_input 方法与python3 中的input一致  输入的统一处理成字符串
    		
    	python2中
    		print方法有两种使用方式
    		print 数据值
    		print(数据值)
    		
    	python3中
     input都是统一处理成字符串形式
    		
    		
    		eg:
    		input  #获取数据
            date = input('请输入数据:')
            print(type(date))  # 得到的是字符串<class 'str'>
    

    image

image

格式化输出

提前定义好一些内容,将来需要使用的时候可以局部修改

​ eg: 奖状、录取通知书、合同

代码实现:

现实生活中用下划线提示别人要填写的内容

在程序中需要使用占位符: %s %d

"""
单个占位符
"""
info = '%s同学您好'
print(info % 'kevin' )  # kevin同学您好
print('%s 同学你好' % '小七')  #小七 同学你好
print('%s 朋友你好' %('kiki',))  # kiki 朋友你好

"""多个占位符"""
dr = '姓名:%s, 年龄:%s, 爱好:%s'
print(dr % ('kimi', 18,'listening'))  # 姓名:kimi, 年龄:18, 爱好:listening
print('姓名:%s, 年龄:%s, 爱好:%s' %('kiki', 18, '画画'))  # 姓名:kiki, 年龄:18, 爱好:画画
注意事项:
print('my name is %s my age is %s' % ('kiki',))  #少了不行
print('my name is %s my age is %s' % ('kiki',18, 'read'))  #多了也不行

"""不同占位符的区别"""
demo1 = '%s 您好,你的银行余额为%s,请确认你的预留手机号%s'
print(demo1 % ('kimi',234555,1318655))  # kimi 您好,你的银行余额为234555,请确认你的预留手机号1318655

%s 常见的数据类型都支持
%d 支持数字类型


demo1 = '%d 您好,你的银行余额为%d,请确认你的预留手机号%d'
print(demo1 % ('kimi',234555,45))  #  %d format: a number is required, not str



print('%08d'% 123)  # 00000123
print('%08d'% 1234324324)  # 1234324324

运算符

基本运算符

算数运算符

python支持的算术运算符与数学上计算机的符号使用是一致的,并在此基础稍作变化

运算符 描述 实例
= 简单的赋值运算符 c=a+b将a+b的运算结构赋值为c
+= 加法赋值运算符 c += a 等效于c = c+ a
-= 减法赋值运算法 c -= a 等效于c = c- a
*= 乘法赋值运算符 c *= a 等效于c = c *a
/= 除法赋值运算符 c /=a 等效于c = c /a
%= 取模赋值运算符 c % = a 等效于 c = c %a
**= 幂赋值运算符 c **= a 等效于c = c **a
//= 取整数赋值运算符 c//= a 等效于c = c//a

比较运算符

比较运算用来对两个值进行比较,返回的是布尔值True 或False

比较运算符 名称 实例 结果描述
== 等于 x==y 如果x恰好等于y,则为真
!= 不等于 x!=y 如果x恰好不等于y, 则为真
> 大于 x>y 如果x大于y,则为真
< 小于 x<y 如果x小于y,则为真
>= 大于或等于 x>=y 如果x大于或等于y,则为真
<= 小于或等于 x<=y 如果x小于或等于y,则为真

常用运算符

链式赋值

name = 'kevin'
name1 = name
name2 = name1
# 链式赋值
print(name2)  #name2= name1 = name='kevin'

链式赋值可以用一行代码搞定这件事
a=b=c=10
print(a,b,c)  #(10,10,10)

交叉赋值

如果要想把m和n的值交换过来,可以这么做

# 方式1:采用中间变量
temp = m
m = n
n = temp
print(m,n)  #100 200

# 方法2: 交叉赋值语法
m, n= n, m
print(m,n)  #100 200

解压赋值

name_list = ['amy', 'kiki', 'aby', 'kevin' ]
"""low 的写法"""
name1 = name_list[0]
name2 = name_list[1]
name3 = name_list[2]
name4 = name_list[3]
print(name1, name2, name3,name4)

""" 解压赋值语法"""
name1, name2, name3, name4 = name_list
print(name1, name2, name3,name4)

""" 解压赋值在使用的时候,正常情况下需要保证左边的变量名和右边的数据值个数一致"""
name1, name2 =name_list  #变量名少了不行>>>:ValueError: too many values to unpack (expected 2)
name1, name2, name3, name4, name5 = name_list  # 变量名多了也不行>>>:ValueError: not enough values to unpack (expected 6, got 5)

"""当需要解压的数据个数特别多,并且我们只需要使用其中的几个,那么可以打破上述的规则"""
a, *b = name_list  # * 会自动接收多余的数据,组成列表赋值给后面的变量名
print(a,)  # amy
print(*b)  # kiki aby kevin
c, d, *k = name_list
print(c)  # aby
print(d)  # kiki
print(*k)  # aby kevin
e, *f, g =name_list
print(e)  # amy
print(*f)  # kiki aby
print(g)  # kevin

""" 当数据值不准备使用的时候,可以使用下划线作为变量名绑定"""
a,*_,c = name_list

ps:字符串、字典、元组、集合类型都支持解压赋值

逻辑运算符

逻辑运算符用于连接多个条件,进行关联判断,会返回布尔值True或False

链接多个and

​ 可以用and连接多个条件,会按照从左到右的顺序依次判断,一旦某一个条件为False,则无需再往右判断,可以立即判定最终结果就为False,只有在所有条件的结果都为True的情况下,最终结果才为True。

	print(1 < 10 and 666)  # 666  成立
    print(1 < 10 and 2 < 8)  # True  成立
    print(111 and 222)  # 222  成立
    如果需要你准确的说出具体的结果值  那么需要按照下列方式
    如果and左边的条件是成立的 那么就完全取决于右边的条件
    右边如果直接是数据值 那么结果就是该数据值 如果是含有表达式 则为布尔值

多个or

可以用or连接多个条件,会按照从左到右的顺序依次判断,一旦某一个条件为True,则无需再往右判断,可以立即判定最终结果就为True,只有在所有条件的结果都为False的情况下,最终结果才为False

  1 > 2 or 4 < 8 or 10 < 1 or 1 == 2   如果条件中全部由or组成那么判断起来非常的简单 只要发现一个成立 结果就成立   
    # print(1 < 10 or 666)  # True
    # print(666 or 1 > 10)  # 666
    print(0 or False)  # False
    print(0 or 111)  # 111
    规律用and

not 非
取反
类似于说反话

三种混用

"""
三者混合使用的时候有优先级之分 但是我们不需要记忆优先级 应该通过代码的形式提前规定好优先级
	eg: 先乘除有加减  但是可以使用括号来改变优先级
	(3>4 and 4>3) or ((1==3 and 'x' == 'x') or 3 >3)
"""

成员运算符

name_list = ['jason', 'kevin', 'oscar', 'jerry']
print('kiki' in name_list)  # False
print('kiki' not in name_list)  #True
print('j' in name_list)  # False 列表最小单位是数据值再细分

s1 = 'hello world'
print('d' in s1)  #字符串最小单位是单个单个的字符

d1 = {
      'username': 'kiki',
      'pwd': 1318888
}
print('kiki' in d1)  # False 字典成员运算只有键参与
print('username' in d1)  # True      'username' 'pwd'

身份运算符

需要强调的是:==双等号比较的是value是否相等,而is比较的是id是否相等

"""
id()  返回一串数字 该数字可以看成是内存地址
"""
is     判断内存地址是否相同
==     判断数据值是否相同

l1 = [11, 22, 33, 44, 55, 66, 77, 88]
l2 = [11, 22, 33, 44, 55, 66, 77, 88]
print(l1==l2)  # True
print(id(l1))  # 1938852130688
print(id(l2))  # 1938851977152
print(l1 is l2)  #False

# 小整数池
i1 = 11
i2 = 11
print(i1 is i2)  # True


s1 = 'jason jason jason'
s2 = 'jason jason jason'
print(s1 is s2)  # True
不同的环境下可能优化的程度不一样 

"""
了解
    值相同 内存地址可能不同
    内存地址相同 值肯定相同
"""

作业:

问题:2.获取用户输入并打印成下列格式
	 ------------ info of Jason -----------
    Name : Jason
    Age  : 18
    Sex  : male
    Job  : Teacher 
    ---------------- end -----------------
    
    
答案:
# 第一版本
print('------------ info of Jason -----------')
input('Name:')
input('Age:')
input('Sex:')
input('Job:')
print(' ---------------- end -----------------')

# 第二版本
user_name = input('请输入您的用户名:')
user_age = input('请输入您的年龄;')
user_sex = input('请输入您的性别:')
user_jod = input('请输入您的工作:')
t1 = (user_name, user_name, user_age, user_sex, user_jod)
print('------------ info of %s -----------\n'
      'Name:%s\n'
      'Age:%s\n'
      'Sex:%s\n'
      'Job:%s\n'
      ' ---------------- end -----------------' % t1)
	  
	  
 #teacher
 
 # 1先定义一个打印的模板
info_demo = """
----------info of %s-----------
Name:%s
age:%s
job:%s
-----------end------------------"""
# 2.获取获取的输入
username = input('请输入您的用户名:')
user_age = input('请输入您的年龄:')
user_job= input('请输入您的职业:')
# 3、格式化输出
print(info_demo %(username,username,user_age,user_job))
posted @ 2022-09-26 21:42  魔女宅急便  阅读(144)  评论(0)    收藏  举报
Title