整型(int)
# 大白话:整数
# 作用
> 记录年龄、身高、电话号码
# 如何定义
> age = 18
浮点型(float)
# 大白话:小数
# 作用
> 记录薪资、bmi
# 如何定义
> hight = 1.9
字符串(str)
# 作用
> 表示描述性质信息的,如人的名字,家庭住址
# 如何定义
> 方式1:
name = 'kevin'
> 方式2:
name = "kevin"
> 方式3:
name = '''kevin''' # (当左边有赋值符号和遍历名的时候,它就是字符串)
> 方式4:
name = """kevin""" # (当左边有赋值符号和遍历名的时候,它就是字符串)
列表(list)
# 作用
> 用来存取多个相同属性的值
# 定义
> name_list = ['gg', 'aa', 'bb'] # 存
>> print(name_list[索引]) # 取
> list = [123, 'asd', ['www', 999]] # 存
>> print(name_list[索引][索引]) # 取
'索引可以正取,也可以倒取,正取从0开始,倒取从-1开始'
>>> 中括号括起来,内部可以存放多个元素,元素与元素之间使用逗号分隔,可以是任意的数据类型,也可以嵌套
# 练习
> 取出下列列表中的 kevinNB
x = [1, 1.1, 'kevin', [666, 777, 888, 'tony', [22,33, 'kevinNB']]]
>> print(x[-1][-1][-1]) # 倒取
>> print(x[3][4][2]) # 正取
字典(dict)
# 作用
> 用来存取放多个值,按照key:value的方式存放的值,取的时候可以通过key而非索引去取值,key对value是有描述性功能的
# 定义
> x = {'name':'gg', 'age':18, 'hight':1.9} # 存
>> print(x['hight']) # 取
>>> 在{}内用逗号分隔开多个元素,每一个元素都是key:value的格式,其中value可以是任意类型,key大多数情况都是字符串类型,也可以嵌套
# 练习
> 取出下面字典中的 music
info = {
'username':'tony',
'addr':{
'国家':'中国',
'info':[666, 999, {'编号':466722, 'hobby':['read', 'study', 'music']}]
}
}
>> print(info['addr']['info'][2]['hobby'][2])
布尔值(bool)
# 作用
> 用于判断的条件
# 定义
'只有两种情况: True|False'
>> print(10 > 3)
>>> True
>> print(type(10 > 3))
>>> <class 'bool'>
>> print(10 < 3)
>>> False
>> print(type(10 < 3))
>>> <class 'bool'>
'''在Python中,所有的数据类型都可以转为布尔值'''
"""在如此多的数据类型中只需要记住:0、None、'(空)',这三类为False,其余为真 """
> print(bool())
>> False
> print(bool(0))
>> False
> print(bool(None))
>> False
> print(bool([]))
>> False
> print(bool({}))
>> False
元组(tuple)
# 作用
> 与列表一样,用来存取多个相同属性的值,但他是不可变列表
# 定义
> t = ('aa', 'bb',111) # 存
>> print(t[索引]) # 取
>>> 用()括起来,可以存放多个元素,元素与元素直接用逗号隔开,元素不可变
>> x = ['ff', 11, 22]
>> x[1] = 33
>> print(x[1])
>> 33
'由上可以看出列表中的元素可以发生改变'
>> x = ('ff', 11, 22)
>> x[1] = 33
>> print(x[1])
>> TypeError: 'tuple' object does not support item assignment
'由此可以看出元组中的元素是不可变的'
'''
> x=('dsasa')
> print(type(x))
> <class 'str'>
> x=('dsasa', )
> print(type(x))
> <class 'tuple'>
当元组中只有一个元素时,一定要加上逗号
'''
集合(set)
# 定义:大括号括起来,内部可以存放多个元素,元素与元素之间逗号隔开,但是不是K:V键值对的形式
s = {11,22,33,44}
'''集合中的元素不能直接取出'''
# 特点:无序 去重 集合运算
> x = {11, 22, 33, 44, 22, 33}
> print(x)
> {33, 11, 44, 22} # 无序、去重
与用户交互
# 输入 (input)
'''在python3中的input会将用户输入的任何内容都存成字符串类型'''
> pwd = input('请输入你的密码: ')
> print(pwd, type(pwd))
> 123 <class 'str'>
'''在python2中的raw_input用法与python3的input是一摸一样的'''
# 输出(print)
> print(123, end='') # end=''(换行)
格式化输出
# 什么是格式化输出?
> 把一段字符串里面的某些内容替换掉之后再输出,就是格式化输出。
# 为什么要格式化输出?
> 我们经常会输出具有某种固定格式的内容,比如:'亲爱的xxx你好!你xxx月的话费是xxx,余额是xxx‘,我们需要做的就是将xxx替换为具体的内容。
# %s称为占位符(掌握)可以为所有的数据类型占位
> res = '亲爱的%s你好!你%s月的话费是%s,余额是%s'
> print(res % ('kevin', 2, 1000, 888))
> 亲爱的kevin你好!你2月的话费是1000,余额是888
# %s占位只有一个时,打印可以不带括号
> res1 = 'my name is %s'
> print(res1 % 'tony')
> my name is tony
# %d占位符(了解)只能给数字类型占位
print("金额:%d" % 111) # 金额:111
# %08d --> 8代表打印出的几位,缺少就从左向右用0补充
print("金额:%08d" % 666666) # 金额:00666666
print("金额:%08d" % 99999999999) # 金额:99999999999
| 假设 |
a=10 |
b=20 |
| 运算符 |
描述 |
案列 |
| + |
两个对象相加或将两个字符串拼接 |
a + b 输出结果 30 |
| - |
得到负数或是一个数减去另一个数 |
a + b 输出结果 -10 |
| * |
两个数相乘或是返回一个被重复若干次的字符串 |
a * b 输出结果 200 |
| / |
x除以y |
b / a 输出结果 2 |
| % |
取模,返回除法的余数 |
b % a 输出结果 0 |
| ** |
返回x的y次幂 |
a**b为10的20次方 输出结果为 100000000000000000000 |
| // |
取整除,返回商的整数部分(向下取整) |
10 // 3 --> 3 |
|
|
-10 // 3 --> -4 |
# 实列
a=10
b=3
print(a + b) --> 13
print(a - b) --> 7
print(a * b) --> 30
print(a / b) --> 3.3333333333333335
print(a % b) --> 1
print(a ** b) --> 1000
print(a // b) --> 3
m = 'aaa'
n = 'bbb'
print(m + n) --> aaabbb
print(m * 2) --> aaaaaa
print(n * 4) --> bbbbbbbbbbbb
比较运算符
'假设变量a为10,变量b为20'
# ==
> 比较对象是否相等
>> print(a == b) --> False
# !=
> 比较两个对象是否不相等
>> print(a != b) --> True
# >
> 返回x是否大于y
>> print(a > b) --> False
# <
> 返回x是否小于y
>> print(a < b) --> True
# >=
> 返回x是否大于等于y
>> print(a >= b) --> False
# <=
> 返回x是否小于等于y
>> print(a <= b) --> True
赋值运算符
| 运算符 |
描述 |
实列 |
| = |
简单的赋值运算符 |
c = a + b 将 a + b 的运算结果赋值为 c |
| += |
加法赋值运算符 |
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 |
赋值
# 链接赋值
> a=b=c=10
# 交叉赋值
m = 10,n = 20,实现n = 10,m=20
> 方法一:
m=10
n=20
k=m
m=n
n=k
print(m,n)
20 10
> 方法二:
m,n=n,m
print(m,n)
20 10
# 解压赋值 (列表)
names_list = ['kevin', 'tony', 'tank', 'tom']
'''左右两边的个数必须一致'''
> x, y, z, d = names_list
> x, y, z, d = ['kevin', 'tony', 'tank', 'tom']
'''当一个列表有很多值时,需要取值时,左右两边个数一致,中间可以用(*x)占位'''
> x,*a, d = names_list
> print(x,d)
>> kevin tom
# 解压赋值 (字典)
info={'name':'GG','age':18,'sex':'male'}
> x, y, z=info
> print(x,y,z)
> name age sex
'''对于字典来收,解压出来的是key'''
逻辑运算符(and、or、not)
and(与)
# 可以用and连接多个条件,会按照从左到右的顺序依次判断,一旦某一个条件为False,则无需再往右判断,可以立即判定最终结果就为False,只有在所有条件的结果都为True的情况下,最终结果才为True。
# 练习题:
2 > 3 and 1 != 1 and True and 3 > 2
or(或)
# 可以用or连接多个条件,会按照从左到右的顺序依次判断,一旦某一个条件为True,则无需再往右判断,可以立即判定最终结果就为True,只有在所有条件的结果都为False的情况下,最终结果才为False
# 练习题:
2 > 1 or 1 != 1 or True or 3 > 2
not 非(取反)
not True
'''
优先级:not > and > or
'''
成员运算符(in、not in)
# 判断某个个体是否在某个群体中
符号:in(在) not in(不在)
name_list = ['kevin', 'jack', 'tony', 'tom']
> print('kevin' in name_list)
> True
> print('kevin' not in name_list)
> False
身份运算符(is、is not)
# 判断两个值是否相等
'''
is --> 比较的是内存地址
== --> 比较的是值
'''
s1 = ['a', 'b', 'c']
s2 = ['a', 'b', 'c']
> print(s1 == s2)
> True
> print(id(s1))
> print(id(s2))
> print(s1 is s2)
> False
'''
值相等的内存地址不一定相等
内存地址相等的值一定相等
'''
流程控制
# 控制事物的执行流程
> 流程控制总共有3种情况:
>> 顺序结构
# 就是自上而下的执行
>> 分支结构
# 分支结构就是根据条件判断的真假去执行不同分支对应的子代码
>> 循环结构
# 循环结构就是重复执行某段代码块
流程控制之if
"""
注意事项:
1. 根据条件的成立与否,决定是否执行if代码块
2. 我们通过缩进代码块,来表示代码之间的从属关系
3. 不是所有的代码都拥有子代码块
4. 我们推荐使用缩进4格
5. 同属于一个代码块的子代码块缩进量一定要一样
ps:遇到冒号就要回车换行,缩进
"""
# if语法
> 语法1
if 条件:
代码1
代码2
代码3
....
> 语法2
if 条件:
代码1
代码2 ---> 条件成立执行
代码3
...
else:
代码1
代码2 ---> 条件不成立执行
代码3
...
> 语法3
if 条件1:
条件1成立执行的子代码块
elif 条件2:
条件1不成立条件2成立执行的子代码块
elif 条件3:
条件1、2不成立条件3成立执行的子代码块
elif 条件4:
条件1、2、3不成立条件4成立执行的子代码块
else:
以上条件都不成立的时候执行的代码块
# else语句可有可无
# 练习
根据用户名的不同打印不同的身份
kevin:管理员 jack:保安 tom:保洁 tank:销售 其余的都是普通人
dic = {
'kevin': '管理员',
'jack': '保安',
'tom': '保洁',
'tank': '销售',
}
username = input('请输入人名:')
if username not in dic:
print('普通人')
else:
print(dic[username])
# if判断之嵌套
age = 18
height = 1.6
weight = 90
is_beautiful=True
is_success=True
if age < 20 and height == 1.6 and weight<100 and is_beautiful:
print('给个微信呗!!!')
'''要么给,要么不给'''
if is_success:
print('吃饭 看电影...')
else:
print('慢走不送!!!')
else:
print('好吧')
流程控制之while循环
"""
while语法格式
while 条件:
循环体
"""
while True:
username=input('username:>>>')
password=input('password:>>>')
if username == 'kevin' and password == '123':
print('登录成功')
else:
print('登录失败')
while+break
# count = 0
while True:
username=input('username:>>>')
password=input('password:>>>') #
if username == 'kevin' and password == '123':
print('登录成功')
break # 结束本层循环
else:
print('登录失败')
break本层含义
while True:
username=input('username:>>>')
password=input('password:>>>') #
if username == 'kevin' and password == '123':
print('欢迎光临')
while True:
cmd=input('请输入你的指令:>>>')
if cmd == 'q':
# 结束程序
break
print('正在执行你的指令:%s' % cmd)
break
else:
print('登录失败')
print(123)
标志位的使用
flag = True
while flag:
username=input('username:>>>')
password=input('password:>>>') #
if username == 'kevin' and password == '123':
print('欢迎光临')
while flag:
cmd=input('请输入你的指令:>>>')
if cmd == 'q':
# 结束程序
flag = False
print('正在执行你的指令:%s' % cmd)
else:
print('登录失败')
案列
# 猜年龄的游戏
"""
1. 普通要求
三次机会
2. 拔高要求
三次之后再次询问是否继续输入
"""
# 三次机会,猜对了,就直接结束
# 先写主体功能
# 1. 先定义一个年龄出来
real_age = 18
# 定义一个计数器
count = 1
while count < 4:
# 2. 用户输入年龄
guess_age = input('请输入你猜测的年龄:>>>') # 数字
# 2.1 把字符串的数字转为整型,int,可能会出现bug
guess_age = int(guess_age)
# 3. 判断输入的年龄和真实年龄是否一样
if guess_age > real_age:
print('猜大了')
# count+=1
elif guess_age < real_age:
print('猜小了')
# count+=1
else:
print('哎呀,猜对了')
break
# 优化
count+=1
'''拔高'''
# 1. 先定义一个年龄出来
real_age = 18
# 定义一个计数器
count = 1
while count < 4:
# 2. 用户输入年龄
guess_age = input('请输入你猜测的年龄:>>>') # 数字
# 2.1 把字符串的数字转为整型,int,可能会出现bug
guess_age = int(guess_age)
# 3. 判断输入的年龄和真实年龄是否一样
if guess_age > real_age:
print('猜大了')
# count+=1
elif guess_age < real_age:
print('猜小了')
# count+=1
else:
print('哎呀,猜对了')
break
# 优化
count+=1
if count == 4:
# 询问:是否再次输入
cmd = input('三次机会使用完了,是否再次输入yes/no')
if cmd == 'yes':
count=1
else:
print('结束')
break
----------------------------------------------------------------------------------------------------
age = 18
num = 0
while num < 3:
age_info = input('请输入你要猜的年龄>>>')
if age_info.isdigit():
age_info = int(age_info)
if age_info > age:
print('猜大了')
num += 1
print('你已经猜了%s次' %num)
elif age_info < age:
print('猜小了')
num += 1
print('你已经猜了%s次' % num)
else:
print('猜对了')
break
if num == 3:
z = input('继续请按a,退出请按b >>>')
if z == 'a':
num = 0
else:
break
else:
print('年龄是数字,请输入数字')
while+continue
# 1. 使用循环打印出0-9的数字
n = -1
while n < 10:
n += 1
print(n)
# 2. 打印0-10的数字不打印6
n = -1
while n < 10:
n += 1
if n == 6:
continue
print(n)
'''continue结束本次循环,并且回到while循环的条件处从新判断'''
while+else(了解)
# count=0
# while count < 10:
# print(count)
# count+=1
# else:
# print('哈哈哈哈')
count=0
while count < 10:
if count ==5:
count+=1
continue
print(count)
count+=1
else:
print('哈哈哈哈')
'''当while循环没有被中断(break)的时候,就会执行'''
死循环
'''在程序中,可千万不能出现死循环'''
while True:
print(100)
'''能用for循环实现的,都不要使用while循环'''
for循环
# 1. 使用while循环打印以下列表中得数据
name_list = ['kevin', 'tony', 'jack', 'tom']
# i=0
# while i<4:
# print(name_list[i])
# i+=1
for name in name_list:
print(name)
"""
语法格式:
for 变量 in 可迭代对象: 字符串、列表、字典、元组
print(name)
"""
for i in 'helloworld':
print(i)
PS:for后面的变量名命名的时候,如果没有特殊的含义,我们一般使用i,j,k,v,item等等
'''重点'''
d = {'username':'kevin', 'age':18, 'hobby':'music'}
for i in d:
print(i, d[i])
range关键字
# 配合for循环使用
第一种玩法:
for i in range(10) # 一个参数, 打印数字列表,从0开始
print(i)
第二种玩法:
for i in range(4, 18): # 顾头不顾尾
print(i)
第三种玩法:
for i in range(2, 20, 3):# 步长 # 顾头不顾尾
print(i)
# 拓展知识:
"""
推断:https://movie.douban.com/top250?start=0&filter= 第一页
https://movie.douban.com/top250?start=25&filter= 第二页
https://movie.douban.com/top250?start=50&filter= 第三页
https://movie.douban.com/top250?start=75&filter= 第四页
https://movie.douban.com/top250?start=100&filter= 第五页
...
https://movie.douban.com/top250?start=225&filter= 第十页
"""
url = 'https://movie.douban.com/top250?start=%s&filter='
for i in range(0,250,25):
print(url % i)
'''小补充:range在不同解释器版本中是有区别的。'''
for+break
for i in range(10):
if i == 3:
break
print(i)
for+continue
for i in range(10):
if i == 3:
continue
print(i)
for+else
for i in range(10):
if i == 3:
break
print(i)
else:
print('哈哈哈哈')
for循环嵌套
for i in range(1,10):
for j in range(1,i+1):
print('%s*%s=%s' %(i,j,i*j),end=' ')
print()
数据类型内置方法
# 方法 名字()
1. 整型
# 进制转换
print(bin(10)) # 0b1010
print(oct(10)) # 0o12
print(hex(10)) # 0xa
# 记忆:0b代表二进制 0o代表八进制 0x代表十六进制
print(int('0b1010', 2))
print(int('0o12', 8))
print(int('0xa', 16))
2.
# float同样可以用来做数据类型的转换
>>> s = '12.3'
>>> res=float(s)
>>> res,type(res)
(12.3, <class 'float'>)
字符串的内置方法(重点)
# 1. 把其他数据类型转为字符串
print(str(19))
print(str(19.1))
print(str([1, 2, 3, 4]))
print(str({'username':'kecin', 'age':18}))
print(str((1,2,3,4)))
print(str(True))
print(str({11,22,33}))
# 记忆
# s = ' hello '
# print(s)
# print(s.strip()) # 默认什么都不写,去除的是空格
# print(s.lstrip()) # left
# print(s.rstrip()) # right
# s1 = '@@kevin@##'
# print(s1.strip('@'))
# print(s1.strip('#'))
username = input('username:>>>').strip()
password = input('password:>>>').strip()
if username == 'kevin' and password == '123':
print('登录成功')
else:
print('登录失败')
>>> str1 = 'hello python!'
# 1.按索引取值(正向取,反向取):
# 1.1 正向取(从左往右)
>>> str1[6]
p
# 1.2 反向取(负号表示从右往左)
>>> str1[-4]
h
# 1.3 对于str来说,只能按照索引取值,不能改
>>> str1[0]='H' # 报错TypeError
# 2.切片(顾头不顾尾,步长)
# 2.1 顾头不顾尾:取出索引为0到8的所有字符
>>> str1[0:9]
hello pyt
# 2.2 步长:0:9:2,第三个参数2代表步长,会从0开始,每次累加一个2即可,所以会取出索引0、2、4、6、8的字符
>>> str1[0:9:2]
hlopt
# 2.3 反向切片
>>> str1[::-1] # -1表示从右往左依次取值
!nohtyp olleh
# 3.长度len
# 3.1 获取字符串的长度,即字符的个数,但凡存在于引号内的都算作字符)
>>> len(str1) # 空格也算字符
13
# 4.成员运算 in 和 not in
# 4.1 int:判断hello 是否在 str1里面
>>> 'hello' in str1
True
# 4.2 not in:判断tony 是否不在 str1里面
>>> 'tony' not in str1
True
# 5.strip移除字符串首尾指定的字符(默认移除空格)
# 5.1 括号内不指定字符,默认移除首尾空白字符(空格、\n、\t)
>>> str1 = ' life is short! '
>>> str1.strip()
life is short!
# 5.2 括号内指定字符,移除首尾指定的字符
>>> str2 = '**tony**'
>>> str2.strip('*')
tony
# 6.切分split
# 6.1 括号内不指定字符,默认以空格作为切分符号
>>> str3='hello world'
>>> str3.split()
['hello', 'world']
# 6.2 括号内指定分隔字符,则按照括号内指定的字符切割字符串
>>> str4 = '127.0.0.1'
>>> str4.split('.')
['127', '0', '0', '1'] # 注意:split切割得到的结果是列表数据类型
# 7.循环
>>> str5 = '今天你好吗?'
>>> for line in str5: # 依次取出字符串中每一个字符
... print(line)
...
今
天
你
好
吗
?