一. if 条件语句
基础语法1:
if C1:
pass1
else:
pass2
当条件C1满足时,执行pass1部分;
当条件不满足C1时,执行pass2部分
基础语法2:
if C1:
pass1
# elif是分支语句,是不限制数量的,可以有多个
elif C2:
pass3
else:
pass2
练习:随机生成一个数字,你猜这个数字是多少
生成随机数字,要用到random模块,需要先import random 进行导入
random.randint(0,100):在0,100区间内生成随机整数
import random
score = random.randint(0,10)
data = int(input("请输入一个0~10的数字,我跟你比大小\n"))
if score == data:
print("恭喜,你猜中了")
elif score > data:
print("哈哈,你猜的数小了,我的数字是{},你猜的数字是{}".format(score,data))
else:
print("你猜的数大了些哦,我的数字是{},你猜的数字是{}".format(score,data))
bool()函数:判断值是True 还是 False
可以认为所有空的,其值都是false
# 空的值都是faise:0,None,"",(),{},[],False,
print(bool(0))
print(bool(""))
print(bool({}))
print(bool(()))
print(bool([]))
print(bool(None))
print(bool(False))
#非空的其值是TRUE
print(bool(" ")) # 空格
print(bool("0.0"))
#输出
False
False
False
False
False
False
False
True
True
boo()函数的作用:
1. 判断值是true 还是 false
2. 当条件语句没有按照你预期执行时,可以在前面加个bool()函数,打印出来看表达式的值是否满足
import random
score = random.randint(0,10)
data = int(input("请输入一个0~10的数字,我跟你比大小\n"))
print(bool(score == data))
print(bool(score > data))
if score == data:
print("恭喜,你猜中了")
elif score > data:
print("哈哈,你猜的数小了,我的数字是{},你猜的数字是{}".format(score,data))
else:
print("你猜的数大了些哦,我的数字是{},你猜的数字是{}".format(score,data))
# 练习
'''
学习成绩>=90分的同学用A表示,60~89分用B表示,60分以下用C表示
'''
score = float(input("请输入你的分数:"))
if score >89:
print("A")
elif 60<=score<=89:
print("B")
else:
print("C")
'''
个人所得税
'''
salary = float(input("请输入你的工资:"))
taxPay = salary - 3500
if taxPay <= 1500:
print("应纳税额为{}".format(taxPay*0.03 - 0))
elif 1500<taxPay<=4500:
print("应纳税额为{}".format(taxPay*0.1 - 105))
elif 4500<taxPay<=9000:
print("应纳税额为{}".format(taxPay*0.2 - 555))
elif 9000<taxPay<=35000:
print("应纳税额为{}".format(taxPay*0.25 - 1005))
elif 35000<taxPay<=55000:
print("应纳税额为{}".format(taxPay*0.3 - 2755))
elif 55000<taxPay<=80000:
print("应纳税额为{}".format(taxPay*0.35 - 5505))
elif 80000<taxPay:
print("应纳税额为{}".format(taxPay*0.45 - 13505))
二. 循环语句
关键词:while...else... ; for...esle...; break; continue;
1. while循环
基础语法1
while contition:
statement1
基础语法2:while循环里加了一个else,这个是与其他语言不同的
while contition:
statement1
else:
statement2
while循环退出的条件:
1. while后面的条件表达式为false,就退出
2. 循环语句块里面有break,当break条件满足时退出
while contition:
statement1
break
# 输入一个随机数,猜数字,猜中了就停止,没猜中就一直猜
# 方式1
while True:
score = random.randint(0, 10)
data = int(input("请输入一个0~10的数字,我跟你比大小\n"))
if score == data:
print("恭喜,你猜中了")
break
elif score > data:
print("哈哈,你猜的数小了,我的数字是{},你猜的数字是{}".format(score,data))
else:
print("你猜的数大了些哦,我的数字是{},你猜的数字是{}".format(score,data))
# 方式2
import random
while True:
score = random.randint(0, 10)
data = int(input("请输入一个0~10的数字,我跟你比大小\n"))
if score == data:
print("恭喜,你猜中了")
break
else:
print("我的数字是{},你猜的数字是{}".format(score,data))
while ... else...语句练习
1. 始终执行else语句,循环没有break
count = 0
while count < 10:
count +=1 # count = count + print(count)else:
print("这里是else语句:{}".format(count))
# 输出
1
2
3
4
5
6
7
8
9
10
这里是else语句:10
# print语句的位置不同,所得到的结果也不同,注意体会
count = 0
while count < 10:
print(count)
count +=1 # count = count + 1
else:
print("这里是else语句:{}".format(count))
# 输出
0
1
2
3
4
5
6
7
8
9
这里是else语句:10
2. 不执行else语句,循环被break中断后,不再执行else
上面两个例子都执行了else语句,那什么时候不会走到else语句里呢?
# 什么时候不会走到else语句里面呢?
count = 0
while count < 10:
print(count)
count +=1 # count = count + 1
if count > 6:
break
else:
print("这里是else语句:{}".format(count))
#输出
0
1
2
3
4
5
6
2. for 循环
for循环与while循环的区别:
1. while循环只要条件满足一直可以循环下去
2. for循环,采用的是遍历机制,有多个少条件满足就循环多少次
基础语法1:
for data in iterator:
statement1
基础语法2:
for data in iterator:
statement1
else:
statement2
基础语法3:
for data in iterator:
statement1
break
# for循环里有break,条件满足是就不执行else部分了
else:
statement2
range()函数:
print(list(range(3))) # 第一个参数没有指定,默认是0开始
print(list(range(1,10))) # 最后一个10不计算在内
print(list(range(1,10,2))) # 2 表示步长,即每隔2位取一个数
# 输出
[0, 1, 2]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 3, 5, 7, 9]
练习:把上面的while循环改成for循环
1. 执行else语句
count = 0
for count in range(5):
print(count)
count +=1 # count = count + 1
else:
print("这里是else语句:{}".format(count))
# 输出
0
1
2
3
4
这里是else语句:5
2. for循环中条件满足break语句后,不执行else语句
count = 0
for count in range(5):
print(count)
count +=1 # count = count + 1
if count > 4:
break
else:
print("这里是else语句:{}".format(count))
#输出
0
1
2
3
4
3. Continue
当continue被执行后,直接就会进入下一次循环,之后的逻辑就不会被再次执行了
for i in range(10):
if i % 2 == 0:
continue
print(i)
# 解释
'''
当i=0时,0 除以2的余数是0,满足if语句,if语句中的逻辑是continue,所以直接进行下一次循环,而不执行print语句
当i=1时,1 除以2的余数是1,不满足if语句,if语句中的逻辑不被执行,执行print语句,打印1
当i=2时,2 除以2的余数是0,满足if语句,if语句中的逻辑是continue,所以直接进行下一次循环,而不执行print语句
...
'''
# 输出
1
3
5
7
9
循环练习
1. 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?分别是多少?
count = 0
for baiwei in range(1,5):
for shiwei in range(1,5):
for gewei in range(1,5):
if baiwei == shiwei or baiwei == gewei or shiwei == gewei:
continue
count +=1
print("{0}{1}{2}".format(baiwei,shiwei,gewei))
print("不重复的数字一共有{}个".format(count))
2. 有一分数序列:2/1 、3/2 、5/3、8/5、13/8、21/13....求出这个数列的前20项之和
方面1:通过中间变量的方式
fenzi,fenmu = 2,1
result = 0
for i in range(1,21):
result += fenzi/fenmu
# 这里需要用到一个临时变量,把前一个分式的分子临时存下来
temp = fenzi
fenzi = fenzi+fenmu # 如果上面不用临时变量存,这里就会改变分子的值了,那么下一个数据的分母就不是上一个数的分子了
fenmu = temp
print(result)
方法2:不用中间变量的方式
result,fenzi,fenmu = 0, 2, 1
for i in range(20):
result += fenzi/fenmu
# 把他们写在一行,这里就是同时赋值了
fenzi,fenmu = fenzi+fenmu,fenzi
print(result)
3. 输入字符串,判断是否为回文
方法一:for...else...
'''
解法思路:
1. 先求出字符串的长度:len()
2. 取字符串的第一个字母和最后一个字母一次比对
3. 如果所有字符串都相同,就一直比对,循环比对完了,没有执行到if语句块里去,就是回文,否则就不是回文
4. 字符串从前往后取,是从索引0开始的;而从后往前取,是从索引-1开始的
'''
data = input("请在下方输入一个英文字符串:\n")
for i in range(len(data)):
if data[i] != data[-(i+1)]: # 难点在这里,怎么样从后往前取字符串的字母
print("这个不是回文")
break
else:
print("这个是回文")
方法二:切片的反转方法
切片基础知识
data = "abcdefghigk"
print(data[0:5]) # abcde 顺序取到第5个
print(data[0:5:2]) # ace 隔两个取一次
print(data[:5:2]) # ace 开头不写,默认是从索引0开始,隔两个取一次
print(data[::2]) # acegik 开头和结尾都不写,默认是从索引0开始,取到最后一个,隔两个取一次
print(data[::-1]) # kgihgfedcba 开头和结尾都不写,默认是从索引-1开始往前取,相当于就是把字符串翻转了
print(data[5:0:-1]) # fedcb 从第五个开始,取到0截止,-1 代表的是往反方向取
data = input("请在下方输入一个英文字符串:\n")
if data == data[::-1]:
print("是回文")
else:
print("不是回文")
练习:写程序破解下面的密码
明文 | 密文 |
abc | bcd |
wxy | xyz |
请问这里明文是什么? | cfmjfwf!zpvstfmg" |
需要知识点:
ord()函数:查看字符的十进制值
chr()函数:查看数字对应的字符
# ord是查看字符的十进制值
print(ord('A'))
# chr是查看数字对应的字符
print(chr(97))
# 65
# a
'''
解题:根据给出的两个明文和密文,密文是在明文的基础上+1个字符得到的
推断:
1. 先遍历取到密文的所有单个字符,用ord()函数查找到对应的十进制数字
2. 对该十进制数字-1,用chr()函数查找到该十进制数字对应的字符
3. 让后把这些字符拼接起来
'''
方法1:join()方法
miwen = 'cfmjfwf!zpvstfmg"'
li=[]
for x in miwen:
y = chr(ord(x)-1)
li.append(y)
print("".join(li))
方法2:字符串拼接
miwen = 'cfmjfwf!zpvstfmg"'
y=''
for x in miwen:
y += chr(ord(x)-1)
print(y)
miwen = 'cfmjfwf!zpvstfmg"'
for x in miwen:
print(chr(ord(x)-1), end="")
# 利用print()函数,end参数实现拼接
三. 异常(Exception)
不符合程序预期或者程序处理不了,需要进行异常处理。
基础语法1
try:
可能存在异常的程序
except Exception:
statement2
else:
statement3
finally:
statement4
raise Exception
基础语法2
try:
可能存在异常的程序
except Exception as error:
statement2
finally:
有没有异常都会执行的语句
比如关闭文件数据库等,担心有异常而不能执行时,都可以在这里操作
raise Exception
基础语法3: 异常的嵌套
当在except处理时,可能也存在异常,所以需要用到异常嵌套
try:
print(1)
1/0
print(2)
except ZeroDivisionError as error:
try:
print(a)
except NameError:
print("嵌套处理异常")
except Exception as error:
print(type(error))
finally:
print("这里肯定会执行!")
自定义异常,raise
# raise异常,是需要提前自定义好的
class MyException(Exception):
pass
raise MyException
try:
1/0
except Exception as error: # 想知道这个异常对象是什么,可以用 as error
print(error)
print(type(error))
# 输出
division by zero
<class 'ZeroDivisionError'>
练习:九九乘法表
for i in range(1,10):
for j in range(1,i+1):
print("{}*{}={}\t".format(j, i, i * j),end='')
print("") # 这个打印的目的是换行,从下一行开始新的循环
# 输出
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81