第二篇 条件语句和循环语句

一. 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"

猜你喜欢

转载自www.cnblogs.com/victorm/p/11243638.html
今日推荐