1.算数运算符-day03.02
# 算数运算符
# + - * / // 整除 % 取模,求余数 ** 求次方(幂)
print(10 + 3) # 13
print(10 - 3) # 7
print(10 * 3) # 30
print(10 / 3) # 3.3333333333333335 最后一位数5是计算精度的问题,其他语言也如此,是正常现象,我们就认为是3.3333333333333333就行
print(10 // 3) # 3
# print(-10 // 3) # -4 向下取整 -3.33 向下取整是 -4
print(10 % 3) # 1
print(10 % 4) # 2
print(10 ** 3) # 1000
print(3.14e5) # 3.14 * 10^5 等于3.14乘以10的5次方 314000
2.比较运算符 day03.03
ASCII表可以私信或自己查找
# 比较运算符
# > >=(大于或等于) < <= == !=(不等于)
# 得到的结果是布尔值
print(10 > 3) # True
print(10 >= 3) # True
print(10 < 3) # False
print(10 <= 3) # False
print(10 == 10) # True
print(10 != 10) # False
# bool 值
# True ==> 1
# False ==> 0
print(True == 1) # True
print(False == 0) # True
# str字符串比较
# ASCⅡ码:
# A-Z : 65-90
# a-z : 97-122
# 0-9 : 48-57
print('a' > 'b') # False
print('a' < 'b') # True 97<98
# 字符串比较:从左往右一个一个字符比较,直到某个字符可以比较出大小
print('abcd' < 'abdc') # True
# 练习:
print('45' > '9') # 相当于是用 4 跟 9 比较 False
print('abc' < 'abcd') # 最后一个字符 d 没有东西跟他比较 但是毕竟多一个所以 True
3.逻辑运算符 - day03.04
# 逻辑运算符
# and 并且(与) or 或者 not 非
# and:并且
# 两边必须都为真才为真,否则为假(只要有一个为假就为假)
print(True and True) # True
print(True and False) # False
print(False and True) # False
print(False and False) # False
print(4 > 5 and 6 < 7) # False
# 短路操作
# 从左往右开始判断每个操作数的值是否为False(隐式判断),如果为假,则直接返回该操作数,否则继续往右判断下一个数,全为真返回最后一个数
print(6 and 8) # 8
print(bool(6)) # True
print(bool(8)) # True 数字只要不是0,bool()正数负数都为真True
print(0 and 8) # 0
print(0 and print(666)) # 0 没有打印666证明只执行到0就不执行下面的数据了
print(6 and print(888)) # 888 None
print(print()) # print()的结果是None print()自身的结果是None值
print(66 and 0 and -3) # 0
print(print(666) and 0) # 666 None
# bool值隐式判断 假 False 真 True
# 数值:0是假,其余为真
# 字符串:空字符串 ''和""和 '''''' 为假,其余为真
# bool :True False
# NoneType: None 为假
# 列表:空列表[]为假,其余为真
# 元组:空元组()为假,其余为真 空元组不用加逗号,有一个元素才需要加逗号
# 字典:空字典{}为假,其余为真
print(bool(0)) # False
print(bool(-3)) # True
print(bool('')) # False
print(bool(' ')) # True
print(bool('abcd')) # True
print(bool([])) # False
print(bool([3, 4])) # True
print(bool()) # False
print(bool(3,)) # True
print(bool({})) # False
print(bool({'age': 13})) # True
# 练习
print(None and 666 and 0) # None
print((3,) and [] and -1) # []
print(3 and False and "") # False
print(3 and 6 and {6, 6, 6}) # {6}
# 练习:查看下面表达式的结果
# print(999 and None and 666) # None
# print(print(8) and 30) # 8 None
# print(' ' and -100 and [] and 8) # []
print(print(9) and print(5)) # 9 None
# or 或者
# 两边都为假才为假,否则为真(只要有一个为真则为真)
print(True or True) # True
print(True or False) # True
print(False or True) # True
print(False or False) # False
# 短路操作
# 从左往右一个个操作数进行判断,如果为真,则直接返回该值,否则继续判断下一个数
print(6 or 8) # 6
print(0 or -1) # -1
print('' or '雷布斯' or '乔布斯') # ‘雷布斯’
print(0 or '小米su7' or print(666)) # '小米su7'
print(0 or print(666)) # 666 None
# 练习
a = True and 6 # 6
b = False or 1 or True # 1
print(a, b) # 6 1
print(a * 3 + b) # 19
a = 6 and True # True
b = False or 1 or True # 1
print(a, b) # True 1
print(a * 3 + b) # 4
# not 非
# 得到的是True 或 False
print(not 4 > 5) # True
print(not 5) # False
print(not 0) # True
print(not -1) # False
print(not ' ') # False
# 练习:
# 请输入一个年份year:
# 判断year是否为闰年(满足下面条件之一即可):
# 1.能被4整除(使用%),且不能被100整除
# 2.能被400整除
n = 2024
print((n % 4 == 0 and n % 100 != 0) or n % 400 == 0) # True
# 参考答案:
# year = int(input("请输入一个年份:"))
# z = year%4 == 0 and year%100 != 0 or year%400 == 0
# print(z)
# 运算优先级() 加括号可以提高优先级
# (1+2) * 3
# n%4 == 0 如这个里面 == 优先级比较低,不需要加括号
# and or not 的优先级比 == 等比较运算符的优先级低一些,不需要用括号 不确定优先级的时候可用用括号,稳当些
'''
运算符优先级
** 幂 最高优先级
* / % // 乘 除 取余数 取整数
+ - 加法 减法
<= < > >= 比较运算符
== != 等于运算符
= %= /= //= -= += *= 赋值运算符
not or and 逻辑运算符
'''
4.成员运算符和身份运算符 - day03.05
# 成员运算符和身份运算符在其他语言中是没有的 比较特殊
# 成员运算符
# in, not in
# 右边一般不要写一个数,一般写一个序列/列表
# 判断左边的数是不是右边的列表里面,也可以判断在不在字符串里面
# 一般会结合if语句使用
print(3 in [3, 4, 5, 6]) # True
print(30 in [3, 4, 5, 6]) # False
print(30 not in [3, 4, 5, 6]) # True
# 身份运算符(了解)
# is, is not
# 使用比较少
# 判断内存地址是否相等
# python对一些小的整数做了内存优化
# 运行pycharm内存条建议16g,至少8g,4g是不行的,会很卡。之所以占内存主要是因为很多的变量、数据存在了内存条中。
# 内存地址:就是当前变量或数据存储在内存条中的一个门牌号/位置 现在打印出来的数是十进制的,有的地方可能是十六进制的
c = 10 # 例如我们现在定义的变量c = 10 就存储在内存条当中
# 占用空间:如整数int一般是4个字节 00000000 00000000 00000000 00000000
# 例如整数10在内存条里就存储为 00000000 00000000 00000000 00001010
# id():得到内存地址
a = 10
b = 10
print(id(a)) # 每次运行的id地址虽然会改变,但是同样的数据是一起同时改变的
print(id(b)) # python中一些小的整数做了内存优化,两个变量指向的是同一个10,所以指向的内存地址是一样的
print(a is b) # True
print(a is not b) # False
5.赋值运算符和复合运算符 - day03.06
# 赋值运算符
# = 赋值
# 先计算等号右边的值,再赋值给左边
age = 18
# 复合运算符:算术运算符+赋值运算符
age = age + 1
print(age) # 19
age += 1 # 等价于 age = age + 1 不能写成 age =+ 1 虽然不报错,但会被识别成age等于正数1 age = 1
print(age) # 20
# python 中不支持 i++ i-- 在其它语言中基本都有这样的语法,含义是自增一 自减一
# 一元运算符 : i++ i-- python 中没有
# 三目运算符: ? : python 中没有
age -= 1 # 等价于 age = age - 1
print(age) # 19
age **= 2
print(age) # 361
# 位运算符(扩展,了解)
# 前提:将数字转换为二进制使用
# &【按位与】 | 按位或】 ^【按位异或】 <<【左移】 >>【右移】
# 按位与 & 有0就为0,全都是1才为1
print(6 & 3) # 有的语言里没有and他会用&&代表与,但是python中的&代表按位与
# 6 ==> 110
# 3 ==> 011 # 3是11 但是要右对齐,所以写为011
# ---------
# 010 ==> 2
# 按位或 | 有1就为1,全都是0才为0
print(6 | 3)
# 6 ==> 110
# 3 ==> 011
# ---------
# 111 ==> 7
# 按位异或^ 相同为0 不同为1
print(6 ^ 3)
# 6 ==> 110
# 3 ==> 011
# ---------
# 101 ==> 5
# 左移 加位数
print(6 << 2) # 2 代表左移2位数 右边加两位0
# 6 ==> 110
# ==> 11000
# ---------
# 11000 ==> 24
# 右移 减位数
print(6 >> 2) # 2 代表右移2位数 去掉右边两位
# 6 ==> 110
# ==> 1
# ---------
# 1 ==> 1
print(13 >> 2)
# 13 ==> 1101
# ==> 11
# ---------
# 11 ==> 3
# 二进制和十进制
# 二进制 : 只有0和1
# 八进制 : 0 1 2 3 4 5 6 7
# 十进制 : 0 1 2 3 4 5 6 7 8 9
# 十六进制 : 0 1 2 3 4 5 6 7 8 9 A B C D E F 有些颜色会表示为 #FF66FF 这种就是十六进制颜色
# 二进制和十进制
# 8421法 一般只针对一些较小的数字
# 二进制 : 1 1 1 1
# 十进制 : 8 4 2 1
# 2的三次方 2的平方 2的1次方 2的0次方
# 十进制: 1 2 3 4 1234
# 1*10的三次方 2*10的平方 3*10的一次方 4*10的0次方 = 1000+200+30+4
# 二进制 110 ==> 4+2 = 6
# 11 ==> 2+1 = 3
6.运算符的练习 - day03.07
# 1.从控制台输入圆的半径,计算周长和面积, π=3.14
r = float(input("请输入半径r:"))
c = 2 * 3.14 * r
s = 3.14 * r ** 2
print(f"周长为{r},面积为{s}")
# 参考答案
# r = int(input("请输入半径r:"))
# print(f"周长为{ 2 * 3.14 * r}")
# print(f"面积为{ 3.14 * r * r}")
# 2.一辆汽车以40km/h的速度行驶,行驶了4567.89km,求所用的时间
t = 4567.89 / 40
print("所用时间为 %.2f" % t)
# 参考答案
# speed = 40
# length = 4567.89
# hour = length / speed
# print(hour)
# 3.华氏温度转摄氏温度
# 【提示:将华氏温度转换为摄氏温度(F是华氏温度) F = 1.8C + 32】
# => C = (F - 32) / 1.8
F = int(input("请输入华氏度F:"))
C = (F - 32) / 1.8
print(f"摄氏度C为{C}")
# 参考答案一样
# 4, 入职薪水10K,每年涨幅入职薪水的5%,50年后工资多少?
x = 10 * pow(1.05, 50)
print("50年后工资为", x)
# 参考答案
# salary = 10
# z = salary + (salary * 0.05 * 50)
# print("50年后工资为", z) # 35k
# 参考答案二 指数增长的情况 工作一年后觉得没什么能成长的想跳槽,建议涨薪30%
# salary = 10
# z = salary * (1 + 0.05) ** 50
# print("50年后工资为", z) # 114k
# 5, 为抵抗洪水,战士连续作战89小时,编程计算共多少天零多少小时?
d = 89 // 24
s = 89 % 24
print("编程计算共 %d天 %d 小时" % (d, s))
# 参考答案
# h = 89
# print(f'共 {h // 24}天{h % 24}小时')
# 6, 给定一个5位数,分别把这个数字的万位,千位,百位、十位、个位算出来并显示。如: 34567
w = 34567 // 10000
q = (34567 // 1000) % 10
b = (34567 // 100) % 10
s = (34567 // 10) % 10
g = 34567 % 10
print("万位,千位,百位、十位、个位分别是万位 %d ,千位 %d,百位 %d、十位 %d、个位 %d " % (w, q, b, s, g))
# 参考答案
# n = 34567
# a = n // 10000 # 万位
# b = n // 1000 % 10 # 千位
# c = n // 100 % 10 # 百位
# d = n // 10 % 10 # 十位
# e = n % 10 # 个位
# print(a, b, c, d, e)
# 7. 总共有5678秒, 求转换后是多少小时,多少分钟, 多少秒?
h = 5678 // (60*60)
m = (5678 // 60) % 60
s = 5678 % 60
print("编程计算共 %d小时 %d 分钟 %d 秒" % (h, m, s))
# 1 34 38
# 参考答案 多少进位就对多少求余
# n = 5678 # 秒
# hour = n // 3600 # 小时
# min = n // 60 % 60 # 分钟
# sec = n % 60 # 秒
# print(hour, min, sec)
# # 1 34 38
# print(1 * 3600 + 34 * 60 + 38)
# 8. 总共有456789秒, 求转换后是多少天,多少小时,多少分钟, 多少秒?
day = 456789 // (60*60*24)
hour = (456789 // (60*60)) % 24
min = (456789 // 60) % 60
sec = 456789 % 60
print(day, hour, min, sec)
# 验证: print(5*24*60*60+6*60*60+53*60+9)