困困

python运算符、if判断、while、for循环、字符串相关函数

电脑版发表于:2022/2/23 21:37
### 运算符
# (1) 算数运算符: + - * / // % **
var1 = 10
var2 = 7
res = var1 + var2
print(res)
res = var1 - var2
print(res)
res = var1 * var2
print(res)
res = var1 / var2 # 1.4285714....
print(res)
# // 地板除 整出之后的数
# 如果被除数 或者 除数是一个小数,那么结果后面加一个小数
res = var1 // var2
print(res)
res = 14.3 // 7
print(res)
res = 8 % 3 # 正常取余
print(res)
res = -8 % 3 # -2 + 3 = 1
# 如果8 前面带负号,那么余数也带上符号
print(res)
res = 8 % -3 # 2 + (-3) = -1
# 如果3 前面带负号,那么正常取余后的数与-3相加
print(res)
res = -8 % -3
# 如果两者符号都是负号 直接取余数 跟上负号
print(res)
res = 3 ** 2
print(res)
res = 2 ** 4
print(res)
# (2) 比较运算符 > < >= <= == !=
# 返回一个布尔类型的值 True False
var1 = 5
var2 = 3
res = var1 > var2
print(res)
res = var1 != var2 # 不等于
print(res)
# (3) 赋值运算符 = -= *= /= //= %= **=
var1 = 8
var2 = 3
var1 *= var2
# 相当于var1 = var1 * var2
print(var1)
var1 /= var2
# 相当于 var1 = var / var2
print(var1)
var1 //= var2
print(var1)
var1 %= var2
print(var1)
var1 = 4
var1 **= 3 # 4 * 4 * 4 = 64
print(var1)
# (4) 成员运算符 in 和 not in (针对容器类型数据)
# str 必须是一个连续的片段
strvar = "你很好,我也会更好"
res = "你" in strvar
print(res)
res = "嘿" in strvar
print(res)
# list tuple set
listvar = ["嗨","嘿","哈","嗷"]
res = "嗨" not in listvar
print(res)
setvar = {"楚雨荨","韩信","鲁班"}
res = "韩信" in setvar
print(res)
tuplevar = ("嫦娥","后羿","八戒")
res = "嫦娥" not in tuplevar
print(res)
# dict 成员运算符 判断字典时 判断的是键 不是所对应的值
dictvar = {"top": "程咬金", "bottom": "李元芳", "middle": "貂蝉"}
res = "程咬金" in dictvar # 成员运算符 判断字典时 判断的是键 不是所对应的值
print(res) # False
res = "top" in dictvar
print(res)
print("-----------")
#### 身份运算符 is | is not 检测两个数据在内存中是否是同一个地址
# 3.6版本之前 整型 -5 ~ 正无穷
var1 = 19
var2 = 19
res = var1 is var2
print(res)
# 浮点型 非负数
var1 = -5.52
var2 = -5.52
res = var1 is  var2
print(res)
print("?浮点型负数为什么在同一个地址")
# 复数 在实数 + 虚数 这样的结构中永远不一样 但如果只有虚数 在值相同的情况下一样
var1 = 3 + 4j
var2 = 3 + 4j
res = var1 is var2
print(res)
print("为什么在 实数 + 虚数 这样的结构中是一样")
var1 = 6j
var2 = 6j
res = var1 is var2
print(res)
# bool 在布尔值相同的情况下 id 一样
var1 = True
var2 = True
res = var1 is var2
print(res)
# 容器类型数据地址判断
# str 字符串而言, 字符串值相同的情况下, id一致, 值一样
# 列表,元组,字典,集合 无论什么情况 id表示都不同 (但空元组的id标识一样)
var1 = "你"
var2 = "你"
# res = var1 is var2
# print(res)
print(var1 is var2)
# 例: 但是空元组例外
var1 = ()
var2 = ()
print(var1 is var2)
# 逻辑运算符 and 逻辑与 or 逻辑或 not 逻辑非 [相当于取反]
res = True and True
print(res)
res = True and False
print(res)
res = not True
print(res)
res = not False
print(res)
# 逻辑短路
# (1) True or something
# (2)False and something
print("<==>")
False or print(123)
True and print(456)
# 逻辑优先级: () > not > and > or
res = 5 or 6 and 7 # 有优先级的问题, 还有短路的问题
print(res) # 5
res = (5 or 6) and 7
print(res)
res = not (5 or 6) and 7 # not 5 and 7 => False and 7 => False
print(res)
res = 1 < 2 and 3 > 5 or 6 # False or True => 6
print(res)
res = 1 < 2 and 3 > 4 or 5 > 6 and 7 < 8 or 9 > 10 # False or False => 直接打印False
print(res)
# 这种情况特殊,上来直接短路,后面的不用按照and or 优先级计算了
res = 5 or 6 and 7 or 8 and 9 or 10
print(res)
# 如果上来直接是假, 不一定结果也是假,要依次向后计算
print("为什么上来直接短路?")
# 数据类型判断 isinstance
# int float bool complex str list tuple set dict
# isinstance (要判断类型的数据, (类型1, 雷星2, 类型3......))") 如果在类型元组当中, 返回真, 不在返回假
intvar = 15
print(isinstance(intvar,dict))
strvar = "789"
print(isinstance(strvar,(int,str,list))) # 在(int,str,list)当中,如果有,就返回真
# 位运算符: &--按位与 |--按位或 ~--按位非 ^--按位异或 <<--左移 >>--右移
var1 = 19 # 二进制: 00010011
var2 = 15 # 二进制: 00001111
res = var1 & var2 # &--按位与
# 10011
# 01111
# 00011---> 011 是 3
print(res)
res = var1 | var2 # |--按位或
# 10011
# 01111
# 11111
print(res)
res = 5 << 2 # <<--左移 5*2^2
# 0000 0101
# 0001 0100 向左移动两位
""" n << m n乘以2的m次幂 """
print(res)
res = 5 >> 1
'''n >> m n除以2的m次幂 '''
print(res)
res = var1 ^ var2 # ^--按位异或
'''两个值不同方为真1, 两个值相同为假0'''
print(res) # 11100 --> 28
res = ~19 # ~--按位非
''' -(n+1) '''
print(res)
"""
运算符的优先级
一元运算符: 同一时间之操作一个数字运算的( ~ - )
二元运算符: 同一时间之操作两个数字运算符的( + - * / )
整体一元运算符优先级大于二元运算符
所有运算符当中 ** 幂运算优先级最高 3 ** 4
所有运算符当中 = 赋值运算符优先级最低
乘除 > 加减
() > not > and > or
~ > ( << >> ) > & > ^ > |
除此之外,剩下的运算符优先级如下:
算术运算符 > 位运算符 > 比较运算符 > 身份运算符 > 成员运算符 > 逻辑运算符
赋值运算符 单独拿出来作为最后, 把值计算好之后再进行赋值
"""
res = 5 + 5 << 6 // 3 is 40 and True
print(res)
### 循环判断
# 代码块 : 以冒号作为开始,用缩进来划分区域,这个整体叫代码块
# 作用域 : 作用区域,作用范围
# 代码执行顺序 : 默认从上到下
'''
if循环
'''
if 5 == 6 :
    # print(a) error: python
    print(666)
    print(888)
    print(90)
print(4) # 缩进划分区域
# 写缩进的时候,要注意四个空格和一个Tab不要混合
# 在其它语言里,划分作用于的是{}而不是缩进代码块
# 流程 : 代码执行的流程
# 流程控制 : 对代码执行过程的管控
yangqichao = "大傻逼"
if yangqichao == "大傻逼":
    print("我就是小傻逼")
else:
    print("我是他宝")
# input 等待用户输入内容
res = input("欢迎,你叫什么名字")
print(res)
username = input("输入你的用户名")
pwd = input("输入你的密码")
print(username,type(username))
print(pwd,type(pwd))
if username == "admin" and pwd == "000":
    print("恭喜,登陆成功")
else:
    print("抱歉,用户hi名或者密码有误")
"""
while循环
"""
i = 0
sum = 0
while i <= 100:
    # 写逻辑在此处...
    print(i)
    i += 1
    sum += i
    print(sum)
"""
字符串的相关操作
"""
# (1) 字符串的拼接
str1 = "爱你"
str2 = "超超"
res = str1 + str2
print(res)
str1 += str2
print(str1)
# (2) 字符串的重复
str1 = "三遍"
res = str1 * 3
print(res)
str1 *= 3
print(str1)
# (3) 字符串的跨行拼接
strvar = "是的法师" \
         "2222" \
         "321" # 回车键
print(strvar)
# (4) 字符串的索引
#         0--------->6
strvar = "一二三四五六七"
#        -8--------->-1
res = strvar[6]
print(res)
"""
(5) 字符串的切片
 语法 ==> 字符串[::] 完整格式:[开始索引:结束索引:间隔值]
 [开始索引:] 从来是索引截取到字符串的最后
 [:结束索引] 从开头截取到结果索引之前(结束索引-1)
 [开始索引:结束索引] 从开始索引截取到结果索引之前(结束索引-1)
 [开始索引:结束索引:间隔值] 从开始索引截取到结果索引之前按照指定的间隔截取字符
 [:]或[::] 截取所有字符串
"""
# 字符串的切片简而言之就是字符串的截取操作
strvar = "五一假期,国家法定多放假了一天,大家普天同庆,一起欢度美好时光"
# [开始索引:] 从来是索引截取到字符串的最后
res = strvar [23:]
print(res)
#  [:结束索引] 从开头截取到结果索引之前(结束索引-1)
res = strvar [:3]
print(res) # 只打印五一假,最高位取不到 ---> 结束索引-1
res = strvar [1::2] #理解: 间隔值-1
print(res) # 一期国法多假一,家天庆一欢美时
res = strvar[-32::2]
print(res) # 同上
res = strvar[-1::-2] #理解: 同上
print(res) # 光好度起,同普大天了放定家,假五


sign = True
total = 0
i = 0
while sign:
    total += i
    i += 1
    if i == 101:
        sign = False
print(total)

a = 0
while a < 100:
    # a += 1
    if a % 2 == 0: #?
        print("?",end = " ")
    else:
        print("?",end = " ")
    if a % 10 == 9:
        print()
    a += 1 # 不要放在前面
# (5) 一个循环,打印十行十列隔列变色小星星
x = 0
while x < 100:
    if x % 2 == 0:
        print("?",end="")
    else:
        print("?",end="")
    # 最后换行
    if x % 10 == 9:
        print()
    x += 1
        # 打印换行
# (6) 一个循环,打印十行十列隔行变色小星星 地板除算法//
"""
地板除算法
0 // 10 0
1 // 10 0
2 // 10 0
3 // 10 0
4 // 10 0
...
9 // 10 0
10 //10 1
11 //10 1
...
19 // 10 1
20 // 10 2
"""
w = 0
while w < 100:
    # 利用地板除与取余的规律,产生十个相同的数字,并且按十个相同的余数取花色
    if w // 10 % 2 == 0:
        print("?",end = "")
    else:
        print("?",end = "")
    # 控制换行
    if  w  % 10 == 9:
        print()
    w += 1
# 字符串的格式化 (%d %f %s 占位符)
"""
”字符串“ % (要替换的值)
"""
# %d 整形占位符
strvar = "今天买了%d个苹果" % (3)
print(strvar)
# %f 浮点型占位符
strvar = " 我花了%.4f元" % (2.3414) # 保留小数点遵循四舍五入
print(strvar)
# %s 字符串占位符
strvar = "%s" % ("我最帅")
print(strvar)
# 九九乘法表
q = 0
while q <=9:
    #print(q)
    j = 1 # 3*1 3*2 3*3 在一行
    while j <= q:
        print("%d * %d =%2d" % (q,j,q*j),end="  ")
        j += 1
    # 执行换行
    print()
    q += 1
    j = 1
    while j <=i:
        print("%d * %d =%2d" % (i,j,i * j))
        j += 1
    print()
    i -= 1
# 100 ~ 999 找吉利数字 111 222 123 321 888 ...
"""
n = 567
n // 100 => 5 百位
n // 10 % 10 => 6 十位
n % 10 => 7 个位
"""
i = 100
while i <= 999:
    baiwei = i // 100
    shiwei = i // 10 % 10
    gewei = i % 10
    if shiwei == gewei and shiwei == baiwei :
        print(i) # 111 222
    if shiwei == gewei -1 and shiwei == baiwei + 1:
        print(i) # 123 456
    if shiwei == gewei +1 and shiwei == baiwei - 1:
        print(i) # 987 654
    i += 1
# 百元买百鸡 公鸡一块钱一只 母鸡三块钱一只 小鸡五毛钱一只 买100只鸡 有多少种买法
"""
穷举法
a => (1,2)
b => (3,4)
c => (5,6)
a + b + c == 10
x + y + z == 100 and x + y * 3 + 0.5 * z = 100
"""
# f 公鸡 y 母鸡 z小鸡
f = 0
while f <= 100:
    y = 0
    while y <= 33:
        z = 0
        while z <= 100:
            if(f + y + z == 100) and (f + y * 3 + 0.5 * z == 100):
                print(f,y,z)
            z += 1
        y += 1
    f += 1
# ### for循环 特质用于遍历容器类型数据
# while循环有局限性 不能遍历无序容器数据
setvar = ("a","b","c","d")
# i = 0
# length = len(setvar)
# while i <= length:
#     print(setvar[i])      error
"""
for i in 可迭代性数据:把可迭代数据中的值一个一个拿出来复制给i
"""
for i in setvar:
    print(i)
# 遍历字符串
strvar = "今天我最棒"
for i in strvar:
    print(i)
# 遍历列表
listvar = [1,2,3,4,5,6]
for i in listvar:
    print(i)
# 遍历元组
tuplevar = (6,7,8,7)
for i in tuplevar:
    print(i)
# 遍历集合
for i in setvar:
    print(i)
# 遍历字典 在遍历字典时 默认遍历的是键,不是值
dictvar = {'z':1,'y':2,'x':3}
for i in dictvar:
    print(i)
# 二级容器
lst= [1,2,3,(4,5,6)]
res = lst [-1]
res = res [-1]
print(res,"<22>")
# 二级元组
tuplevar = (1,2,3,(4,5,6))
print(tuplevar)
# 二级列表
listvar = [1,2,3,[4,5,6]]
print(listvar)
# 二级字典
dic ={"a":1,"b":{"c":4,"d":5}}
print(dic["b"]),"<33>"
# 二级集合:集合中的数据必须是可哈希数据(不可变数据)
set1 ={1,2,3,4,(1,2,3)}
# 多级容器
lst = [1,2,3,4,[5,6,(11,123,{"c":22,"f":33},34),7,8]]
# 找出33
res = lst[-1][2][2]["f"]
print(res,"<3333>")

# 变量的解包操作
a,b = 1,2
c,d = [5,6]
print(a,b,c,d,"<4444>")
### 遍历等长的二级容器,里面的元素是容器数据,容器里面的元素个数相同
listvar = [["王健林","王思聪",],["马云","马化腾"],["王宝强","马蓉"]]
for a,b in listvar:
    print(a,b)
# 不等长的二级容器(老老实实一层一层遍历)
listvar = [["王健林","王思聪",],["马云","马化腾"],["王宝强","马蓉"]]
for i in listvar:
    for j in i:
        print(j)
"""
range的用法:返回上一个可迭代的对象
range(start,end,step)
start 代表开始值 
end 代表结束值 但是高位取不到 取到之前的一个值
step 步长
"""
# 只有一个参数的情况:
for i in range(8): # 0~7
    print(i)
# 有两个参数的情况
for i in range(5,8): # 5,6,7
    print(i)
# 有三个参数的情况 (正序)
for i in range (1,11,3): #
    print(i)
print("--------")
for i in range(9,0,-1):
    print(i)

# ### 字符串相关函数
# *capitalize 字符串首字母大写
# strvar = "oh Father this is My Favarate boY"
strvar = "this is a dog"
res = strvar.capitalize()
print(res)
# *title 每个单词的首字母大写(非字母隔开的单词)
# strvar = "this is a dog"
res = strvar.title()
print(res)
# *upper 将所有字母变成大写
res = strvar.upper()
print(res)
# *lower 将所有字母变成小写
res = strvar.lower()
print(res)
# *swapcase 大小写互换
res = strvar.swapcase()
print(res)
# *count   统计字符串中某个元素的数量
strvar = "aa bb cc"
res = strvar.count("a")
print(res)
# *find 查找某个字符串第一次出现的索引位置
'''find('字符串',开始位置,结束位置)(结束位置取不到,取到结束位置-1)'''
print("===find===")
strvar = "oh Father this is My Favarate boY"
res = strvar.find("F") # 3
print(res)
res = strvar.find("F",4) # 21
print(res)
res = strvar.find("F",10,20)
print(res)
res = strvar.find("aa")
print(res)
# *index 与 find 功能相同 find找不到-1,index找不到数据直接报错[推荐使用find]
# *startswith 判断是否以某个字符或者字符串开头
'''startswith ('字符串',开始位置,结束位置)(结束位置取不到,取到结束位置-1)'''
strvar = "oh Father this is My Favarate boY"
res = strvar.startswith("oh")
print(res)
res = strvar.startswith("Fa")
print(res)
res = strvar.startswith("thi",10)
print(res)
# *endswith 判断是否以某个字符或者字符串结尾
'''endswith ('字符串',开始位置,结束位置)(结束位置取不到,取到结束位置-1)'''
res = strvar.endswith("boY")
print(res)
res = strvar.endswith("bo",-4,-1)
print(res)
print("不理解")
# ***split 按某字符将字符串分割成列表(默认从左到右按空格分割)
strvar = " you can you up no can no bb"
res = strvar.split()
print(res)
strvar = "you = can = you = up = no = bb"
res = strvar.split("=",2)
print(res) # ['you ', ' can ', ' you = up = no = bb']
# rsplit 从右向左分割
res = strvar.split("=",1)
print(res) # ['you ', ' can = you = up = no = bb']
# ****join 按某字符将列表拼接成字符串(容器类型都可)
listvar = ['you','can',"a","basestring"]
res = "*".join(listvar)
print(res) # 返回字符串
# *replace 替换字符串(第三个参数选择替换的次数)
strvar = "可爱的小狼狗喜欢吃肉,有没有,有没有,还有没有"
res = strvar.replace("有没有","真没有")
print(res)
# 第三个参数选择替换的次数
res = strvar.replace("有没有","真没有",1)
print(res)
# *isdecimal 检测字符串是否以数字组成 必须是纯数字
res = "11323"
print(res.isdecimal())
# *len 计算容器类型长度
res = len("aabbcc")
print(res)
# *center 填充字符串,原字符居中(默认填充空格)
strvar = "你"
res = strvar.center(10,"*") # center(填充的个数,填充的字符)
print(res) # ****你*****
# *strip 默认去掉首尾两边的空白符
strvar = "\r sdf \t \n"
print(strvar)
res = strvar.strip()
print(res)


关于TNBLOG
TNBLOG,技术分享。技术交流:群号677373950
ICP备案 :渝ICP备18016597号-1
App store Android
精彩评论
{{item.replyName}}
{{item.content}}
{{item.time}}
{{subpj.replyName}}
@{{subpj.beReplyName}}{{subpj.content}}
{{subpj.time}}
猜你喜欢