《练习100》11~15

题目11

# 古典问题,有一对兔子,从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子
# 这种兔子,我怕是不敢吃。近亲繁殖。。。。。(不扯了,*_*)
# 只需要记住一点: 第一个月和第二个月的兔子对数是1,从第三个月之后,当月的兔子对数是前两个月之和


# 使用递归实现,但是递归月数多了以后,比如说100个月,我电脑直接不出结果了。
def rabbits(month:int):
    if month == 1 or month == 2:
        return 1
    return rabbits(month - 1) + rabbits(month - 2)

# 使用单纯for循环实现
def rabbits2(month: int):
    f1, f2 = 1, 1
    for i in range(3, month + 1):

        # tmp = f1 + f2
        # f1 = f2
        # f2 = tmp
        # 上面三句,可以简化为一句
        f1, f2 = f2, f1 + f2

    return f2

while True:
    try:
        month = int(input("Please input the month: \n"))
        print(f"养兔子{month}个月了,兔子总共{rabbits2(month)}对,{rabbits2(month) * 2}只。") 
    except ValueError:
        print("Please input a int.")  

题目12

# 判断101~200之间有多少个素数,并输出所有素数
# 素数:一个大于1的自然数,除了1和它本身外,不能被其他自然数整除
# 第一种:最常见
import math


def is_prime_number(num: int):
    if num < 2:
        return False
    elif num == 2:
        return True

    for i in range(2, num):
        if not (num % i):
            return False
    return True


# 第二种: 素数是因子为1和本身, 如果num不是素数,则还有其他因子,其中的因子,
# 假如为a,b.其中必有一个大于sqrt(num) ,一个小于sqrt(num) 。
# 所以必有一个小于或等于其平方根的因数,那么验证素数时就只需要验证到其平方根就可以了
def is_prime_number1(num: int):
    if num < 2:
        return False
    elif num == 2:
        return True

    for i in range(2, int(math.sqrt(num)) + 1):
        if not (num % i):
            return False
    return True


total_cnt = 0
prime_nums = []
total_cnt1 = 0
prime_nums1 = []
for i in range(101, 200):
    if is_prime_number(i):
        prime_nums.append(i)
        total_cnt += 1

    if is_prime_number1(i):
        prime_nums1.append(i)
        total_cnt1 += 1
print(f"101~200之间的素数总共有{total_cnt}个。{prime_nums}")
print(f"101~200之间的素数总共有{total_cnt1}个。{prime_nums1}")

题目13

# 打印所有的水仙花数,所谓水仙花是指一个三位数,其各位数字的立方和等于该数

def is_daffodil_num(num: int):
    # python 的/是真的除法,商可能有小数,采用地板除法//才能只有整数部分
    i = num//100
    j = num % 100//10
    k = num % 10

    if i * 100 + j * 10 + k == i**3 + j**3 + k ** 3:
        print(f"i = {i}, j = {j}, k = {k}")
        return True
    return False

daffodil_nums = []
for i in range(100, 1000):
    if is_daffodil_num(i):
        daffodil_nums.append(i)
print(f"三位的水仙花数总共{len(daffodil_nums)}个,它们是{daffodil_nums}")

题目14

# 将一个正整数分解质因数。例如输入90输出90=2*3*3*5
# 思路:一直除
num = int(input("请输入要分解的正整数:"))
print_str = f"{num} = "
temp = []
while num != 1:
    for i in range(2, num+1):
        if num % i == 0:
            temp.append(i)
            num //= i
            break

print(temp)

for j, i in enumerate(temp):
    if temp[0] == i and not j:
        print_str += f"{i}"
    else:
        print_str += f"*{i}"
print(print_str)

题目15

# 利用条件运算的嵌套来完成此题:
# 成绩  评价
# >=90   A 
# 60~89  B  
# <=60   C

def score_rated(score):
    if score >= 90.0:
        return 'A'
    elif score >= 60.0:
        return 'B'
    else:
        return 'C'

while True:
    try:
        score = float(input("请输入分数: \n"))
        print(f"根据你的分数{score},你的评价为{score_rated(score)}")
    except ValueError:
        print("请输入数字!!!")
        break

你可能感兴趣的:(Python学习笔记,python,开发语言,学习)