2. 运算/循环/字符串操作

1.容器类型的强制转换

类型:str list tuple set dict
var1 = "今天天气好晴朗朗"
var2 = ["刘璐","王钊","王华振","罗淞峰"]
var3 = ("刘璐1","王钊1","王华振1","罗淞峰1")
var4 = {"王文贤","庄哲浩","王铁男"}
var5 = {"a":1,"b":2}

# str  ( 容器类型数据  /  Number类型数据 都可以 )
"""规律:基于原来的数据类型两边套上引号"""
res = str(var2)
res = str(var5)
res = str(var6)
print(res,type(res))
# repr 以字符串的形式原型化输出数据.
print(repr(res))

# list
"""规律:如果是字符串,把里面的字符一个一个拿出来,作为列表的每一个元素
如果是其他容器数据,只是基于原数据,把两边的符号换成[] , 换成列表
如果是字典,只是单纯的获取字典的键,不要那个值,组成列表.
"""
res = list(var1)
res = list(var3)
res = list(var4)
res = list(var5)
print(res)

# tuple
"""规律:如果是字符串,把里面的字符一个一个拿出来,作为元组的每一个元素
如果是其他容器数据,只是基于原数据,把两边的符号换成() , 换成元组
如果是字典,只是单纯的获取字典的键,不要那个值,组成元组.
"""
res = tuple(var1)
res = tuple(var2)
res = tuple(var4)
res = tuple(var5)
print(res)

# set
"""规律:如果是字符串,把里面的字符一个一个拿出来,作为集合的每一个元素
如果是其他容器数据,只是基于原数据,把两边的符号换成{} , 换成集合
如果是字典,只是单纯的获取字典的键,不要那个值,组成集合

集合的特征:自动去重,无序
"""
res = set(var1)
res = set(var2)
res = set(var5)
print(res)

2.容器管理

2.1 二级容器 
  作用:外层是一个容器类型数据,里面的元素还是一个容器类型的数据.

  listvar = [1,2,3,4,5,(6,7,8,0)]
# 二级列表 listvar = [1,2,3,4,[4,5,66]]
# 二级元组 tuplevar = (1,2,3,(4,5,6))
# 二级集合 在集合里面只能放 可哈希数据:Number(int float complex bool) str tuple setvar = {"a",1,2,(3,4,5)} print(setvar) # setvar = {"a",1,2,(3,4,5,[5,6,7])} error 列表不可哈希

# 二级字典 dictvar = {"a":1,"b":{"c":3,"d":4}}

2.2 等长的二级容器
"""
(1) 里面的每一个元素都是容器类型数据
(2) 容器里面放的元素个数等长
"""

lst = [(1,2,3),(4,5,6),(8,9,10)]
tup = (["a","b"],[1,2],(4,5))


2.3 多级容器取值
container = [1,2,3,4,5,(7,8,9,{"a":1,"b":{"c":[888,99,22]}})]
res = container[-1] # res = (7,8,9,{"a":1,"b":{"c":[888,99,22]}})
res2 = res[-1] # res2 = {"a":1,"b":{"c":[888,99,22]}}
res3 = res2["b"] # {"c":[888,99,22]}
res4 = res3["c"] # res4 = [888,99,22]
res5 = res4[1] # 99
print(res5)

3.强转字典

"""
需要等长的二级容器,并且元素的总个数是2个;
字符串元素个数只能是2个,多一个都不行,有局限性,不推荐使用
"""

# 外层是列表,里面是列表或者元组或者字符串(不推荐,有局限性)
lst = [["a",1],("b",2),"c3"]
res = dict(lst)
print(res)

# 外层是元组,里面是列表或者元组或者字符串(不推荐,有局限性)
tup = (["c",15],("d","sdfsdfsd"),"f8")
res = dict(tup)
print(res)

# 外层是集合,里面是元组(如果想要表达容器,在集合中只能是元组)
setvar = {("f1",3.44),("e2",3+9j)}
res = dict(setvar)
print(res)

# 外层是元组或者列表,里面是集合,从语法上来看允许,但是违背逻辑,因为集合无序,不推荐使用.
container = [{"a",15}]
res= dict(container)
print(res)


# 把列表的重复数据去掉,可以先转集合,再转列表,缺陷:顺序被打乱.
listvar = ["a","a",1,2,1,"c"]
res = list(set(listvar))
print(res)

C:UsersG1702543AppDataLocalProgramsPythonPython35python.exe G:/周末四期/L002/test.py
{'a': 1, 'b': 2, 'c': '3'}
{'f': '8', 'c': 15, 'd': 'sdfsdfsd'}
{'e2': (3+9j), 'f1': 3.44}
{'a': 15}
['a', 1, 2, 'c']

Process finished with exit code 0

"""
bool() int() float() complex()
str() list() tuple() set() dict()

这些强转的数据类型,在不给参数的情况下,默认返回一个该数据类型的值
这些值可以作为变量的初始化值
"""
res = tuple()
res = dict()
res = set()
res = int()
print(res)

C:UsersG1702543AppDataLocalProgramsPythonPython35python.exe G:/周末四期/L002/test.py
()
{}
set()
0

Process finished with exit code 0

 3.运算比较

3.1 算数运算符:  + - * / // % **

var1 = 15
var2 = 7
# +
res = var1 + var2
print(res)

# -
res = var1 - var2
print(res)

# *
res = var1 * var2
print(res)

C:UsersG1702543AppDataLocalProgramsPythonPython35python.exe G:/周末四期/L002/test.py
22
8
105

# / 通过除法得到的数据一定是小数,浮点型,及时除尽,数字后面加上.0表达小数.
res = var1 / var2
res = 6 / 2 # 3.0
print(res)

# // 地板除 得到一个整数
res = 6 // 2
print(res)

res = var1 // var2
print(res)

# 如果除数或者被除数是一个小数,那么这个结果尾巴带上.0
res = var1 // 7.0
print(res)

# % 取余
res = var1 % var2
res = 13 % 7 # 6
res = -13 % 7 # 1 -6 + 7 = 1
# res = 13 % -7 # -1 6 + (-7) = -1
# res = -13 % -7# -6 把正确的余数算出来,前面带上负号即可.

print(res)

# ** 幂运算
res = 5 ** 3 # 5的3次方
print(res)
3.2 比较运算符:  > < >= <= == != 
"""比较的结果只有2个,要么是真的True,要么是假的False"""
var1 = 15
var2 = 7

# >
res = var1 > var2
print(res)

# <
res = var1 < var2
print(res)

# >= 满足一个条件为真即可
res = 15 >= 15
print(res)

# <= 满足一个条件为真即可
res = 15 <= 15
print(res)

# == 等于,是在做比较,不是在做赋值,赋值是一个等号
res = var1 == var2
print(res)

# != 不等于
res = var1 != var2
print(res)

C:UsersG1702543AppDataLocalProgramsPythonPython35python.exe G:/周末四期/L002/test.py
True
False
True
True
False
True

# *=
var1 *= var2 # var1 = var1 * var2
print(var1)

# /=
var1 /= var2 # var1 = var1 / var2
print(var1)

# //=
var1 //= var2 # var1 = var1 // var2
print(var1)

# %=
var1 %= var2 # var1 = var1 % var2
print(var1)

# **=
var1 **= var2 # var1 = var1 ** var2
print(var1)

C:UsersG1702543AppDataLocalProgramsPythonPython35python.exe G:/周末四期/L002/test.py
105
15.0
2.0
2.0
128.0

 3.3 成员运算符: in 和 not in

"""判断字符串时,需要是一个连续的片段,才能返回真"""
strvar = "如果遇到你是一种错,那我宁愿一错再错"
res = "你" in strvar
res = "遇到你" in strvar
res = "错,那" in strvar
print(res)

(1) tuple list set
tup = ("吴波","帅乐","毕杨生","刘得元")
res = "刘得元" in tup
print(res)
lst = ["吴波","帅乐","毕杨生","刘得元","温红杰"]
res = "温红杰" not in lst
print(res)
setvar = {"赖廷","银燕","王成全"}
res = "银燕" not in setvar
print(res)

(2) dict in 或者 not in 判断的是字典的键,不是那个值
dictvar = {"wtn":"成熟稳重","lxh":"大,头大","lsf":"温文尔雅","hh":"哈哈"}
res = "成熟稳重" in dictvar
print(res) # error
res = "lsf" not in dictvar
print(res)
res = "lxh" in dictvar
print(res)


3.4 身份运算符 is 和 is not (检测两个数据在内存当中是否是同一个值)
# int  -5 ~ 正无穷
var1 = 6
var2 = 6

# 比较两个变量指向的地址是不是同一个 [比较地址]
res = var1 is var2
print(res)

# 比较两个变量的值是不是相等; [比较值]
res = var1 == var2
print(res)

# 复数. 在只有虚数的情况下,地址相同
var1 = 6j
var2 = 6j
print(var1 is var2)

# bool 两个值相同,那么地址一样
var1 = False
var2 = True
print(var1 is not var2)

# 容器类型数据 只有空元组和相同的字符串,在值相同情况下,地址是一样的
var1 = ()
var2 = ()
print(var1 is var2)
var1 = "好"
var2 = "好"
print(var1 is var2)
var1 = [1,2]
var2 = [1,2]
print(var1 is not var2)

 3.5 逻辑运算符   and or not

# and 逻辑与
"""全真则真,一假则假"""
res = False and False
print(res) #False
res = True and False
print(res) #False
res = True and True
print(res) #True
res = False and True
print(res) #False

# or 逻辑或
"""全假则假,一真则真"""
res = True or True
print(res)
res = True or False
print(res)
res = False or True
print(res)
res = False or False
print(res)

# not 逻辑非
"""取反 真变假 假变真"""
res = not True
res = not False
print(res)

# 逻辑短路 , 后面的代码不走了
"""
(1) True or 表达式
(2) False and 表达式
"""

# (1)
True or print("我短路了么?1")
# (2)
False and print("我短路了么?2")

# print 是系统的函数,打印的值和要返回的值是两个完全不同的概念
res = print(1234)
print(res) #None print没有返回值 是通过return + 返回值定义的

# res = True and print(123)
# res = True and None
# print(res)

res = True and 7
print(res) #7
res = False and 8
print(res) #False
res = True or 99
print(res) # True
res = False or "abc"
print(res) #"abc"

# 逻辑运算符优先级
"""
() > not > and > or
如果存在逻辑短路,优先计算短路,比如True or ...... 一定为True
"""

res = 5 or 6 and 7 # 5
res = (5 or 6) and 7 # 7
res = not (5 or 6) and 7 # False
print(res)

res = 1>2 and 3<4 or 5>6 and 7>8
print(res)
# res= False and True or False and False
# res= False or False
# res = False

 3.6 位运算

# ### (7)位运算符:    & | ~ ^ << >>

# & 按位与
var1 = 19
var2 = 15
res = var1 & var2
print(res)
"""
10011
01111
00011
"""

# | 按位或
res = var1 | var2
print(res)
"""
10011
01111
11111
"""

# ^ 按位异或

"""两个值不相同即为真,相同即为假"""
res = var1 ^ var2
print(res)
"""
10011
01111
11100
"""
# << 左移

"""左移是乘 5左移2位相当于 5 * 2的2次幂 = 20"""
res = 5 << 2
print(res)
"""
0000 ... 101
0000 . 10100
"""
# >> 右移

"""右移是除 5右移1位相当于 5 // 2的1次幂 = 2"""
res = 5 >> 1
print(res)
"""
0000 ... 101
0000 ... 010
"""

# ~ 按位非 公式: ~19 => -(n+1)
res = ~(-18)
print(res)


"""
总结:所有运算符优先级;
一元运算符: 同一时间,操作一个数据的 (~ -)
二元运算符: 同一时间,操作两个数据的 (+ - * / ...)

一般情况下 , 一元运算符 优先级大于 二元运算符
-3 + 5 = 2

例外:
所有运算符优先级最高的 ** 幂运算 ~2**2
所有运算符优先级最低的 = 赋值运算符


同等级运算符优先级:
() > not > and > or
乘除 > 加减
(<< >>) > & > ^ > |

除此之外,大体优先级高低:
算术运算符 > 位运算符 > 比较运算符 > 身份运算符 > 成员运算符 > 逻辑运算符
赋值运算符 单独列出来 用于把右侧的值算完之后收尾.
"""

res = ~2**2
print(res)

res = 5+5 << 6//3 is 40 and True
# 5+5 << 2 is 40 and True
# 10 << 2 is 40 and True
# 40 is 40 and True
# True and True => True
print(res) #True

# 加上括号提升优先级 让别人也能看懂
res = (5+5) << (6//3) is 40 and True

 4. 代码块

# ### 代码块 : 以冒号作为开始,用缩进来划分作用域,这个整体是一个代码块
"""
作用域:作用的范围
看似距离相同,不代表是同一个缩进,比如4个空格和1个tab距离也是相同的,但是并不是同一个代码块
1个tab的距离 = 4个空格,在写代码块的时,要么全用4个空格,要么全用1个tab缩进,不要混在一起使用
python 代码要比其他语言更加简洁,对代码的格式有要求.
"""
print(11)
print(22)
print(33)


if 5 == 5:
    print(1)
    print(2)
    print(3)
    # print(4) # IndentationError

if 6 != 6:
    print(5)
                        print(6)

# php 等其他语言用的是{}来包裹代码,表达同一个作用域
"""
# 了解
if(6==6){
    var_dump($a)
                                                                                                                                        var_dump($b)
}
"""

5. 流程控制(单项双向)

# ### 流程控制
"""
流程:代码执行的过程
流程控制:就是对代码执行的过程进行管控

流程控制的三大结构:
    顺序结构: 代码从上到下,依次执行
    分支结构: 4小类
    循环结构: while , for

分支结构: 关键字 if
    (1)单项分支
    (2)双项分支
    (3)多项分支
    (4)巢状分支
"""


# 单项分支
"""
语法: 
    if 条件表达式:
        code1
        code2
        ...
        ...
        
    如果条件表达式成立,那就是返回真True ,就会执行代码块
    如果条件表达式不成立,那就是返回假False,不执行代码块
"""

guoyimeng = "美女"
guoyimeng = "绿巨人"
if guoyimeng == "美女":
    print("给你买好吃的")
    print("给你买好喝的")
    print("给你买兰蔻")
    print("给你买倩碧")
    print("给你买香奈儿")
    print("给你买LV")
    print("给你买兰博基尼")
    print("给你买包,因为包治百病!")


# 双项分支: (2个当中选一个)
"""
if 条件表达式:
    code1
    code2..
else:
    code3
    code4...
    
如果条件表达式为真,那就是返回真True,执行code1和code2..
如果条件表达式为假,那就是返回假False,执行code3和code4..

if   下面的代码块也可以叫做真区间
else 下面的代码块也可以叫做假区间
"""

huanghua = "高富帅"
huanghua = "屌丝"
if huanghua == "高富帅":
    print("我就嫁给你")
else:
    print("你是个好人~")
    

"""
    模拟网站的登录
    等待用户输入账号和密码;
    账户是admin 密码是111
    如果条件满足,就让他登录
    如果条件不满足,就告诉他登陆失败
"""

# input 等待用户输入字符串 , 他返回的数据类型是字符串
# res = input("先森~,你妈贵姓~:")
# print(res,type(res))


username = input("请输入您的用户名:")
password = input("请输入您的密码:")
# print(username)
# print(password)

if username == "admin" and password == "111":
    print("恭喜你~ 登陆成功")
else:
    print("抱歉,登录失败")

6.多项巢状

# ### 多项分支
"""
if 条件表达式1:
    code1
    code2
elif 条件表达式2:
    code3
    code4...
elif 条件表达式3:
    code5
    code6...
else:
    code7 ...


如果条件表达式1满足,返回真,就执行对应代码块,如果条件表达式1不满足,代码往下执行
看一看条件表达式2 是否成立,如果成立,就执行对应代码块,如果条件表达式2不满足,代码往下执行
看一看条件表达式3 是否成立,如果成立,就执行对应代码块,如果条件表达式3不满足,直接执行else这个区间的代码块

elif 可以有多个,也可以没有
else 只能有一个,也可以没有

只有当所有条件都不满足的时候,才会执行else区间.
多项分支是多选1的结果.
"""


youqian = True
# 双项分支
if youqian == True:
    print("我就嫁给你")
else:
    print("你是个好人")

youqian = False
youfang = False
youche = False
youyanzhi = False
youtili = False

# 多项分支
print("<=============>")
if youqian == True:
    print("我就嫁给你1")
elif youfang == True:
    print("我就嫁给你2")
elif youche ==True:
    print("我就嫁给你3")
elif youyanzhi == True:
    print("我就嫁给你4")
elif youtili == True:
    print("我就嫁给你5")
else:
    print("你是个好人啊6")

# 巢状分支 (单项分支 双项分支 多项分支的互相嵌套)
youqian = True
youfang = True
youche = True
youyanzhi = True
youtili = True

if youqian == True:
    if youfang == True:
        if youche == True:
            if youyanzhi == True:
                if youtili == True:
                    print("我就嫁给你")
                else:
                    print("恭喜你,成为我的1号备胎.")
            else:
                print("恭喜你,成为我的2号备胎.")
        else:
            print("恭喜你,成为我的3号备胎.")
else:
    print("抱歉,前面就是2路汽车,一会好赶不上了呦")


#出题 height
#女生找对象
    # 男生在1米~1.5米之间 小强 你在哪里?
    # 男生在1.5~1.7米之间 没有安全感~
    # 男生 1.7~ 1.8米之间 帅哥 留个电话
    # 男生 1.8~2米之间 帅哥 你建议多一个女朋友吗

# height = 0.5
# 方法一.通用写法
"""
height = float(input("请输入您的身高:"))
if 1<=height and height<=1.5:
    print("小强 你在哪里?")
elif height>1.5 and height<=1.7:
    print("没有安全感~")
elif height>1.7 and height <=1.8:
    print("帅哥 留个电话")
elif height>1.8 and height <=2:
    print("帅哥 你建议多一个女朋友吗")
else:
    print("没有符合条件的选项")
"""

# 方法二.python特有方法 可以连续比较
height = float(input("请输入您的身高:"))
if 1<=height<=1.5:
    print("小强 你在哪里?")
elif 1.5<height<=1.7:
    print("没有安全感~")
elif 1.7< height <=1.8:
    print("帅哥 留个电话")
elif 1.8<height <=2:
    print("帅哥 你建议多一个女朋友吗")
else:
    print("没有符合条件的选项")

7. while循环

# ### 循环结构
"""
特点:可以提升代码执行的效率,减少冗余代码
语法:
while 条件表达式:
    code1...
    code2....
如果条件表达式成立,那就返回True,执行代码块里面的内容
如果条件表达式成立,那就返回False,终止循环.
"""

# 打印1~100;
"""
# (1) 初始化一个变量i
i = 1
# (2) 写一个循环的条件
while i<=100:
    # (3) 写一个自增自减的值
    i+=1
"""
i = 1
while i<=100:
    print(i)
    i+=1 # i = i+1
    
"""
代码解析:
先初始化变量i等于1
判断1 <= 100 条件为真,返回True,执行循环中的代码块
直接print(1)
让i 自增加1 变成结果2
第一次循环结束 ,回到22 循环判断的条件中

判断2 <= 100 条件为真,返回True,执行循环中的代码块
直接print(2)
让i 自增加1 变成结果3
第二次循环结束 ,回到22 循环判断的条件中

判断3 <= 100 条件为真,返回True,执行循环中的代码块
直接print(3)
让i 自增加1 变成结果4
第三次循环结束 ,回到22 循环判断的条件中

判断4 <= 100 条件为真,返回True,执行循环中的代码块
直接print(4)
让i 自增加1 变成结果5
第四次循环结束 ,回到22 循环判断的条件中

依次类推.. 直到什么时候结束?
当 i = 101 的时候

1 <= 101 条件不成立,返回False ,不执行代码块,直接循环终止;
"""


# 计算1~100的累加和?
i = 1
total = 0
while i<=100:    
    total += i #total  = i+total
    i+=1
print(total)

"""
i =1 
total = 0 + 1
i+=1 => i = 2
第一次循环结束...

i = 2
total = 0 + 1 + 2
i+=1 => i = 3
第二次循环结束...

i = 3
total = 0 + 1 + 2 + 3
i+=1 => i = 4
第三次循环结束...

.... 依次类推  ,什么时候结束?
当 i = 101
发现 101 <= 100 这个条件为假 那么循环终止
此刻total = 0+1+2+3+4+... .... + 100 = 5050
"""

# 死循环
"""
while True:
    print(1)
"""
# 方法二: 做1~100的累加和
print("<====>")
i = 1
total = 0
sign = True
while sign:
    total += i
    i+=1
    
    if i == 101:
        sign = False
print(total) # 5050
    

8. 练习--单层循环经典练习

# 1.打印一行十个小星星
# help 查看函数的帮助文档
help(print)
# end="" 默认不换行,在最后一个字符的后面插入空字符取代

print("<===>")
"""
print("*",end="")
print("*",end="")
print("*",end="")
print("*",end="")
print("*",end="")
print("*",end="")
print("*",end="")
print("*",end="")
print("*",end="")
print("*",end="")
"""
i = 0
while i<10:
    print("*",end="")
    i+=1

print("<===============>")
# 2.用变量拼接字符串的形式,打印一行十个小星星
i = 0
strvar = ""
while i<10:
    strvar += "*" # strvar = strvar + "*"
    i+=1

print(strvar)

# (3)打印一行十个小星星 奇数个打印★ 偶数个打印☆
"""
0 % 2 = 0
1 % 2 = 1
2 % 2 = 0
3 % 2 = 1
4 % 2 = 0
...

0 % 3 = 0
1 % 3 = 1
2 % 3 = 2

3 % 3 = 0
4 % 3 = 1
6 % 3 = 2
...

0 % 8 = 0
1 % 8 = 1
2 % 8 = 2
3 % 8 = 3
4 % 8 = 4
5 % 8 = 5
6 % 8 = 6
7 % 8 = 7
8 % 8 = 0
.....
1.任意数和n取余 : 值得范围 0~(n-1)
"""
i = 0
while i < 10:
    # 所有的代码写在中间... 下面..
    
    # 输出星星的代码
    if i % 2 == 0:
        print("",end="")
    else:
        print("",end="")
    
    i+=1


# (4)用 一个循环 打印十行十列小星星
print("<====>")
"""
**********
**********
**********
**********
**********
**********
**********
**********
**********
**********

# 如何打印100颗星星?
"""
i = 0
while i<100:
    # 打印星星
    print("*",end="")
    
    if i % 10 == 9:
        # 打印换行 因为默认end="
"
        print()    
    i+=1
"""
规律:
0123456789  10111213141516171819   20212223242526272829
**********  * * ********           **********          **********************************************************************
            0 1 23456789           0123456789
"""

# (5)一个循环 打印十行十列隔列变色小星星(一个循环)
"""
★☆★☆★☆★☆★☆
★☆★☆★☆★☆★☆
★☆★☆★☆★☆★☆
★☆★☆★☆★☆★☆
★☆★☆★☆★☆★☆
★☆★☆★☆★☆★☆
★☆★☆★☆★☆★☆
★☆★☆★☆★☆★☆
★☆★☆★☆★☆★☆
★☆★☆★☆★☆★☆
"""
i = 0
while i<100:
    # 打印星星
    if i % 2 == 0:
        print("",end="")
    else:
        print("",end="")    
    
    
    if i % 10 == 9:
        # 打印换行 因为默认end="
"
        print()    
    i+=1


# (6)一个循环 打印十行十列隔行变色小星星(一个循环)
"""
★★★★★★★★★★
☆☆☆☆☆☆☆☆☆☆
★★★★★★★★★★
☆☆☆☆☆☆☆☆☆☆
★★★★★★★★★★
☆☆☆☆☆☆☆☆☆☆
★★★★★★★★★★
☆☆☆☆☆☆☆☆☆☆
★★★★★★★★★★
☆☆☆☆☆☆☆☆☆☆
"""

"""
0 // 3 = 0
1 // 3 = 0
2 // 3 = 0

3 // 3 = 1
4 // 3 = 1
5 // 3 = 1

6 // 3 = 2
7 // 3 = 2
8 // 3 = 2

0 // 4 = 0
1 // 4 = 0
2 // 4 = 0
3 // 4 = 0

4 // 4 = 1
5 // 4 = 1
6 // 4 = 1
7 // 4 = 1

8 // 4  = 2
9 // 4  = 2
10 // 4 = 2
11 // 4 = 2

12 // 4 = 3
....

2.任意数 和 n进行地板除,会出现n个相同的数字
3.地板除可以获取一个数的高位,取余可以获取一个数的低位
    89 // 10 = 8 (高位)
    89 % 10  = 9 (低位)
"""

i = 0
while i<100:
    # 输出星星
    if i // 10 % 2 == 0:
        print("",end="")
    else:
        print("",end="")
    # 打印换行
    if i % 10 == 9:
        print()
    i+=1

"""
当i 范围在0~9   // 10 会出现10个相同的0  0在和2取余,余数是0
当i 范围在10~19 // 10 会出现10个相同的1  1在和2取余,余数是1
当i 范围在20~29 // 10 会出现10个相同的2  2在和2取余,余数是0
当i 范围在30~39 // 10 会出现10个相同的3  3在和2取余,余数是1
当i 范围在40~49 // 10 会出现10个相同的4  4在和2取余,余数是0
当i 范围在50~59 // 10 会出现10个相同的5  5在和2取余,余数是1
当i 范围在60~69 // 10 会出现10个相同的6  6在和2取余,余数是0
当i 范围在70~79 // 10 会出现10个相同的7  7在和2取余,余数是1
当i 范围在80~89 // 10 会出现10个相同的8  8在和2取余,余数是0
当i 范围在90~99 // 10 会出现10个相同的9  9在和2取余,余数是1
"""

9.字符串操作

# ### 字符串相关操作
# (1)字符串的拼接 +
res = "我爱你" + "亲爱的菇凉"
print(res)
s1 = "我爱你"
s2 = "亲爱的祖国"
res = s1 + s2
print(res)

# (2)字符串的重复 *
strvar  = "重要的事情说三遍"
res = strvar * 3
print(res)

# (3)字符串跨行拼接 
strvar = "水电费水电费sdkfjsjdfjksjdfksjdkjskdjfksjdfkjskdf"
"aaabbbccc"
print(strvar)

# (4)字符串的索引
#          0 1 2 3 4 5 6 7 8  正向索引
strvar = "咱们班的女生特别多"
#         -9-8-7-6-5-4-3-2-1  逆向索引
res = strvar[6]
print(res)
res = strvar[-3]
print(res)

# (5)字符串的切片: 字符串的截取
"""
语法 => 字符串[::]  完整格式:[开始索引:结束索引:间隔值]
    (1)[开始索引:]  从开始索引截取到字符串的最后
    (2)[:结束索引]  从开头截取到结束索引之前(结束索引-1)
    (3)[开始索引:结束索引]  从开始索引截取到结束索引之前(结束索引-1)
    (4)[开始索引:结束索引:间隔值]  从开始索引截取到结束索引之前按照指定的间隔截取字符
    (5)[:]或[::]  截取所有字符串
"""
# listvar = ["王子红","麦秸康","友军表","王铁男","庄泽浩","好舌头","王文多一个字","刘璐","李志华","文招财","陈凤杰"]
strvar = "黑夜给了我黑色的眼睛,我却用它翻白眼"
# (1)[开始索引:]  从开始索引截取到字符串的最后
res = strvar[3:]
print(res)
# (2)[:结束索引]  从开头截取到结束索引之前(结束索引-1)
res = strvar[:8]
print(res)
# (3)[开始索引:结束索引]  从开始索引截取到结束索引之前(结束索引-1)
res = strvar[5:10] # 最大下标10取不到
print(res)
# (4)[开始索引:结束索引:间隔值]  从开始索引截取到结束索引之前按照指定的间隔截取字符

# 正向获取
res = strvar[::3]
# 0 3 6 9 12 15  黑 了 色 睛 却 翻
print(res)

# 逆向获取
res = strvar[::-1]
#-1 -2 -3 -4 ... 一直到最后
print(res)

10. 双层循环经典

# ### 双层循环练习
# (1)打印十行十列小星星 (用两个循环)

# 打印一行十个小星星
# i = 0
# while i<10:
    # print("*",end="")
    # i+=1

# 针对于一行十个星星,循环10次即可
j =  0  # j来控制行数 一共10行
while j<10:
    # 在这个地方写你自己的逻辑
    
    # 里层循环控制打印一行十个星星
    i = 0
    while i<10:
        print("*",end="")
        i+=1
        
    # 在打印完一行之后,打印换行;
    print()
    
    j+=1


print("<====>")
# (2)打印十行十列隔列换色小星星

j = 0
while j<10:
    # 打印星星
    i = 0
    while i<10:
        # 控制打印星星的花色
        if i % 2 == 0:    
            print("",end="")
        else:
            print("",end="")
        i+=1
        
    # 打印换行
    print()
    
    j+=1


# (3)打印十行十列隔行换色小星星
"""
外层j动一次,里面i的循环动10次,
外层动的慢,内层动的快
i和j切换即可;
"""
print("<====>")
j = 0
while j<10:
    # 打印星星
    i = 0
    while i<10:
        # 控制打印星星的花色
        if j % 2 == 0:    
            print("",end="")
        else:
            print("",end="")
        i+=1
        
    # 打印换行
    print()
    
    j+=1

# (4)99乘法表
# 方向一 正序
i = 1
while i<=9:
    # print(i)
    # 内层循环,循环几次完全取决于i
    j = 1
    while j<=i:
        print("%d*%d=%2d " % (i,j,i*j),end="")
        j+=1
    
    # 打印换行
    print()
    i+=1
# 方向二 倒叙
print("<>=====")
i = 9
while i>0:
    # print(i)
    # 内层循环,循环几次完全取决于i
    j = 1
    while j<=i:
        print("%d*%d=%2d " % (i,j,i*j),end="")
        j+=1
    
    # 打印换行
    print()
    i-=1


# (5)100 ~ 999 找吉利数字 111 222 123 321 888 ...
"""
789 
百位:789 // 100  => 7
十位:789 // 10 % 10 => 8
个位:789 % 10  => 9
"""
i =100
while i<=999:
    baiwei = i // 100 
    shiwei = i // 10 % 10
    gewei = i % 10
    # 三个相同的数字
    if shiwei == gewei and shiwei == baiwei:
        print(i)
        
    # 123 456 789
    if shiwei == gewei - 1 and shiwei == baiwei+1:
        print(i)
        
    # 321 765 876
    if shiwei == gewei + 1 and shiwei == baiwei-1:
        print(i)
    i+=1

14. for循环

# ### for 循环
"""循环 遍历 迭代 这三个名词都是获取每一个数据的意思"""
"""
    for 循环专门用来遍历数据,
    而while循环遍历数据有局限性,无法遍历无序容器数据
    while一般用于复杂的逻辑操作
    
语法:
    可迭代对象:(容器类型数据,range对象,迭代器)
    for i in 可迭代对象:
        code..
"""

"""
# while 遍历数据的局限性
lst = [1,2,3,4]
lst = {1,2,3,4}
i = 0 
while i<len(lst):
    res = lst[i]
    print(res)
    i+=1
"""

# 遍历集合
container = {"树则会","郭一萌","银燕","刘璐","罗淞峰"}

# 遍历列表
container = ["树则会","郭一萌","银燕","刘璐","罗淞峰"]

# 遍历元组
container = ("树则会","郭一萌","银燕","刘璐","罗淞峰")
for i in container:
    print(i)

# 遍历字符串
container = "我爱你,美丽的祖国,我歌颂党的伟大,积极响应党的号召"
for i in container:
    print(i)

# 遍历字典 在遍历字典的时,默认遍历键
container = {"wzh":"老哥~稳","mjk":"奄奄一息",'zzh':"梦游神国","dlh":"九九有神"}
for i in container:
    print(i)


# 遍历等长的二级容器
listvar = [("王健林","王思聪","王美丽"),["马云","马化腾","马冬梅"],("王宝强","马蓉","宋小宝")]

# 变量的解包
a,b = [1,2]
print(a,b)
a,b,c = (4,5,6)
print(a,b,c)
a,b = 7,8
print(a,b)

for i in listvar:
    """
    ('王健林', '王思聪', '王美丽')
    ['马云', '马化腾', '马冬梅']
    ('王宝强', '马蓉', '宋小宝')
    """
    print(i)

for a,b,c in listvar:
    print(a,b,c)


# 遍历等长的二级容器
listvar = [("王健林","王思聪","王美丽"),["马云","马化腾"],("王宝强",)]

for i in listvar:
    for j in i:
        print(j)


# range对象
"""
range(start,end,step)
start 开始值
end   结束值 (最大值取不到,取到之前的那个值)
step  步长
"""
# 1.range中只有一个值
for i in range(10):
    print(i)

# 2. range中有二个值
for i in range(1,9):
    print(i)

# 3. range中有三个值 正向值
for i in range(1,15,3):
    # 1 4 7 10 13 
    print(i)

print("<=============>")
# 3. range中有三个值 逆向值
for i in range(15,0,-3):
    # 1 4 7 10 13 
    print(i)
善战者,求之于势,不责于人,故能择人而任势
原文地址:https://www.cnblogs.com/NGU-PX/p/11143500.html