初学Python必备十大经典案例(初学者必看)❃✿❈❉❀❁下

初学Python必备十大经典案例(初学者必看)❃✿❈❉❀❁下

第一题

答案

# 有一对兔子,从出生后第3个月起每月都生一对兔子,
# 小兔子长到第三个月后每月又生一对兔子,
# 假如兔子都不死,问每月的兔子总数为多少?
# 看到兔子咱们能够联想到咱们之前学过的一个数列兔子数列(斐波那契数列)
# 斐波那契数列使用递归的话,将会更加的方便
def Hare(i):
    if i == 1 or i == 2:
        return 2
    return Hare(i - 1) + Hare(i - 2)


for j in range(1, 13):
    print(f"第{j}个月的兔子总数为{Hare(j)}")

运行结果

1个月的兔子总数为22个月的兔子总数为23个月的兔子总数为44个月的兔子总数为65个月的兔子总数为106个月的兔子总数为167个月的兔子总数为268个月的兔子总数为429个月的兔子总数为6810个月的兔子总数为11011个月的兔子总数为17812个月的兔子总数为288

第二题

答案

# 猴子吃桃问题:
# 猴子第一天摘下若干个桃子,立即吃了一半,还不过瘾,又多吃了一个
# 次日早上又将剩下的桃子吃掉一半,又多吃了一个。
# 之后天天早上都吃了前一天剩下的一半零一个。
# 到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
a = 1
for i in range(9):
    a = (a + 1) * 2
    if i == 8:
        print(f"第一天一共摘了{a}个桃子")

运行结果

第一天一共摘了1534个桃子

第三题

答案

# 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
# 假设我输入的字符是value
value = "147963123987554682469173//c/d/r/g/h/w/j/a/c/g a b d t 4 k g ShSuUlT"
my_list = []
for i in value:
    if i not in my_list:
        my_list.append(i)
    else:
        continue
print(my_list)
a = 0
for j in my_list:
    for n in value:
        if j == n:
            a += 1
        else:
            continue
    print(f"{j}的个数是{a}")
    a = 0

运行结果

['1', '4', '7', '9', '6', '3', '2', '8', '5', '/', 'c', 'd', 'r', 'g', 'h', 'w', 'j', 'a', ' ', 'b', 't', 'k', 'S', 'u', 'U', 'l', 'T']
1的个数是3
4的个数是4
7的个数是3
9的个数是3
6的个数是3
3的个数是3
2的个数是2
8的个数是2
5的个数是2
/的个数是11
c的个数是2
d的个数是2
r的个数是1
g的个数是3
h的个数是2
w的个数是1
j的个数是1
a的个数是2
 的个数是8
b的个数是1
t的个数是1
k的个数是1
S的个数是2
u的个数是1
U的个数是1
l的个数是1
T的个数是1

第四题

答案

# 利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。(递归)
# 首先输入一个字符串,其中含有五个字符
a = input("请输入一个字符串: ")


# 而后定义函数
def func(n):
    # 当n等于-1时返回一个空格" "
    if n == -1:
        return " "
    # 利用字符串拼接将字符串的相反顺序拼接
    return a[n] + func(n - 1)


# 利用索引来进行查找
print(func(len(a) - 1))
# len(a)-1=4
# 而后func(4)把四带进去
# 而后return a[4]+func(3) func(3)=a[3]+func(2)
# func(2)=a[2]+func(1) func(1)=a[1]+func(0)
# func(0)=a[0]+func(-1) 最后拼接而成就是字符串的相反顺序

运行结果

请输入一个字符串: ABCDE
EDCBA

第五题

答案

# 用Python打印九九乘法表.(按照九九乘法表的格式打印)
# 首先咱们既然要按照格式打印出九九乘法表
# 第一步咱们先把九九乘法表中的全部乘法打印出来
# 第一次for循环遍历1-9,range函数包括前面的不包括后面的
for i in range(1, 10):
    # 第二次for循环遍历1-i+1其实就是1到i
    # 这样的话,就不会出现重复的乘法了
    for j in range(1, i + 1):
        # if判断.若是i>j的话,就打印乘法而且不用换行
        if i > j:
            print(f"{i}*{j}={i*j} ", end="")
        # 不然的话,就打印乘法而且换行
        else:
            print(f"{i}*{j}={i*j} ", "")
# 这样的话,只要不是i=j的话,那么就不换行
# 当i=j的时候,打印出来之后,进行换行
# 就实现了按照格式打印九九乘法表

运行结果

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

第六题

答案

# 有四个数字:一、二、三、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
# 首先咱们把1,2,3,4四个数字放到一个列表中.
new_list = [1, 2, 3, 4]
# 而后定义两个空列表
# 一个用来存放组成的三位数
list = []
# 一个用来存放全部组成的三位数
my_list = []
# 第一次for循环遍历new_list列表
for i in new_list:
    # 在第一次遍历期间,进行第二次遍历.
    # 由于组成的三位数必须是互不相同并且不能重复的
    # 因此第二次for循环遍历没有i的列表
    for j in [x for x in new_list if x != i]:
        # 在第二次遍历期间,进行第三次遍历
        # 第三次for循环遍历没有i和j的列表
        for y in [m for m in new_list if m != i and m != j]:
            # 而后把i,j,y三个数依次添加到list列表中
            list.append(i)
            list.append(j)
            list.append(y)
            # 而后再把存放三位数的list列表放到总的my_list列表中
            my_list.append(list)
            # 最后清空存放三位数的list列表
            list = []
# 输出结果
print(f"四个数字:一、二、三、4,能组成{len(my_list)}个互不相同且无重复数字的三位数")
print("分别是:")
print(my_list)

运行结果

四个数字:1234,能组成24个互不相同且无重复数字的三位数
分别是:
[[1, 2, 3], [1, 2, 4], [1, 3, 2], [1, 3, 4], [1, 4, 2], [1, 4, 3], [2, 1, 3], [2, 1, 4], [2, 3, 1], [2, 3, 4], [2, 4, 1], [2, 4, 3], [3, 1, 2], [3, 1, 4], [3, 2, 1], [3, 2, 4], [3, 4, 1], [3, 4, 2], [4, 1, 2], [4, 1, 3], [4, 2, 1], [4, 2, 3], [4, 3, 1], [4, 3, 2]]

第七题

答案

# 一个数若是刚好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000之内的全部完数。
for i in range(2, 1001):
    my_list = []
    for j in range(1, i):
        if i % j == 0:
            my_list.append(j)
        else:
            continue
    if sum(my_list) == i:
        print(f"1-1000之内的完数有:{i}")
    else:
        continue

运行结果

1-1000之内的完数有:6
1-1000之内的完数有:28
1-1000之内的完数有:496

第八题

答案

# 求0—7所能组成的奇数个数。
# 首先咱们先把0-7存放到一个my_list列表中
my_list = [0, 1, 2, 3, 6, 5, 4, 7]
value1 = int(len(my_list) - 1)
new_list = []
for i in range(1, 9):
    for n in my_list:
        if n % 2 != 0:
            new_list.append(n)
    value = int(len(new_list))

    if i == 1:
        print(f"{i}位数的奇数个数为{value}")
        new_list = []
    elif i == 2:
        # 因为开头不能为0,因此开头能够选择只有七个
        er = value * value1
        print(f"{i}位数的奇数个数为{er}")
        new_list = []
    elif i == 3:
        san = value * value1 * (value1 + 1) ** (i - 2)
        print(f"{i}位数的奇数个数为{san}")
        new_list = []
    elif i == 4:
        si = value * value1 * (value1 + 1) ** (i - 2)
        print(f"{i}位数的奇数个数为{si}")
        new_list = []
    elif i == 5:
        wu = value * value1 * (value1 + 1) ** (i - 2)
        print(f"{i}位数的奇数个数为{wu}")
        new_list = []
    elif i == 6:
        liu = value * value1 * (value1 + 1) ** (i - 2)
        print(f"{i}位数的奇数个数为{liu}")
        new_list = []
    elif i == 7:
        qi = value * value1 * (value1 + 1) ** (i - 2)
        print(f"{i}位数的奇数个数为{qi}")
        new_list = []
    elif i == 8:
        ba = value * value1 * (value1 + 1) ** (i - 2)
        print(f"{i}位数的奇数个数为{ba}")
        sum = value + er + san + si + wu + liu + qi + ba
        print(f"0—7所能组成的奇数个数一共有{sum}")

运行结果

1位数的奇数个数为4
2位数的奇数个数为28
3位数的奇数个数为224
4位数的奇数个数为1792
5位数的奇数个数为14336
6位数的奇数个数为114688
7位数的奇数个数为917504
8位数的奇数个数为7340032
07所能组成的奇数个数一共有8388608

第九题

答案

# 一球从100米高度自由落下,每次落地后反跳回原高度的一半;
# 再落下,求它在第10次落地时,共通过多少米?第10次反弹多高?
# 首先针对这个题,很明显咱们使用递归来解决更加方便一些
def hight(i):
    if i == 1 or i == 2:
        return 100
    return hight(i - 1) / 2


my_list = []
for j in range(1, 11):
    my_list.append(hight(j))

print(f"第10次落地时,共通过{sum(my_list)}米")
print(f"第十次反弹了{hight(10)}米")

运行结果

10次落地时,共通过299.609375米
第十次反弹了0.390625

第十题

答案

# 有n我的围成一圈,顺序排号。
# 从第一我的开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
value = int(input("请输入几我的围成一圈: "))
my_list = []
a = -1
ace = True
for i in range(1, value + 1):
    my_list.append(i)
while ace:
    for j in range(3):
        if len(my_list) == 1:
            print(f"最后留下的原来是第{my_list[0]}号")
            ace = False
            break
        if a == len(my_list) - 1:
            a = -1
        a += 1
        if j == 2:
            my_list.remove(my_list[a])
            a -= 1

运行结果

请输入几我的围成一圈: 50
最后留下的原来是第11