程序流程控制——条件语句&循环语句

逻辑运算

程序流程控制——条件语句&循环语句_第1张图片

我们用几行代码举例:

print(1 or 0 and 2 )   # 1
# 由于or优先级最低,等价于:
print(1 or (0 and 2))  # 1 
# or的左边为1,非0,结果为True,右边不再计算

如果我们的需要判断的条件为先“or”后“and”,则需要加“()”

print((1 or 0) and 2 )   # 2

条件语句

执行的流程:
• if语句在执行时,会先对条件表达式进行求值判断,
• 如果为True,则执行if后的语句
• 如果为False,则不执行

语法:
if 条件1:

(代码块1)

elif 条件2:

(代码块2)

else:

(代码块3)

若满足相应条件,则执行对应的代码块;若条件都不满足,则执行else代码块.
总结: if-elif-else中只会有一个代码块会执行

input() 函数
• 该函数用来获取用户的输入
• input()调用后,程序会立即暂停,等待用户输入
• 用户输入完内容以后,点击回车程序才会继续向下执行
• 用户输入完成以后,其所输入的的内容会以返回值得形式返回

例题:
目前我国个人所得税计算公式如下:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

应纳个人所得税税额= (工资薪金所得 -五险一金 - 个税免征额)×适用税率-速算扣除数‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

个税免征额为5000元/月,2018年10月1日起调整后,也就是2018年实行的7级超额累进个人所得税税率表如下:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

全月应纳税所得额(含税级距) 税率(%) 速算扣除数
不超过3,000元 3 0
超过3,000元至12,000元的部分 10 210
超过12,000元至25,000元的部分 20 1,410
超过25,000元至35,000元的部分 25 2,660
超过35,000元至55,000元的部分 30 4,410
超过55,000元至80,000元的部分 35 7,160
超过80,000元的部分 45 15,160

请编写一个个税计算器,用户输入为应发工资薪金所得扣除五险一金后的金额,输出应缴税款和实发工资,结果保留小数点后两位当输入数字小于0时,输出“error”。

salary = eval(input())  # 输入薪资
if salary < 0:  # 当输入数字小于0时,输出“error”。
    print('error')
elif 0 <= salary <= 5000:   # 未到免征额
    print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(0, salary))   #输出,保留两位小数
else:
    if salary - 5000 <= 3000:   # 不超过3,000元
        shui = (salary - 5000) * 0.03 - 0
        salary_r = salary - shui
        print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(shui, salary_r))
    elif 3000 < salary - 5000 <= 12000:   # 超过3,000元至12,000元的部分
        shui = (salary - 5000) * 0.1 - 210
        salary_r = salary - shui
        print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(shui, salary_r))
    elif 12000 < salary - 5000 <= 25000:  # 超过12,000元至25,000元的部分
        shui = (salary - 5000) * 0.2 - 1410
        salary_r = salary - shui
        print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(shui, salary_r))
    elif 25000 < salary - 5000 <= 35000:  # 超过25,000元至35,000元的部分
        shui = (salary - 5000) * 0.25 - 2660
        salary_r = salary - shui
        print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(shui, salary_r))
    elif 35000 < salary - 5000 <= 55000:  # 超过35,000元至55,000元的部分
        shui = (salary - 5000) * 0.3 - 4410
        salary_r = salary - shui
        print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(shui, salary_r))
    elif 55000 < salary - 5000 <= 80000: # 超过55,000元至80,000元的部分
        shui = (salary - 5000) * 0.35 - 7160
        salary_r = salary - shui
        print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(shui, salary_r))
    elif salary - 5000 > 80000:  # 超过80,000元的部分
        shui = (salary - 5000) * 0.45 - 15160
        salary_r = salary - shui
        print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(shui, salary_r))

循环语句

break
break用来跳出当前层 for 或 while 循环.脱离该循环后程序从当前循环后代码继续续执行 ,每个break语句只能跳出当前层次循环

mysum = 0
for i in range(1,1000):
    mysum = mysum + i
    if mysum >= 100:
        break
print(i)              # 14

continue
continue用来跳过循环体中下面尚未执行的语句,但不跳出当前循环

mysum = 0
for i in range(1,10):
    if i % 2 == 0:
        continue       # 跳过后面的语句,提前下次循环
    mysum = mysum + i
print(mysum)              # 25

else
else 子句不是必须存在的,该子语句只在循环正常结束时被执行.如果在循环语句块中遇break语句跳出循环或遇到return语句结束程序或遇到错误或异常,则不会执行else 部分

for num in range(2,100):         #输出100以内素数
   for i in range(2, num):
       if num % i == 0:
           break
       else:
           print(num,end = ' ')  #在同一行内输出结果
# 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 

while语句

循环语句可以使指定的代码块重复指定的次数.循环语句分成两种,while循环 和 for循环
语法:
while 条件表达式 :
代码块
else:
代码块

例题:
打印十次Hello World!(while语句)

flag = 1  # 定义标记量
while (flag <= 10):  # 若满足条件,则执行以下代码
    print('Hello World!')
    flag += 1

for语句

语法:
for 变量 in 序列(遍历的规则):
代码块

注意: for循环的代码块会执行多次,序列中有几个元素就会执行几次。每执行一次就会将序列中的一个元素赋值给变量,所以我们可以通过变量来获取列表中的元素。
例题:
打印十次Hello World!(for语句)

for i in range(10):  # range(n):依次生成0~n-1的整形数字
    print('Hello World!')

【补充】:range(start, stop, step)
start:计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5)
stop:计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
step:step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

循环嵌套

Python 语言允许在一个循环体里面嵌入另一个循环。
例题:
水仙花数的例举:

n = int(input())         # 输入水仙花数位数,转为整数
for num in range(10 ** (n-1),10 ** n):
    sumN = 0             # 每个循环先置sumN为0
    for i in str(num):   # num转为字符串,遍历num
       sumN = sumN + int(i) ** n    # i 转为整数
       if num == sumN:   # 累加结果与num值相同是水仙花数
           print(num)

综合应用

例题:
判断素数函数
描述‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬
写一个函数isPrime(n)用于判断一个数字n是不是素数,用户输入一个正整数,在一行内输出不大于该数的所有素数,各数后面用一个空格分隔。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬
输入格式
输入一个正整数‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬
输出格式
不大于该数的所有素数,各数后面用一个空格分隔。

代码参考:

num = int(input())
for i in range(num + 1):
    for j in range(2, i):
        if i % j == 0:
            break
    else:
        if i != 0 and i != 1:
            print(i, end=' ')

课后练习

1.99乘法表

flag_1 = 1 # 外层循环标记量
while (flag_1 <= 9):
    flag_2 = 1 # 内层循环标记量
    while (flag_2 <= flag_1):
        if flag_2 < flag_1:   # 检查是否到达了最后一个式子
            print('{} * {} = {}'.format(flag_2, flag_1, flag_2*flag_1), end='   ')   # 若不是一行中的最后一项,就用空格分隔
        else:
            print('{} * {} = {}'.format(flag_2, flag_1, flag_2*flag_1))   # 最后一个换行
        flag_2 += 1
    flag_1 += 1

2.判断输入的是否是质数

def IsPrime(number):
    if number ==0 or number ==1:
        print('{}既不是质数也不是和数'.format(number))
    elif number == 2:
        print('2是质数')
    else:
        for i in range(2, number):
            if number%i == 0:
                print('{}不是质数'.format(number))
                break
        else:
            print('{}是质数'.format(number))


x = input('请输入数字(直接输入回车,程序结束。):\n')
while(1):
    if x == '':
        print('程序结束。')
        break
    IsPrime(int(x))
    x = input()

3.找出1000以内的水仙花数

for i in range(100, 1000):
    if int(i) == int(str(i)[0]) ** 3 + int(str(i)[1]) ** 3 + int(str(i)[2]) ** 3:
        print(i, end=' ')

4.猜拳

import random as rd
computer_order = rd.randint(1, 3)
order_list = ['石头', '剪刀', '布']
human_order = int(input('请输入1(石头),2(剪刀), 3(布):(回车公布结果,输入0退出)\n'))
while(1):
    if human_order == 0:
        print('程序结束。')
        break
    elif human_order == 1:
        if computer_order == 2:
            print('电脑出的是剪刀')
            print('你赢了!')
        elif computer_order == 3:
            print('电脑出的是布')
            print('电脑赢了!')
    elif human_order == 2:
        if computer_order == 1:
            print('电脑出的是石头')
            print('电脑赢了!')
        elif computer_order == 3:
            print('电脑出的是布')
            print('你赢了!')
    elif human_order == 3:
        if computer_order == 1:
            print('电脑出的是石头')
            print('你赢了!')
        elif computer_order == 2:
            print('电脑出的是剪刀')
            print('电脑赢了!')
    elif human_order == computer_order:
        print('电脑出的是{}'.format(order_list[computer_order-1]))
        print('平局')
    else:
        print('输入有误,请重新输入:')
    human_order = int(input())
    computer_order = rd.randint(1, 3)

你可能感兴趣的:(Python基础,python)