您的位置:首页 > 编程语言 > Python开发

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

2018-03-03 16:29 337 查看

分支语法

当程序运行的结果可能有两种或多种时,我们就可以使用分支语法来选择输出哪种结果,只要满足相应的条件,程序就会进入某个分支继续下去。

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: