我们用几行代码举例:
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循环 和 for循环
语法:
while 条件表达式 :
代码块
else:
代码块
例题:
打印十次Hello World!(while语句)
flag = 1 # 定义标记量
while (flag <= 10): # 若满足条件,则执行以下代码
print('Hello World!')
flag += 1
语法:
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)