"""
Author: Seven_0507
Date: 2019-05-16
"""
Day02主要重新学习总结Python基本语法的分支结构、循环结构,重点用多种练习题作为学习内容!
文章目录
1. Python分支结构练习题
1.1 用户身份验证
"""
用户身份验证
"""
# import getpass
# from getpass import getpass
# from getpass import *
username = input('请输入用户名: ')
password = input('请输入口令: ')
# 输入口令的时候终端中没有回显
# password = getpass.getpass('请输入口令: ')
if username == 'admin' and password == '123456':
print('身份验证成功!')
else:
print('身份验证失败!')
请输入用户名: csn
请输入口令: 1234455
身份验证失败!
1.2 分段函数求值
KaTeX parse error: Expected & or \\ or \cr or \end at position 37: …-5&\text{(x>1)}\̲x̲+2&\text{(-1}\l…
"""
分段函数求值
3x - 5 (x > 1)
f(x) = x + 2 (-1 <= x <= 1)
5x + 3 (x < -1)
"""
x = float(input('x = '))
if x > 1:
y = 3 * x - 5
elif x >= -1:
y = x + 2
else:
y = 5 * x + 3
print('f(%.2f) = %.2f' % (x, y))
x = 5
f(5.00) = 10.00
1.3 英制单位英寸和公制单位厘米互换
"""
英制单位英寸和公制单位厘米互换
"""
value = float(input('请输入长度: '))
unit = input('请输入单位: ')
if unit == 'in' or unit == '英寸':
print('%f英寸 = %f厘米' % (value, value * 2.54))
elif unit == 'cm' or unit == '厘米':
print('%f厘米 = %f英寸' % (value, value / 2.54))
else:
print('请输入有效的单位')
请输入长度: 5
请输入单位: cm
5.000000厘米 = 1.968504英寸
1.4 掷骰子游戏
"""
掷骰子决定做什么事情
"""
from random import randint
face = randint(1, 6)
if face == 1:
result = '唱首歌'
elif face == 2:
result = '跳个舞'
elif face == 3:
result = '学狗叫'
elif face == 4:
result = '做俯卧撑'
elif face == 5:
result = '念绕口令'
else:
result = '讲冷笑话'
print(result)
讲冷笑话
1.5 百分制成绩转等级制成绩
"""
百分制成绩转等级制成绩
90分以上 --> A
80分~89分 --> B
70分~79分 --> C
60分~69分 --> D
60分以下 --> E
"""
score = float(input('请输入成绩: '))
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
else:
grade = 'E'
print('对应的等级是:', grade)
请输入成绩: 100
对应的等级是: A
1.6 计算出三角形的周长和面积
"""
判断输入的边长能否构成三角形
如果能则计算出三角形的周长和面积
面积计算使用:海伦公式
"""
import math
a = float(input('a = '))
b = float(input('b = '))
c = float(input('c = '))
if a + b > c and a + c > b and b + c > a:
print('周长: %f' % (a + b + c))
p = (a + b + c) / 2
area = math.sqrt(p * (p - a) * (p - b) * (p - c))
print('面积: %f' % (area))
else:
print('不能构成三角形')
a = 2
b = 3
c = 4
周长: 9.000000
面积: 2.904738
1.7 计算个人所得税
"""
输入月收入和五险一金计算个人所得税
"""
salary = float(input('本月收入: '))
insurance = float(input('五险一金: '))
diff = salary - insurance - 3500
if diff <= 0:
rate = 0
deduction = 0
elif diff < 1500:
rate = 0.03
deduction = 0
elif diff < 4500:
rate = 0.1
deduction = 105
elif diff < 9000:
rate = 0.2
deduction = 555
elif diff < 35000:
rate = 0.25
deduction = 1005
elif diff < 55000:
rate = 0.3
deduction = 2755
elif diff < 80000:
rate = 0.35
deduction = 5505
else:
rate = 0.45
deduction = 13505
tax = abs(diff * rate - deduction)
print('个人所得税: ¥%.2f元' % tax)
print('实际到手收入: ¥%.2f元' % (diff + 3500 - tax))
本月收入: 12000
五险一金: 1800
个人所得税: ¥785.00元
实际到手收入: ¥9415.00元
2. Python循环结构练习题
2.1 计算1~100和
"""
(1) 用for循环实现1~100求和
"""
sum = 0
for x in range(101):
sum += x
print(sum)
"""
(2) 用while循环实现1~100求和
"""
sum = 0
num = 1
while num <= 100:
sum += num
num += 1
print(sum)
5050
5050
- range可以用来产生一个不变的数值序列
- range(101)可以产生一个0到100的整数序列。
- range(1, 100, 2)可以产生一个1到99的奇数序列,其中的2是步长,即数值序列的增量。
2.2 1~100之间的偶数求和
"""
(1) 用for循环实现1~100之间的偶数求和
"""
sum = 0
for x in range(2, 101, 2):
sum += x
print(sum)
"""
(2) 用for循环+if分支实现1~100之间的偶数求和
"""
sum = 0
for x in range(1, 101):
if x % 2 == 0:
sum += x
print(sum)
"""
(3) 用while循环实现1~100之间的偶数求和
"""
sum = 0
num = 2
while num <= 100:
sum += num
num += 2
print(sum)
2550
2550
2550
2.3 猜数字游戏
"""
猜数字游戏
计算机出一个1~100之间的随机数由人来猜
计算机根据人猜的数字分别给出提示大一点/小一点/猜对了
"""
import random
answer = random.randint(1, 100)
counter = 0
while True:
counter += 1
number = int(input('请输入: '))
if number < answer:
print('大一点')
elif number > answer:
print('小一点')
else:
print('恭喜你猜对了!')
break
print('你总共猜了%d次' % counter)
if counter > 7:
print('你的智商余额明显不足')
请输入: 50
大一点
请输入: 90
小一点
请输入: 70
小一点
请输入: 55
小一点
请输入: 52
小一点
请输入: 51
恭喜你猜对了!
你总共猜了6次
2.4 九九乘法表
"""
输出乘法口诀表(九九表)
"""
for i in range(1, 10):
for j in range(1, i + 1):
print('%d*%d=%d' % (i, j, i * j), end='\t')
print()
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
2.5 素数判断
"""
输入一个正整数判断它是不是素数
"""
from math import sqrt
num = int(input('请输入一个正整数: '))
end = int(sqrt(num))
is_prime = True
for x in range(2, end + 1):
if num % x == 0:
is_prime = False
break
if is_prime and num != 1:
print('%d是素数' % num)
else:
print('%d不是素数' % num)
请输入一个正整数: 1
1不是素数
2.6 计算两个正整数的最大公约数和最小公倍数
"""
输入两个正整数计算最大公约数和最小公倍数
"""
x = int(input('x = '))
y = int(input('y = '))
if x > y:
x, y = y, x
for factor in range(x, 0, -1):
if x % factor == 0 and y % factor == 0:
print('%d和%d的最大公约数是%d' % (x, y, factor))
print('%d和%d的最小公倍数是%d' % (x, y, x * y // factor))
break
x = 4
y = 2
2和4的最大公约数是2
2和4的最小公倍数是4
2.7 打印三角形图案
"""
打印各种三角形图案
*
**
***
****
*****
*
**
***
****
*****
*
***
*****
*******
*********
"""
row = int(input('请输入行数: '))
for i in range(row):
print(i+1,end="\t")
for _ in range(i + 1):
print('*', end='')
print()
print('-'*30)
for i in range(row):
print(i+1,end='\t')
for j in range(row):
if j < row - i - 1:
print(' ', end='')
else:
print('*', end='')
print()
print('-'*30)
for i in range(row):
print(i+1,end='\t')
for _ in range(row - i - 1):
print(' ', end='')
for _ in range(2 * i + 1):
print('*', end='')
print()
请输入行数: 4
1 *
2 **
3 ***
4 ****
------------------------------
1 *
2 **
3 ***
4 ****
------------------------------
1 *
2 ***
3 *****
4 *******
3. Python分支与循环综合练习题
3.1 寻找水仙花数练习
"""
找出100~999之间的所有水仙花数(自幂数)
水仙花数:是这个数每位上的立方和等于这个数本身,如: 153 = 1**3 + 5**3 + 3**3
拓展知识:
一位自幂数:独身数
两位自幂数:没有
三位自幂数:水仙花数
四位自幂数:四叶玫瑰数
五位自幂数:五角星数
六位自幂数:六合数
七位自幂数:北斗七星数
八位自幂数:八仙数
九位自幂数:九九重阳数
十位自幂数:十全十美数
"""
for num in range(100, 1000):
# 先获取num的个十百位,再判断个十百每位立方和是否等于num
low = num % 10 # 取个位==取余数
mid = num // 10 % 10 # 取十位==整除再求余数
high = num // 100 # 取百位==整除
if num == low ** 3 + mid ** 3 + high ** 3:
print(num)
153
370
371
407
3.2 寻找完全数练习
"""
找出1~9999之间的所有完美数
完美数是它的真因子(除自身外其他所有因子)和正好等于这个数本身的数
例如: 6 = 1 + 2 + 3, 28 = 1 + 2 + 4 + 7 + 14
"""
import math
for num in range(1, 10000):
sum = 0
# 先需要找到num的所有因数,可以通过遍历sqrt(n)的范围得到
for factor in range(1, int(math.sqrt(num)) + 1):
if num % factor == 0:
sum += factor
if factor > 1 and num / factor != factor:
sum += num / factor
# 最后判断因数之和是否等于本身
if sum == num:
print(num)
1
6
28
496
8128
3.3 百钱百鸡练习
"""
求解《百钱百鸡》问题
1只公鸡5元 1只母鸡3元 3只小鸡1元 用100元买100只鸡
问公鸡 母鸡 小鸡各有多少只?
公鸡5元一只,那么100元内,公鸡数量要小于20,母鸡数量要小于33
公鸡:x 母鸡:y 小鸡:100-x-y 求解:5x+3y+(100-x-y)=100成立
"""
for x in range(0, 20):
for y in range(0, 33):
z = 100 - x - y
if 5 * x + 3 * y + z / 3 == 100:
print('公鸡: %d只, 母鸡: %d只, 小鸡: %d只' % (x, y, z))
# 要理解程序背后的算法 - 穷举法
公鸡: 0只, 母鸡: 25只, 小鸡: 75只
公鸡: 4只, 母鸡: 18只, 小鸡: 78只
公鸡: 8只, 母鸡: 11只, 小鸡: 81只
公鸡: 12只, 母鸡: 4只, 小鸡: 84只
3.4 斐波那契数列练习
"""
斐波那契数列:从第3项开始,每一项都等于前两项之和
输出斐波那契数列的前20个数
1 1 2 3 5 8 13 21 ...
"""
a = 0
b = 1
for i in range(20):
(a, b) = (b, a + b)
print(a, end=' ')
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
3.5 回文素数
"""
判断输入的正整数是不是回文数
回文数是指将一个正整数从左往右排列和从右往左排列值一样的数
"""
num = int(input('请输入一个正整数: '))
temp = num
num2 = 0
while temp > 0:
num2 *= 10
num2 += temp % 10 # 取个位==取余数,个位做百位
temp //= 10 # 取百位十位
if num == num2:
print('%d是回文数' % num)
else:
print('%d不是回文数' % num)
请输入一个正整数: 232
232是回文数
3.6 Craps赌博游戏
"""
Craps赌博游戏
玩家摇两颗色子 如果第一次摇出7点或11点 玩家胜
如果摇出2点 3点 12点 庄家胜 其他情况游戏继续
玩家再次摇色子 如果摇出7点 庄家胜
如果摇出第一次摇的点数 玩家胜
否则游戏继续 玩家继续摇色子
玩家进入游戏时有1000元的赌注 全部输光游戏结束 用while循环
"""
from random import randint
money = 1000
while money > 0:
print('你的总资产为:', money)
needs_go_on = False
while True:
debt = int(input('请下注: '))
if debt > 0 and debt <= money:
break # 跳出第二个while True循环
first = randint(1, 6) + randint(1, 6)
print('玩家摇出了%d点' % first)
if first == 7 or first == 11:
print('玩家胜!')
money += debt
elif first == 2 or first == 3 or first == 12:
print('庄家胜!')
money -= debt
else:
needs_go_on = True
while needs_go_on:
current = randint(1, 6) + randint(1, 6)
print('玩家摇出了%d点' % current)
if current == 7:
print('庄家胜')
money -= debt
needs_go_on = False
elif current == first:
print('玩家胜')
money += debt
needs_go_on = False
print('你破产了, 游戏结束!')
你的总资产为: 1000
请下注: 200
玩家摇出了10点
玩家摇出了8点
玩家摇出了9点
玩家摇出了6点
玩家摇出了10点
玩家胜
你的总资产为: 1200
请下注: 500
玩家摇出了6点
玩家摇出了4点
玩家摇出了10点
玩家摇出了12点
玩家摇出了6点
玩家胜
你的总资产为: 1700
请下注: 1000
玩家摇出了7点
玩家胜!
你的总资产为: 2700
请下注: 2700
玩家摇出了8点
玩家摇出了7点
庄家胜
你破产了, 游戏结束!