Python基础(四) - 分支与循环

分支语法

  • 当程序运行的结果可能有两种或多种时,我们就可以使用分支语法来选择输出哪种结果,只要满足相应的条件,程序就会进入某个分支继续下去。
  • Python中分支语法的格式为:
if 条件 :
    相应的代码
elif 条件 :
    相应的代码
else:
    相应的代码
  • 程序运行时,先从if语句开始,若满足条件,则进入运行相应的代码,并且不会再进入elif与else的语句;如果if条件不成立,则进入下一个elif语句的判断,满足条件则运行相应代码,并且不再进入其他分支;若if与elif语句条件都不满足,则直接进入else语句运行代码

循环结构

  • 当一段程序需要运行多次或者不知道会运行多少次时,我们可以使用循环结构来满足,设定相应的次数或者设定满足条件,则可以让程序按照要求执行多次

循环结构语法:

for循环
# xxx:变量名,整型,会随着循环渐渐增大,第一次进入语句时xxx = a
# 若xxx命名为‘_‘则表示在循环中不需要使用此变量
# a:a表示起始数值,默认为0
# b:b表示最大数值,当xxx大于b时,循环结束
# c:c表示每一次循环后xxx的增量,默认为1
for xxx in range(a, b, c):
    相应的代码
while循环
'''
当满足while后面的条件时,while里的代码会一直执行,直到条件不满足是循环结束
使用while语句需要注意不要变成死循环
'''
while 条件 :
    相应的代码

分支与循环语法应用

1. 模拟登入,输入账号密码

import getpass

acount = input('请输入用户名:')
# 使用getpass库使密码输入不再是明文
password = getpass.getpass('请输入密码:') 

# 分支需要注意缩进,如果不缩进则不受分支语句控制
if acount == 'admin'  and  password == '123456':
    print('成功登入')
else:
    print('用户名或密码错误')

2. 求方程式解

'''
        5x+3 (x < -1)
f(x) =  2x-1 (-1 <= x <= 1)
        3x-5 (x > 1)

'''
x = float(input('请输入x的值:'))

if x < -1:
    y = 5*x+3
    print('y:%.2f' % y)
elif x>=-1 and x<=1:
    y = 2*x-1
    print('y:%.2f' % y)
else:
    y = 3*x-5
    print('y:%.2f' % y)

3. 输入成绩,评价等级

'''
90分及以上:A
80-89:B
70-79:C
60-69:D
60分以下:E
'''
grade = float(input('请输入成绩:'))

if grade >= 90:
    print('等级为A')
elif grade >= 80:
    print('等级为B')
elif grade >= 70:
    print('等级为C')
elif grade >= 60:
    print('等级为D')
else:
    print('不及格')

# 官方建议使用扁平化代码优于嵌套型
'''
if grade >= 90:
    print('等级为A')
    else:
        if grade >= 80:
            print('等级为B')
            else:
                if grade >= 70:
                    print('等级为C')
                    else:
                        if grade >= 60:
                            print('等级为D')
                        else:
                            print('不及格')

'''

4. 生成随机数

import random # 随机数模块
# from random import random
# from math import pi, sqrt
# 使用from语法可直接从模块导入需要使用的方法而不用再在方法前加模块名 如 print(random())


# random生成随机小数[0,1)
print(random.random())
# randint生成随机整数[a,b],a和b自行给,a<=b
print(random.randint(1,6))

5. 投骰子

import random

random_num = random.randint(1,6)

if random_num == 1:
    print('骰出了1,你是非洲酋长')
elif random_num == 2:
    print('骰出了2,你比非洲酋长好一点')
elif random_num == 3:
    print('骰出了3,你的运气一般般')
elif random_num == 4:
    print('骰出了4,你的运气还不错')
elif random_num == 5:
    print('骰出了5,你是欧洲人呢')
else:
    print('哇,骰出了6,欧皇诞生!')

6. 统计点数出现次数

from random import randint

f1 = 0
f2 = 0
f3 = 0
f4 = 0
f5 = 0
f6 = 0

# x为自定义变量名,在每次循环后数字+1
for x in range(6000):
    random_num = randint(1,6)
    if random_num == 1:
        f1 += 1
    elif random_num == 2:
        f2 += 1
    elif random_num == 3:
        f3 += 1
    elif random_num == 4:
        f4 += 1
    elif random_num == 5:
        f5 += 1
    else:
        f6 += 1

print('1点次数:%d' % f1)
print('2点次数:%d' % f2)
print('3点次数:%d' % f3)
print('4点次数:%d' % f4)
print('5点次数:%d' % f5)
print('6点次数:%d' % f6)

7. 华氏度与摄氏度转换

# 华氏度 = 32 + 摄氏度*1.8
# 摄氏度 = (华氏度 - 32)/1.8

choose = int(input('华氏度转摄氏度请输入0,摄氏度转华氏度请输入1:'))
temper = float(input('请输入温度:'))

if choose == 0:
    # print('华氏度')
    temper2 = (temper -32)/1.8
    print('%.2f华氏度 = %.2f摄氏度' %  (temper,temper2))
elif  choose == 1:
    # print('摄氏度')
    temper2 = 32 + temper*1.8
    print('%.2f摄氏度 = %.2f华氏度' % (temper,temper2))
else:
    print('输入错误')

8. 输入三边长,求三角形周长和面积

import math

a = float(input('请输入第一条边长:'))
b = float(input('请输入第二条边长:'))
c = float(input('请输入第三条边长:'))

if (a+b>c and a+c>b and b+c>a):
    dd = (a+b+c)*0.5
    ss = math.sqrt(dd*(dd-a)*(dd-b)*(dd-c))
    print('三角形周长:%.2f  三角形面积:%.2f' % (2*dd, ss))
else:
    print('输入边长不可组成三角形')

9. 求1到100的和

### 1到100求和

x = 0
for num in range (101):# range括号内若只写一个数值,则默认从零开始计数,每次数值+1
   x += num
print(x)

10. 求1到100偶数的和

### 1到100的偶数的和

x = 0
for num in range (101):# range(x,y,z)x是起始值,y是终止值,z是步长
    if num % 2 == 0:
        x += num
print(x)

11. 求1到100 中3或5的倍数的和

### 1到100 中3或5的倍数的和

x = 0
for num in range (101):
    if num % 3 ==0 or num % 5 == 0:
        x += num
print(x)


----------


x = 0
num = 0
while num < 101:
    if num % 3 == 0 or num % 5 == 0:
        x += num
    num += 1
print(x)

12. 猜1到100之间的一个数

# 人猜数字
import random

real_num = random.randint(1,100)
the_num = 0
count_num = 0
while the_num != real_num:
    the_num = int(input('请输入你猜的数字:'))
    if the_num > real_num:
        print('很遗憾,猜的数字大了')
    elif the_num < real_num:
        print('很遗憾,猜的数字小了')
    count_num += 1
    if count_num > 7:
        print('已经猜了%d次了哦,智商需要提高了~' % count_num)
print('恭喜猜对数字:%d,一共猜了%d次' % (real_num, count_num))


----------
# 机器猜数字
answer = 0
min_num = int(input('最小数是?'))
max_num = int(input('最大数是?'))
game_over = False
while not game_over:
    answer = (min_num + max_num) // 2
    my_answer = input('我猜是%d,对了吗?' % answer)
    if my_answer == '大一点':
        min_num = answer
    elif my_answer == '小一点':
        max_num = answer
    elif my_answer == '猜对了':
        game_over = True
    else:
        print('不太明白你的意思')

13. 人机猜拳

import random

print('人机猜拳规则:0为石头,1为剪刀,2为布')
person_num = 1000
comput_num = 1000
game_over = False
while not game_over:
    is_plus = 0
    is_over = False
    while not is_over:
        is_plus = int(input('人类:%d分,电脑:%d分,请下注:' % (person_num, comput_num)))
        if is_plus > comput_num  or is_plus > person_num:
            print('电脑或你的点数不够,下注失败')
        else:
            is_over = True
    person_ans = int(input('请选择:'))
    comput_ans = random.randint(0,2)
    if person_ans == comput_ans:
        print('平手')
    elif person_ans == 0 and comput_ans == 1:
        print('人出石头,电脑出剪刀,人胜')
        person_num += is_plus
        comput_num -= is_plus
    elif person_ans == 0 and comput_ans == 2:
        print('人出石头,电脑出布,电脑胜')
        person_num -= is_plus
        comput_num += is_plus
    elif person_ans == 1 and comput_ans == 0:
        print('人出剪刀,电脑出石头,电脑胜')
        person_num -= is_plus
        comput_num += is_plus
    elif person_ans == 1 and comput_ans == 2:
        print('人出剪刀,电脑出布,人胜')
        person_num += is_plus
        comput_num -= is_plus
    elif person_ans == 2 and comput_ans == 0:
        print('人出布,电脑出石头,人胜')
        person_num += is_plus
        comput_num -= is_plus
    elif person_ans == 2 and comput_ans == 1:
        print('人出布,电脑出剪刀,电脑胜')
        person_num -= is_plus
        comput_num += is_plus
    else:
        print('输入有误')

    if person_num == 0:
        print('电脑获胜!')
        game_over = True
    elif comput_num == 0:
        print('人类获胜!')
        game_over = True

14. 计算个人所得税

# 不要在if else里面直接print 重复率太高且不好修改

money = float (input('请输入本月收入:'))
wu_xian_yi_jin = float(input('请输入五险一金所扣费用:'))
diff = money - wu_xian_yi_jin - 3500
tax = 0
deduction = 0
if diff > 80000:
    tax = 0.45
    deduction = 13505
elif diff > 55000:
    tax = 0.35
    deduction = 5505
elif diff > 35000:
    tax = 0.3
    deduction = 2755
elif diff > 9000:
    tax = 0.25
    deduction = 1005
elif diff > 4500:
    tax = 0.2
    deduction = 555
elif diff > 1500:
    tax = 0.1
    deduction = 0
else:
    tax = 0
    deduction = 0

personal = abs(diff * tax - deduction) # abs() 求绝对值
print('个人所得税为:%d元' % personal)

15. 买鸡问题

# 100元买鸡,公鸡5元,母鸡3元,小鸡一元三只,刚好100只鸡,问分别多少只
'''
for gong_ji in range(0, 21):
    for mu_ji in range(0, (100-(5*gong_ji))//3):
        for xiao_ji in range(0, 100,3):
            if gong_ji+mu_ji+xiao_ji == 100 and 5*gong_ji+3*mu_ji+xiao_ji//3 == 100:
                print(gong_ji,mu_ji,xiao_ji)

'''
# 提升效率
for gong_ji in range(0, 21):
    for mu_ji in range(0, (100-(5*gong_ji))//3):
        xiao_ji = 100 - gong_ji - mu_ji
        if  xiao_ji % 3 == 0 and 5*gong_ji+3*mu_ji+xiao_ji//3 == 100:# 此处使用//原因请看 #警告
            print(gong_ji,mu_ji,xiao_ji)

16. 捕鱼问题

# 作业3 有5人捕鱼,鱼很多,第二早,a把鱼分五份,多一条扔掉,拿一份,b分五份,多一条扔了,拿一份,cde同样操作,问至少多少条鱼
fish = 1
while True:
    total = fish
    is_over = True
    for _ in range (5):
        if (total - 1) % 5 == 0:
            total = (total - 1) // 5 * 4
        else:
            is_over = False
            break
    if is_over:
        print(fish)
        break
    fash += 1

17. 完美数问题

# 完美数:一个数等于除了自身以外所有因子的和
# 输出10000以内所有完美数
import time
import math

start = time.time()

for num in range(2,10001):
    total_factor = 0
    for factor in range(2, int(math.sqrt(num)) + 1):
        if num % factor == 0:
            total_factor += (factor + (num / factor == factor and 0 or num / factor))
    if total_factor + 1 == num:
        print(num)

end = time.time()

print(end - start)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值