Python-Day02-分支结构及循环结构

"""
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可以用来产生一个不变的数值序列
    1. range(101)可以产生一个0到100的整数序列。
    2. 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点
庄家胜
你破产了, 游戏结束!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值