老男孩Python28期班学习笔记day2

 01今日大纲

  一. 格式化输出:
    %s 占位字符串
    %d 占位数字

    %.2f 占位小数
    "xxx%sx %sxx" % (变量, 变量)

二. 运算符:
    a+=b  a = a + b

    and 并且. 左右两端同时为真. 结果才能是真
    or 或者. 左右两端有一个是真. 结果就是真
    not  非真既假, 非假既真

    顺序: () => not => and => or

    a or b:
        如果a是0, 结果是b, 否则结果是a

    a and b : 和or相反

三. 编码
    ascii : 8bit 1byte, 英文字母+ 数字 + 特殊符号
    gbk: 16bit 2byte, 主要是中文
    unicode: 32bit 4byte
    utf-8:
        英文:8bit 1byte
        欧洲:16bit 2byte
        中文:24bit 3byte

    encode()  编码成bytes字节
    decode()  解码


四. 基本数据类型int和bool
    int bit_length()
    bool:
        数据类型的转换
            True: 1
            False: 0
            0: False
            非0: True

        结论: 如果想把x转化成y. y(x)
        结论: 所有的空都认为是False

五. 基本数据类型str
    索引和切片: 索引的下标从0开始
    切片: [p:q:r] 从p到q每隔r出来1个
        r如果是负数, 从右往左

    常用的操作:
        1. upper() 转化成大写.
        2. split() 字符串切割. 切割的结果是列表
        3. replace() 字符串替换
        4. stript() 去掉左右两端的空白(空格, , )
        5. isdigit() 判断是否是数字组成
        6. startswith()  是否以xxx开头
        7. find() 查找. 如果找不到返回-1

    内置函数:
        len()求字符串长度.

    for循环
        for 变量 in 可迭代对象:
            循环体

    in 和 not in

六 列表和元组
    [元素, 元素]
    列表有索引和切片
    增删改查:
        增加: append() insert()
        删除: remove(元素) pop(索引)
        修改: lst[index] = 新元素
        查询: lst[index]
            for item in lst:
                循环体

    深浅拷贝:
        1. 赋值. 没有创建新列表
        2. 浅拷贝. 只拷贝表面(第一层)
        3. 深拷贝. 全部都拷贝一份

    元组: 不可变, 主要用来存储数据

    range(),可以让for循环数数(重点中的重点)


七. 字典
    由{}表示. 以k:v形式保存数据
    k必须可哈希. 不可变

    增删改查:
        1. 新增: dic['新key'] = 新value, setdefault(key, value)
        2. 删除: pop(), del, cleart()
        3. 修改: dic[key] = value
        4. 查询: get(), dic[key], keys(), values(), items()

        循环(必须要掌握):
            1. for k in dic:
                    k
                    dic[k]

            2. for k, v in dic.items():
                    k
                    v
八: set集合
    特点: 无序, 不重复, 元素必须可哈希
    add() 添加

九: is和==
    is判断内存地址
    ==判断数据

十: 列表和字典的循环
    在循环列表和字典的时候. 不能删除原来列表和字典中的内容
    把要删除的内容记录在新列表中. 循环这个新列表. 删除老列表

下周要预习:
    1. 文件操作
    2. 函数

02格式化输出

    %s 占位字符串
    %d 占位数字

     %f 占位小数
    "xxx%sx %sxx" % (变量, 变量)

'''
name = input("请输入第一个人的名字:")
address = input("请输入一个地点:")
name2 = input("请输入第二个人的名字:")

# 我想打印 xxxx昨天去xxxx被xxxx撞见了
# 如果python的版本低于3.6 , 你只能用%的形式进行格式化输出  %s %d
# 把 % 后面的内容按照位置往前面的%s位置放数据
# %s 占位字符串. 实际上可以占位任何东西(用的最多的)
# %d 占位整数. 只能占位数字
print("%s昨天去%s被%s撞见了" % (name, address, name2))

'''
# print("alex兜里有%d元" % "100") # %d一般用的不多. 用的多的是%s
View Code
info = '''
===============Alex Li==================
==Name: Alex Li=========================
==Job:  总经理==========================
==Address: 北京市昌平区美丽富饶的沙河====
==Phone: 10086==========================
========================================
'''
print(info)
# 如果你的python是3.6以上, 此时可以使用模板字符串
# f"{变量}"

name = "wusir"
hobby = "打篮球"

print("%s喜欢%s" % (name, hobby))
print(f"{name}喜欢{hobby}") # 模板字符串

003逻辑运算

# 一.算数运算
# + - * / % // **
# 二.比较运算
# > < >= <= == !=
# 三.赋值运算
# = 把等号右边的值赋值给左边的变量
# a += b   = > a = a + b
# a -= b    = > a = a - b
# *=
# /=
# a %= b    = > a = a % b
# 四.逻辑运算
# 1, and
# 并且, 左右两端必须同时为真, 最终的结果才能是真, 有一个是假, 结果就是假
# 2, or
# 或者, 左右两端有一个是真.结果就是真.全都是假, 结果才能是假
# 3, not
# 非.不.非真既假, 非假既真
# 
# 如果出现混合逻辑运算.顺序: () = > not = > and = > or
# 
# a or b
# 如果a是0
# 结果是b
# 如果a是非零, 结果就是a
# 
# a and b
# 和or相反
a = 10
b = 4
a %= b # a = 10 % 4
print(a)
#用while循环计数 1-100
i = 1
while i <= 100:
    print(i)
    # i = i + 1
    i += 1

true类型

print(1 > 5 or 5 < 6 or 7 > 3)
print(not False)

print(1 > 3 or 5 < 7 and 6 > 8)

print(not 1 > 5 and 4 < 6 or 7 > 8 and 1 < 9 or 5 > 6)

# 0就是假
# 非0就是真
# a or b if a == False then b else a
print(1 or 2) # 1
print(0 or 3) # 3
print(1 or 5) # 1
print(0 or 5) # 5

print(1 and 3) # 3
print(0 and 5) # 0
print(5 and 0) # 0
print(3 and 5) # 5

print(1 and 2 or 3) # 2

print(1 and 5 or 3 and 4 or 7 or 8 and 6 or 2)  # 5

print(1 and 5 < 3 or 6) # 6

print(1 or 0 and 5 < 6 and 7 > 8 or 3)

 字符串的索引和切片
 索引就是第几个字符, 索引从0开始

# 切片
s = "alex昨天看冯提莫直播. 刷了1w个鱼丸"
s1 = s[4:8] # 默认从左到右切, 顾头不顾尾[start, end)
print(s1)

s4 = s[6:] # 从6开始切, 切割末尾
print(s4)

s5 = s[:6] # 从头开始切, 切到6为止
print(s5)

s6 = s[:] # 从头到尾
print(s6)

s1 = s[3:8:2]   #从3到8 每2个出来1个  i喜和
print(s1)

s2 = s[::2]
print(s2)

# 如果步长为负数, 从右到左
s3 = s[::-1]
print(s3)

s4 = s[-1:-6:-2]
print(s4)

s5 = s[-3::-3]
print(s5)

带步长的切片

#判断是不是回文数
s = "上海自来水来自海上"

s1=s[:]
s2=s[::-1]

if(s1==s2):
    print("yes")
else:
    print("no")

004编码

# 美国人发明了关于美国文字在计算机中的显示效果 => ascii 里面编码的内容都是按照美国人的文字进行编码. ascii => 我们能看到的就是那一堆英文字母 + 数字 + 一些你键盘上能看到得所有特殊符号

# 编码就是用特定的排列组合来表示我们的文字信息
# a  =>  01
# 在ascii中使用8位01组合来表示一个ascii中的字符
# ascii在最开始只有7位=> 后来发现,7位很难处理. 为了扩展又添加了一位 => 8bit  => 1byte
# ascii中只有7位是有效的. 最前面的哪一位是空着的. 是0

# ascii中没有中文编码  提出一个标准 => ANSI => 在ascii基础上扩展8bit  => 16bit=> 给各个国家进行编码 => GB2312 => GBK(国标码扩展码)=>gbk中包含了我们常用的中文, 日文, 韩文, 繁体字

# 国际化的操作依然不能实现 => UNICODE => 万国码 => 扩容=>  us4 => 32bit  => 把所有国家的文字进行同一

# 早期的unicode根本没有办法使用: 1.存储, 2.网络传输
# a =>8  => unicode => 32
# 1MB => 4MB

# 随着机能的提高. 还有utf-8的产生. unicode可以使用了

# 0111 1111
# 把unicode重新进行定义 -> 可变长度的unicode => UTF-8, UTF-16
# utf-8: 最小的字节单位是8bit
# utf-16: 最小字节单位: 16bit

# 用的最多的编码就是utf-8
# 1. 英文: 8bit  -> 1byte
# 2. 欧洲文字: 16bit  -> 2byte
# 3. 中文: 24bit -> 3个字节  中文有9万多个


# python使用的是???
# python2.x使用的是ascii
# python3.x内存中使用的unicode, 文件存储使用:utf-8
s = "古力娜扎"  # 字符串直接就是unicode
print(s)

# 想要存储. 必须进行转换 => utf-8 或者GBK

# unicode => UTF-8

# b'xe5x8fxa4xe5x8ax9bxe5xa8x9cxe6x89x8e' 字节 => 01  => 用来存储和传输
# b'xb9xc5xc1xa6xc4xc8xd4xfa' => gbk的编码  一个中文2个字节
bs = s.encode("gbk")
print(bs)
#  解码
# bs = b'xb9xc5xc1xa6xc4xc8xd4xfa' # GBK
bs = b'xe5x8fxa4xe5x8ax9bxe5xa8x9cxe6x89x8e' # utf-8

s = bs.decode("utf-8")
print(s)
# 用什么编码. 就用什么解码

# 0,1  => 1bit
# 8bit => 1byte
# 1024byte => 1kb
# 1024kb => 1mb
# 1024mb => 1gb
# 1024gb => 1tb
# 1024tb => 1pb
# ....


# 简单的编码总结:
# 1. ascii  8bit => 1byte  英文 + 数字 + 特殊符号
# 2. GBK 16bit  => 2byte 中文
# 3. unicode 32bit => 4byte 万国码
# 4. utf-8 :
#   英文: 8bit, 1byte
#   欧洲: 16bit, 2byte
#   中文: 24bit, 3byte

# encode(编码)  编码. 得到的是bytes类型
# decode(编码)  解码. 得到字符串

005基本数据类型int 和 bool

# int类型的数据. 基本运算 +-*/ // **
# bit_length() 二进制长度
a = 3    # 11
print(a.bit_length())   # 二进制长度 2


# bool类型. 基本数据类型之间的互相转换
a = True
print(type(a))      # <class 'bool'>

# bool => int
b = int(a)    # 把xxx转化成数字
print(b)     # True => 1

# True => 1
# False => 0

print(bool(0))    # False
print(bool(-1))    # True

# 0 => False
# 非0 => True

while 1:           # while 1(效率高一点点) 和 while True
     print("还我钱!!!!!!")

# 结论2: 你想把x转化成y   需要y(x)
# 字符串 => 数字
# int(字符串)

print(bool(""))    # 能够表示False的字符串是空字符串
# 结论3: 所有表示空的东西都是假

print(bool(None)) # None : 空, 真空.
# str: 由双引号, 单引号, 三个单引号, 三个双引号括起来的内容
# 引号引起来的就是字符串.
mingxing = '周杰伦的老婆是'
print(mingxing)
#下面哪行代码和当前这行代码是同一条代码
mingxing2 = "冯提莫的老公是" 
            "'alex'"
print(mingxing2)
mingxing3 = '''卢本伟的老婆
是Uu'''
print(mingxing3)
mingxing4 = """陈一发儿"""

print(mingxing4)
# 字符串的索引和切片
# 索引就是第几个字符, 索引从0开始
#    012
#   -3-2-1
s = "jay"
print(s[1]) # []表示索引
#
print(s[2])
print(s[-1])
print(s[-3])

# 切片
s = "alex昨天看冯提莫直播. 刷了1w个鱼丸"
s1 = s[4:8] # 默认从左到右切, 顾头不顾尾[start, end)
print(s1)
#
s2 = s[8:4]
print(s2)
#
s3 = s[-6:-2]
print(s3)
#
s4 = s[6:] # 从6开始切, 切割末尾
print(s4)
#
s5 = s[:6] # 从头开始切, 切到6为止
print(s5)
#
s6 = s[:] # 从头到尾
print(s6)

# 带有步长的切片
s = "wusir喜欢和alex一起去探讨课件"
#
s1 = s[3:8:2] # 从3到8 每2个出来1个  i喜和
print(s1)
# 
s2 = s[::2]
print(s2)
# 
# 如果步长为负数, 从右到左
s3 = s[::-1]
print(s3)
#
s4 = s[-1:-6:-2]
print(s4)
#
s5 = s[-3::-3]
print(s5)

# 索引和切片:
# 字符串[数字]  获取到第xx索引位置的字符
# 字符串[m:n]   从m开始获取到n结束. 永远娶不到n
# 字符串[m:n:s] 从m到n结束. 每s个取1个

# 字符串相关操作:
# 1. upper()  忽略大小写
# 2. split()  字符串的切割, 默认是使用空白切割
# 3. replace() 字符串替换
# 4. strip() 去掉左右两端的空白
# 5. startswith() 判断是否已xxx开头
# 6. find()  查找. 找不到返回-1
# 7. isdigit() 判断是否是数字组成





# 大小写转来转去
# 1. 首字母大写
s = "alex"
s1 = s.capitalize()  # 首字母大写, 字符串是不可变的数据类型. 每次操作都会返回新字符串
print(s)
print(s1)

# 2. upper() 把所有字母转化成大写
s = "wusir"
s1 = s.upper()
print(s1)
while 1:
    game = input("请输入你喜欢玩儿的游戏(请输入Exit退出程序):")
    if game.upper() == "EXIT": # 忽略大小写
         break
     print("你喜欢的游戏是%s" % game)

# 3. lower() 全部转化成小写. 对一些欧洲文字不敏感
 s = "wusir和ALEX关系不一般"
 print(s.lower())

# 4. title() 标题,  每个单词的首字母大写
s = "alex wusir ritian taibai nezha 女神"
print(s.title())

# 切来切去
# 1. split() 字符串切割
s = "alex_wusir_taibai"
ret = s.split("alex_wusir_taibai") # 如果切割的位置在边缘. 一定能获取到空字符串
print(type(ret)) # <class 'list'> 列表
print(ret)

# 2. replace()  字符串的替换
s = "alex dsb, wusir xsb"
print(s.replace("sb", "烧饼"))
print(s.replace("sb", ""))

# 3. strip()  去掉空白 => 脱掉空白
 s = "    哈哈哈     哈哈哈
	" # 	 制表符(缩进)  
 换行
 print(s.strip()) # 去掉左右两端的空白(必须要记住)
#
username = input("用户名:").strip()
password = input("密码:").strip()
if username == "alex" and password == "123":
     print("登录成功了")
else:
     print("登录失败")

#张总. 用户名是alex  密码是123

s = "周杰伦         功夫足球   			 少林足球 足球少林"
print(s.split())


# 找来找去
s = "php是全世界最好的编程语言"
print(s.startswith("java")) # 判断这句话是否是以xxx开头
print(s.endswith("php")) #  判断是否以xxx结尾

name = input("请输入你的名字:")
if name.startswith(""):
    print("你是姓张的")
 else:
     print("你不是姓张的")

s = "java, php, python, c++"
print(s.count("av")) # 计算xxx字符串中出现的次数
s = "海王_剑姬_诺手_余小C喜欢用诺手"
#
print(s.find("")) # 找的是索引
print(s.find("")) # 如果不存在. 返回-1
print(s.index("")) # index: 索引
print(s.index("")) # index如果找不到. 报错

# 判断组成
# isdigit() 判断字符串是否由数字组成
s = "abc胡辣汤壹123@#$%"
print(s.isdigit())
print(s.isalpha()) # 判断是否由文字的基本组成.
print(s.isalnum()) # 是否由数字. 字母组成, 能屏蔽特殊字符

s = "123123壹佰贰拾伍万贰千三百四十六"
print(s.isnumeric()) # 判断是否是数字, 两, 俩

# 字符串操作完结
# 1. len() 求字符串长度,  内置函数
s = "alex 和 wusir一堆好基友"
print(len(s)) # 求字符串的长度
# 可以使用len来遍历字符串
print(s[0])
print(s[1])
print(s[2])
print(s[3])

print(s[108]) # string index out of range  字符串索引超过了边界


i = 0
while i < len(s): # 遍历字符串
    print(s[i])  # alex  # string index out of range
    i += 1 # i = 4

# for循环
# 语法: for 变量 in 可迭代对象:
#           循环体
# 字符串是一个可迭代对象

s = "alex特别喜欢武藤兰"
for c in s: # 把字符串s中的每一个字符赋值给前面的变量c
    print(c)

for i in 10: # 'int' object is not iterable
     print(i)

# in和not in 成员运算
s = "alex特别喜欢太白金星"
 if "胡辣汤" in s:
    print("对不起, 你的评论有敏感词")
 else:
     print("OK. 没问题")

# while...else...
# for...else...
#
i = 0
while i < 100:
     print(i)
     if i == 66:
        break  # break不会执行else, 打断这个循环.没有经过条件判断所以. 不执行else
    i+=1
else: # 当判断结束的时候. 自动执行else
    print("数完了")
# for循环和while循环一样也可以使用break和continue, 和else
# for循环只有当迭代结束的时候才能执行else
原文地址:https://www.cnblogs.com/ComputerVip/p/11780894.html