一、运算符
(1)算术运算符
+ 加法运算符(如果是两个字符串之间进行加法运算,则会进行拼串操作)
a = 10 + 5 计算
a = 'hello' + ' ' + 'world' 拼串
- 减法运算符
a = 10 - 5 计算
a = 5 - True bool型也是int型,没有错误,输出4
a = a - 2 用变量a的值减去2,然后再赋值给a
a = 'hello' - 'h' TypeError,类型错误
* 乘法运算符(如果将字符串和数字相乘,则会对字符串进行复制操作,将字符串重复指定次数)
a = 5 * 5
/ 除法运算符,运算时结果总会返回一个浮点类型,区别于Java,c
a = 10 / 5 输出2.0
a = 5 / 2 输出2.5
a = 5 / 0 ZeroDivisionError: division by zero,除数不能为0
a = 10 / 3 除不尽,输出3.333333335 近似值
// 整除,只会保留计算后的整数位,总会返回一个整型。
a = 10 // 3 输出3
a = 5 // 2 输出2
** 幂运算,求一个值的几次幂。
a = 2 ** 2 输出4
a = 10 ** 5 10的5次幂输出100000
a = 16 ** 0.5 求16的平方根 输出4
% 取模,求两个数相除的余数
a = 10 % 5 输出 0
a = 10 % 4 输出 2
a = 10 % 3 输出 1
a = 10 % 2 输出 0
(2)赋值运算符
= 可以将等号右侧的值赋值给等号左侧的变量
+= a += 5 相当于 a = a + 5
-= a -= 5 相当于 a = a - 5
*= a *= 5 相当于 a = a * 5
**= a **= 5 相当于 a = a ** 5 幂次方
/= a /= 5 相当于 a = a / 5 除数留浮点数
//= a //= 5 相当于 a = a // 5 整除
%= a %= 5 相当于 a = a % 5 取余
(3)关系运算符
关系运算符用来比较两个值之间的关系,总会返回一个布尔值,如果关系成立,返回True,否则返回False
> 比较左侧值是否大于右侧值 result = 10 > 20 输出 False
>= 比较左侧的值是否大于或等于右侧的值 result = 10 >= 10 输出 True; result = 2 > True 输出 True
result = 2 > '1' TypeError: '>' not supported between instances of 'int' and 'str'
< 比较左侧值是否小于右侧值
<= 比较左侧的值是否小于或等于右侧的值
== 比较两个对象的值是否相等
result = 1 == 1 # True
result = 'hello' == 'hello' # True
result = 'abc' == 'bcd' # False
result = 'abc' != 'bcd' # True
result = 1 == True # True
!= 比较两个对象的值是否不相等
相等和不等比较的是对象的值,而不是id
is 比较两个对象是否是同一个对象,比较的是对象的id
is not 比较两个对象是否不是同一个对象,比较的是对象的id
result = 1 is True # False
result = 1 is not True # True
扩展:
result = '2' > '1' # True
result = '2' > '11' # True
在Python中可以对两个字符串进行大于(等于)或小于(等于)的运算, 当对字符串进行比较时,实际上比较的是字符串的Unicode编码
比较两个字符串的Unicode编码时,是逐位比较的,利用该特性可以对字符串按照字母顺序进行排序,但是对于中文来说意义不是特别大
注意:如果不希望比较两个字符串的Unicode编码,则需要将其转换为数字然后再比较
result = 'a' > 'b' # False
result = 'c' < 'd' # True
result = 'ab' > 'b' # False
print(int('2') > int('11'))
(4)逻辑运算符
逻辑运算符主要用来做一些逻辑判断
not 逻辑非 可以对符号右侧的值进行非运算
对于布尔值,非运算会对其进行取反操作,True变False,False变True,对于非布尔值,非运算会先将其转换为布尔值,然后再取反
and 逻辑与 可以对符号两侧的值进行与运算
只有在符号两侧的值都为True时,才会返回True,只要有一个False就返回False
与运算是找False的,Python中的与运算是短路的与,如果第一个值为False,则不再看第二个值。
or 逻辑或 可以对符号两侧的值进行或运算
或运算两个值中只要有一个True,就会返回True,或运算是找True的
Python中的或运算是短路的或,如果第一个值为True,则不再看第二个值
如:
a = True a = not a 对a进行非运算
a = 1
a = ''
a = not a 非布尔值先转换后取反
print('a =',a)
result = True and True # True
result = True and False # False
result = False and True # False
result = False and False # False
print(result)
True and print('你猜我出来吗?') 第一个值是True,会看第二个值,所以print()会执行
False and print('你猜我出来吗?')第一个值是False,不会看第二个值,所以print()不会执行
result = True or True # True
result = True or False # True
result = False or True # True
result = False or False # False
False or print('你猜我出来吗?') 第一个值为False,继续看第二个,所以打印语句执行
True or print('你猜我出来吗?') 第一个值为True,不看第二个,所以打印语句不执行
其他:非布尔值的与或运算 当我们对非布尔值进行与或运算时,Python会将其当做布尔值运算,最终会返回原值
与运算的规则,与运算是找False的,如果第一个值是False,则直接返回第一个值,否则返回第二个值。
或运算的规则,或运算是找True的,如果第一个值是True,则直接返回第一个值,否则返回第二个值。
True and True
result = 1 and 2 # 2
True and False
result = 1 and 0 # 0
False and True
result = 0 and 1 # 0
False and False
result = 0 and None # 0
True or True
result = 1 or 2 # 1
True or False
result = 1 or 0 # 1
False or True
result = 0 or 1 # 1
False or False
result = 0 or None # None
(5)条件运算符
语法:语句1 if 条件表达式 else 语句2
条件运算符在执行时,会先对条件表达式进行求值判断,如果判断结果为True,则执行语句1,并返回执行结果。否则执行语句2
print('a的值比较大!') if a > b else print('b的值比较大!')
max = a if a > b else b,如果a>b成立,执行语句1: max=a,把a的值赋值给变量max,若是不成立执行语句2:max=b,b赋值给max
(6)优先级
结合数学常识,先乘除后加减,实在不行加小括号。表格中越往下优先级越高。
and的优先级高于or . 1 or 2 and 3 输出为1 等价于 1 or (2 and 3)
逻辑运算符可以连着使用。result = 1 < 2 < 3 相当于 1 < 2 and 2 < 3
二、条件判断语句
(1)if语句
# 条件判断语句(if语句)
# 语法:if 条件表达式 :
# 代码块
# 执行的流程:if语句在执行时,会先对条件表达式进行求值判断,
# 如果为True,则执行if后的语句
# 如果为False,则不执行
# 默认情况下,if语句只会控制紧随其后的那条语句,如果希望if可以控制多条语句,
# 则可以在if后跟着一个代码块
# 代码块
# 代码块中保存着一组代码,同一个代码块中的代码,要么都执行要么都不执行
# 代码块就是一种为代码分组的机制
# 如果要编写代码块,语句就不能紧随在:后边,而是要写在下一行
# 代码块以缩进开始,直到代码恢复到之前的缩进级别时结束
# 鲁迅说过:
# 世上本来没有路,走的人多了自然就有了!
# xxxx
# yyyy....
# 缩进有两种方式,一种是使用tab键,一种是使用空格(四个)
# Python的官方文档中推荐我们使用空格来缩进
# Python代码中使用的缩进方式必须统一
# "translate_tabs_to_spaces": true, # if False : print('你猜我出来么?') num = 10
# if num > 10 : print('num比10大!')
# print('谁也管不了我') if False :
print(123)
print(456)
print(789)
print(101112)
# print('hello') num = 28 # 可以使用逻辑运算符来连接多个条件,
# 如果希望所有条件同时满足,则需要使用and
# 如果希望只要有一个条件满足即可,则需要使用or
# if num > 10 and num < 20 :
# print('num比10大,num比20小!') # if 10 < num < 20 :
# print('num比10大,num比20小!') # 在命令行让用户输入一个用户名,获取用户输入,并进行判断
# 如果用户输入的用户名是admin,则显示欢迎管理员光临
# 如果用户输入的是其他的用户名,则什么也不做
# input()函数
# 该函数用来获取用户的输入
# input()调用后,程序会立即暂停,等待用户输入
# 用户输入完内容以后,点击回车程序才会继续向下执行
# 用户输入完成以后,其所输入的的内容会以返回值得形式返回
# 注意:input()的返回值是一个字符串
# input()函数中可以设置一个字符串作为参数,这个字符串将会作为提示文字显示
# a = input('请输入任意内容:')
# print('用户输入的内容是:',a)
# input()也可以用于暂时阻止程序结束 # 获取用户输入的用户名
username = input('请输入你的用户名:')
# 判断用户名是否是admin
if username == 'admin' :
print('欢迎管理员光临!')
# 让用户在控制台中输入一个年龄
# age = int(input('请输入你的年龄:')) # 如果用户的年龄大于18岁,则显示你已经成年了
# if age >= 18 :
# print('你已经成年了~~~') # if-else语句
# 语法:
# if 条件表达式 :
# 代码块
# else :
# 代码块
# 执行流程:
# if-else语句在执行时,先对if后的条件表达式进行求值判断
# 如果为True,则执行if后的代码块
# 如果为False,则执行else后的代码块 age = 7
if age > 17 :
print('你已经成年了~~')
else :
print('你还未成年~~')
(2)if-elif-if语句
# if-elif-else语句
# 语法:
# if 条件表达式 :
# 代码块
# elif 条件表达式 :
# 代码块
# elif 条件表达式 :
# 代码块
# elif 条件表达式 :
# 代码块
# else :
# 代码块
#
# 执行流程:
# if-elif-else语句在执行时,会自上向下依次对条件表达式进行求值判断,
# 如果表达式的结果为True,则执行当前代码块,然后语句结束
# 如果表达式的结果为False,则继续向下判断,直到找到True为止
# 如果所有的表达式都是False,则执行else后的代码块
# if-elif-else中只会有一个代码块会执行 age = 210 # if age > 200 :
# print('活着可真没劲呢!')
# elif age > 100 :
# print('你也是老大不小了!')
# elif age >= 60 :
# print('你已经退休了!')
# elif age >= 30 :
# print('你已经是中年了!')
# elif age >= 18 :
# print('你已经成年了!')
# else :
# print('你还是个小孩!') age = 68 if age >= 18 and age < 30 :
print('你已经成年了!')
elif age >= 30 and age < 60 :
print('你已经中年了!')
elif age >= 60 :
print('你已经退休了!')
练习
# 练习1:
# 编写一个程序,获取一个用户输入的整数。然后通过程序显示这个数是奇数还是偶数。
# 获取用户输入的整数
# num = int(input('请输入一个任意的整数:')) # # 显示num是奇数还是偶数
# if num % 2 == 0 :
# print(num , "是偶数")
# else :
# print(num , '是奇数') # 练习2:
# 编写一个程序,检查任意一个年份是否是闰年。
# 如果一个年份可以被4整除不能被100整除,或者可以被400整除,这个年份就是闰年
# year = int(input('请输入一个任意的年份:'))
# # 检查这个年份是否是闰年
# # year % 4 == 0 and year % 100 != 0 or year % 400 == 0
# if year % 4 == 0 and year % 100 != 0 or year % 400 == 0 :
# print(year,'是闰年')
# else :
# print(year,'是平年') # 练习3:
# 我家的狗5岁了,5岁的狗相当于多大年龄的人呢?
# 其实非常简单,狗的前两年每一年相当于人类的10.5岁,然后每增加一年就增加四岁。
# 那么5岁的狗相等于人类的年龄就应该是10.5+10.5+4+4+4 = 33岁 # 编写一个程序,获取用户输入的狗的年龄,然后通过程序显示其相当于人类的年龄。
# 如果用户输入负数,请显示一个提示信息 核心代码 print("狗的年龄是:",2*10.5+(year-2)*4) # dog_age = float(input('请输入狗的年龄:'))
# like_person_age = 0
# 检查用户输入的是否是负数
# if dog_age < 0 :
# print('你的输入不合法!')
# # 如果狗的年龄在两岁以下(包含两岁)
# elif dog_age <= 2 :
# # 直接将当前的年龄乘以10.5
# like_person_age = dog_age * 10.5
# # 如果狗的年龄在两岁以上
# else :
# # 计算前两岁相当于人类的年纪
# like_person_age = 2 * 10.5
# # 计算超过两岁的部分相对于人类的年纪,并进行相加
# like_person_age += ( dog_age - 2 ) * 4 # if dog_age > 0 :
# print(dog_age,'岁的狗,年纪相当于',like_person_age,'岁的人')
# # 在if也可以去嵌套if,代码块是可以嵌套的,每增加一个缩进的级别,代码块就低一级
# 检查用户的输入是否合法
# if dog_age > 0 :
# # 如果狗的年龄在两岁以下(包含两岁)
# if dog_age <= 2 :
# # 直接将当前的年龄乘以10.5
# like_person_age = dog_age * 10.5
# # 如果狗的年龄在两岁以上
# else :
# # 计算前两岁相当于人类的年纪
# like_person_age = 2 * 10.5
# # 计算超过两岁的部分相对于人类的年纪,并进行相加
# like_person_age += ( dog_age - 2 ) * 4 # print(dog_age,'岁的狗,年纪相当于',like_person_age,'岁的人')
# else :
# print('请输入一个合法的年龄!') # 练习4:
# 从键盘输入小明的期末成绩:
# 当成绩为100时,'奖励一辆BMW'
# 当成绩为[80-99]时,'奖励一台iphone'
# 当成绩为[60-79]时,'奖励一本参考书'
# 其他时,什么奖励也没有 # 获取小明的成绩
# score = float(input('请输入你的期末成绩(0-100):')) # # 打印分割线
# print("="*40) # # 检查用户的输入是否合法
# if 0 <= score <= 100 :
# # 判断发给的奖励
# if score == 100 :
# print('宝马,拿去玩!')
# elif score >= 80 :
# print('苹果手机,拿去玩!')
# elif score >= 60 :
# print('参考书,拿去玩!')
# else :
# print('棍子一根!')
# else :
# # 用户输入的不合法,弹出一个友好提示
# print('你输入的内容不合法,拉出去毙了!') # 练习5:
# 大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一定的条件:
# 高:180cm以上; 富:1000万以上; 帅:500以上;
# 如果这三个条件同时满足,则:'我一定要嫁给他'
# 如果三个条件有为真的情况,则:'嫁吧,比上不足,比下有余。'
# 如果三个条件都不满足,则:'不嫁!' # 获取用户的三个数据,身高、财富、颜值
height = float(input('请输入你的身高(厘米):'))
money = float(input('请输入你的财富(万):'))
face = float(input('请输入你的颜值(平方厘米):')) # 判断到底嫁不嫁
# 如果这三个条件同时满足,则:'我一定要嫁给他'
if height > 180 and money > 1000 and face > 500 :
print('我一定要嫁给他!')
# 如果三个条件有为真的情况,则:'嫁吧,比上不足,比下有余。'
elif height > 180 or money > 1000 or face > 500 :
print('嫁吧,比上不足,比下有余。')
# 如果三个条件都不满足,则:'不嫁!'
else :
print('不嫁!')
(3)循环语句
# 循环语句
# 循环语句可以使指定的代码块重复指定的次数
# 循环语句分成两种,while循环 和 for循环
# while循环
# 语法:
# while 条件表达式 :
# 代码块
# else :
# 代码块
# 执行流程:
# while语句在执行时,会先对while后的条件表达式进行求值判断,
# 如果判断结果为True,则执行循环体(代码块),
# 循环体执行完毕,继续对条件表达式进行求值判断,以此类推,
# 直到判断结果为False,则循环终止,如果循环有对应的else,则执行else后的代码块 # 条件表达式恒为True的循环语句,称为死循环,它会一直运行,慎用!
# while True :
# print('hello') # 循环的三个要件(表达式)
# 初始化表达式,通过初始化表达式初始化一个变量
# i = 0 # # 条件表达式,条件表达式用来设置循环执行的条件
# while i < 10 :
# print(i)
# # 更新表达式,修改初始化变量的值
# i += 1 # 创建一个执行十次的循环
i = 0
while i < 10 :
i += 1
print(i,'hello')
else :
print('else中的代码块')
练习
# 求100以内所有的奇数之和
# 获取所有100以内数
# i = 0
# # 创建一个变量,用来保存结果
# result = 0
# while i < 100 :
# i += 1
# # 判断i是否是奇数
# if i % 2 != 0:
# result += i # print('result =',result) # 获取100以内所有的奇数
# i = 1
# while i < 100:
# print(i)
# i += 2 # 求100以内所有7的倍数之和,以及个数
i = 7
# 创建一个变量,来保存结果
result = 0
# 创建一个计数器,用来记录循环执行的次数
# 计数器就是一个变量,专门用来记录次数的变量
count = 0
while i < 100:
# 为计数器加1
count += 1
result += i
i += 7 print('总和为:',result,'总数量为:',count)
# 水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1**3 + 5**3 + 3**3 = 153)。
# 求1000以内所有的水仙花数 # 获取1000以内的三位数
i = 100
while i < 1000: # 假设,i的百位数是a,十位数b,个位数c
# 求i的百位数
a = i // 100
# 求i的十位数
# b = i // 10 % 10 b=(i%100)//10
b = (i - a * 100) // 10
# 求i的个位数字
c = i % 10
# print(i , a , b , c) # 判断i是否是水仙花数
if a**3 + b**3 + c**3 == i :
print(i)
i += 1
# 获取用户输入的任意数,判断其是否是质数。
num = int(input('输入一个任意的大于1的整数:')) # 判断num是否是质数,只能被1和它自身整除的数就是质数
# 获取到所有的可能整除num的整数
i = 2
# 创建一个变量,用来记录num是否是质数,默认认为num是质数
flag = True
while i < num:
# 判断num能否被i整除
# 如果num能被i整除,则说明num一定不是质数
if num % i == 0 :
# 一旦进入判断,则证明num不是质数,则需要将flag修改为false
flag = False
i += 1 if flag :
print(num,'是质数')
else :
print(num,'不是质数')
# 在控制台中打印如下图形
# *****
# *****
# *****
# *****
# *****
# # 创建一个循环来控制图形的高度
# 循环嵌套时,外层循环没执行一次,内存循环就要执行一圈
# i = 0
# while i < 5:
# # 创建一个内层循环来控制图形的宽度
# j = 0
# while j < 5:
# print("* ",end='') #end=''表示不换行
# j += 1
# print()
# i += 1 #
# * j<1 i=0
# ** j<2 i=1
# *** j<3 i=2
# **** j<4 i=3
# ***** j<5 i=4
#
# *****
# ****
# ***
# **
# *
i = 0
while i < 5:
j = 0
while j < i + 1:
print("* ",end='')
j += 1
print()
i += 1
# 练习1:
# 打印99乘法表
# 1*1=1
# 1*2=2 2*2=4
# 1*3=3 2*3=6 3*3=9
# ... 9*9=81 # 创建一个外层循环来控制图形的高度
i = 0
while i < 9:
i += 1 # 创建一个内层循环来控制图形的宽度
j = 0
while j < i:
j += 1
print(f"{j}*{i}={i*j} ",end="") print()
# 求100以内所有的质数
# 创建一个循环,求1-100以内所有的数
i = 2
while i <= 100: # 创建一个变量,记录i的状态,默认认为i是质数
flag = True # 判断i是否是质数
# 获取所有可能成为i的因数的数
j = 2
while j < i:
# 判断i能否被j整除
if i % j == 0:
# i能被j整除,证明i不是质数,修改flag为False
flag = False
j += 1
# 验证结果并输出
if flag :
print(i) i += 1
# break
# break可以用来立即退出循环语句(包括else)
# continue
# continue可以用来跳过当次循环
# break和continue都是只对离他最近的循环起作用
# pass
# pass是用来在判断或循环语句中占位的,没有任何实际意义。 # 创建一个5次的循环
# i = 0
# while i < 5:
# if i == 3:
# break
# print(i)
# i += 1
# else :
# print('循环结束') # i = 0
# while i < 5:
# i += 1
# if i == 2:
# continue
# print(i)
# else :
# print('循环结束') i = 0
if i < 5:
pass
# 模块,通过模块可以对Python进行扩展,类似于Java中外置扩展包。
# 引入一个time模块,来统计程序执行的时间
from time import *
# time()函数可以用来获取当前的时间,返回的单位是秒
# 获取程序开始的时间
# 优化前:
# 10000个数 12.298秒
# 100000个数 没有结果
# 第一次优化
# 10000个数 1.577秒
# 100000个数 170.645秒
# 第二次优化
# 10000个数 0.068秒
# 100000个数 1.646秒
#
# 36的因数
# 2 18
# 3 12
# 4 9
# 6 6
#
begin = time() i = 2
while i <= 100000:
flag = True
j = 2
while j <= i ** 0.5: #优化2 i开方
if i % j == 0:
flag = False
# 一旦进入判断,则证明i一定不是质数,此时内层循环没有继续执行的必要
# 使用break来退出内层的循环
break #优化1 跳出循环
j += 1
if flag :
# print(i)
pass
i += 1 # 获取程序结束的时间
end = time() # 计算程序执行的时间
print("程序执行花费了:",end - begin , "秒")