值得收藏的25道Python练手题(附详细答案) 您所在的位置:网站首页 80个python练手项目 值得收藏的25道Python练手题(附详细答案)

值得收藏的25道Python练手题(附详细答案)

2023-03-09 00:43| 来源: 网络整理| 查看: 265

26c5af93e587302d8f919e7f029060a6.gif

来源丨吾爱破解

题目 1:水仙花数

水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number)

水仙花数是指一个 3 位数,它的每个位上的数字的 3 次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。

for i in range(100, 1000):     i1 = i // 100       # 取百位数字 123//100=1     i2 = i // 10 % 10   # 取十位数字 123//10=12  12%10=2     i3 = i % 10         # 取个位数字 123%10=3     if i1 ** 3 + i2 ** 3 + i3 ** 3 == i:         print(f"{i}是水仙花数")         # 153 是水仙花数         # 370 是水仙花数         # 371 是水仙花数         # 407 是水仙花数 题目 2:四叶玫瑰数

四叶玫瑰数是 4 位数的自幂数。自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。

(例如:当 n 为 3 时,有 1^3 + 5^3 + 3^3 = 153,153 即是 n 为 3 时的一个自幂数,3 位数的自幂数被称为水仙花数)。

for i in range(1000,10000):     i1 = i // 1000      # 取千位数字 1234//1000=1     i2 = i // 100 % 10  # 取百位数字 1234//100=12  12%10=2     i3 = i // 10 % 10   # 取十位数字 1234//10=123  123%10=3     i4 = i % 10         # 取个位数字 1234%10=4     # print(i,i1,i2,i3,i4)     if i1 ** 4 + i2 ** 4 + i3 ** 4 + i4 ** 4 == i:         print(f'{i}是四叶玫瑰数')         # 1634 是四叶玫瑰数         # 8208 是四叶玫瑰数         # 9474 是四叶玫瑰数 题目 3:逆序输出字符串

写法 1:切片方式

str = input("请输入字符串") print(str[::-1])

写法 2:循环转换

str = input("请输入字符串") list = [] for x in range(len(str) -1,-1,-1):     list.append(str[x]) print(''.join(list)) 题目 4:猜数字小游戏

需求分析:

随机生成一个 100 以内的整数,共有 10 次机会开始游戏,输入猜测的数字。

如果猜小了,则提示:猜小了

如果猜大了,则提示:猜大了

猜对了,则提示:猜对了,并且结束游戏

10 次机会用完还没猜对,提示:游戏结束,没有猜到。

import random as rd number = rd.randint(0,100) for i in range(10):     choice = int(input("请输入你要猜测的数字:"))     if choice > number:         print("你猜大了")     elif choice  0 and 5 * x + 3 * y + z / 3 == 100:             count += 1             print("="*60)             print(f'第{count}种买法,公鸡买了{x}只,母鸡买了{y}只,小鸡买了{z}只')             # == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==             # 第1种买法,公鸡买了4只,母鸡买了18只,小鸡买了78只             # == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==             # 第2种买法,公鸡买了8只,母鸡买了11只,小鸡买了81只             # == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==             # 第3种买法,公鸡买了12只,母鸡买了4只,小鸡买了84只 题目 6:闰年问题升级版

输入年月日,输出该日期是否是闰年,并且输出该日期是此年份的第几天

闰年判断条件:

能被 4 整除,并且不能被 100 整除

能被 400 整除

两个条件满足任意一个就为闰年

算法思路:

接收用户输入的年月日,创建保存 12 个月份天数的列表

根据年份判断是否是闰年,如果是把二月份设为 29 天,否则把二月份设为 28 天

根据月份和日期统计是当年的第几天

year = int(input("请输入年份")) month = int(input("请输入月份")) day = int(input("请输入日期")) date_list = [31,29,31,30,31,30,31,31,30,31,30,31] count_day = day if year % 4 == 0 and year % 100 !=0 or year % 400 == 0:     print(f'{year}年是闰年')     date_list[1]=29 else:     print(f'{year}年是平年')     date_list[1]=28 for i in range(month-1):     count_day += date_list[i] print(f'{year}年{month}月{day}日是当年的第{count_day}天') 题目 7:猴子吃桃问题

需求分析:

猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。

第二天早上又将剩下的桃子吃掉一半,又多吃了一个。

以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想再吃时,见只剩下一个桃子了。

求原来它一共摘了多少个桃子。

这题可以用递归思想倒着推。

第 10 天还没吃,就剩 1 个,说明第 9 天吃完一半再吃 1 个还剩 1 个。

假设第 9 天还没吃之前有桃子 p 个

可得:p/2 - 1 = 1,得出第九天的桃子数 p=4。

以此类推,即可算出第一天摘了多少桃子.

算法思路:

第 10 天还没吃之前的桃子数量初始化 p=1

从 9 至 1 循环 9 次,根据上述公式反推为 p=(p+1)*2 可得第 1 天还没吃之前的桃子数量

p = 1 print(f'第10天还剩下{p}个桃子') for i in range(9,0,-1):     p = (p + 1) * 2     print(f'第{i}天还剩下{p}个桃子') print(f'第一天一共摘了{p}个桃子') # 第10天还剩下1个桃子 # 第9天还剩下4个桃子 # 第8天还剩下10个桃子 # 第7天还剩下22个桃子 # 第6天还剩下46个桃子 # 第5天还剩下94个桃子 # 第4天还剩下190个桃子 # 第3天还剩下382个桃子 # 第2天还剩下766个桃子 # 第1天还剩下1534个桃子 # 第一天一共摘了1534个桃子 题目 8:冒泡排序

冒泡排序算法由来:这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”

从前到后(即从下标较小的元素开始) 依次比较相邻元素的值,若发现比后一个值大则交换位置,使值较大的元素逐渐从前移向后部。

假设有一个列表 [29 ,12 ,19 ,37 ,14] 想按升序排列

第一轮:初始列表为 [29 ,12 ,19 ,37 ,14]

比较 29 > 12 交换位置:[12,29,19,37,14]

比较 29 > 19 交换位置:[12,19,29,37,14]

比较 29 > 37 不大于,不交换:列表同上不变

比较 37 > 14 交换位置:[12,19,29,14,37]

第二轮:列表继承上一轮为 [12,19,29,14,37]

比较 12 > 19 不大于,不交换:列表同上不变

比较 19 > 29 不大于,不交换:列表同上不变

比较 29 > 14 交换位置:[12,19,14,29,37]

第三轮:列表继承上一轮为 [12,19,14,29,37]

比较 12 > 19 不大于,不交换:列表同上不变

比较 19 > 14 交换位置:[12,14,19,29,37]

第四轮:列表继承上一轮为 [12,14,19,29,37]

比较 12 > 14 不大于,不交换:列表同上不变

列表排序完成:[12,14,19,29,37]

import numpy as np pop_list = np.random.randint(100,size=6) # pop_list = [82,15,15,41,37,31] # pop_list = [29,12,19,37,14] count = len(pop_list) print('没排序之前的列表',pop_list) for i in range(count-1):     for j in range(count-i-1):         if pop_list[j] > pop_list[j + 1]: # 如果要降序就是改成  5 # 递归前-> 4 # 递归前-> 3 # 递归前-> 2 # 递归前-> 1 # 递归后-> 1 # 递归后-> 2 # 递归后-> 3 # 递归后-> 4 # 递归后-> 5 题目 20:斐波那契递归函数

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、...

这个数列,前两项都是数字 1,从第三项开始,每一项数字是前两项数字之和

数学表达式:f(n) = f(n-1)+f(n-2)

def fib(n):     if n b:     max_num = a else:     max_num = b if max_num 


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有