找回密码
 会员注册
查看: 26|回复: 0

25道Python练手题(附详细答案),赶紧收藏!Python入门Python学习

[复制链接]

5

主题

0

回帖

16

积分

新手上路

积分
16
发表于 2024-9-2 23:19:52 | 显示全部楼层 |阅读模式
题目1:水仙花数水仙花数(Narcissisticnumber)也被称为超完全数字不变数(pluperfectdigitalinvariant,PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrongnumber)水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它本身。例如:1^3+5^3+3^3=153。foriinrange(100,1000):i1=i//100#取百位数字123//100=1i2=i//10%10#取十位数字123//10=1212%10=2i3=i%10#取个位数字123%10=3ifi1**3+i2**3+i3**3==i:print(f"{i}是水仙花数")#153是水仙花数#370是水仙花数#371是水仙花数#407是水仙花数1234567891011121314题目2:四叶玫瑰数四叶玫瑰数是4位数的自幂数。自幂数是指一个n位数,它的每个位上的数字的n次幂之和等于它本身。(例如:当n为3时,有1^3+5^3+3^3=153,153即是n为3时的一个自幂数,3位数的自幂数被称为水仙花数)。foriinrange(1000,10000):i1=i//1000#取千位数字1234//1000=1i2=i//100%10#取百位数字1234//100=1212%10=2i3=i//10%10#取十位数字1234//10=123123%10=3i4=i%10#取个位数字1234%10=4#print(i,i1,i2,i3,i4)ifi1**4+i2**4+i3**4+i4**4==i:print(f'{i}是四叶玫瑰数')#1634是四叶玫瑰数#8208是四叶玫瑰数#9474是四叶玫瑰数123456789101112131415题目3:逆序输出字符串写法1:切片方式str=input("请输入字符串")print(str[::-1])12345写法2:循环转换str=input("请输入字符串")list=[]forxinrange(len(str)-1,-1,-1):list.append(str[x])print(''.join(list))12345678题目4:猜数字小游戏需求分析:随机生成一个100以内的整数,共有10次机会开始游戏,输入猜测的数字。如果猜小了,则提示:猜小了如果猜大了,则提示:猜大了猜对了,则提示:猜对了,并且结束游戏10次机会用完还没猜对,提示:游戏结束,没有猜到。importrandomasrdnumber=rd.randint(0,100)foriinrange(10):choice=int(input("请输入你要猜测的数字:"))ifchoice>number:print("你猜大了")elifchoice0and5*x+3*y+z/3==100:count+=1print("="*60)print(f'第{count}种买法,公鸡买了{x}只,母鸡买了{y}只,小鸡买了{z}只')#============================================================#第1种买法,公鸡买了4只,母鸡买了18只,小鸡买了78只#============================================================#第2种买法,公鸡买了8只,母鸡买了11只,小鸡买了81只#============================================================#第3种买法,公鸡买了12只,母鸡买了4只,小鸡买了84只1234567891011121314151617题目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=dayifyear%4==0andyear%100!=0oryear%400==0:print(f'{year}年是闰年')date_list[1]=29else:print(f'{year}年是平年')date_list[1]=28foriinrange(month-1):count_day+=date_list[i]print(f'{year}年{month}月{day}日是当年的第{count_day}天')1234567891011121314151617181920题目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=1print(f'第10天还剩下{p}个桃子')foriinrange(9,0,-1):p=(p+1)*2print(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个桃子123456789101112131415161718192021题目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]importnumpyasnppop_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)foriinrange(count-1):forjinrange(count-i-1):ifpop_list[j]>pop_list[j+1]:#如果要降序就是改成arr_list[middle]:left=middle+1elifnumberarr_list[middle]:left=middle+1else:returnmiddlereturnbinary_search(number,left,right)else:return-1print(binary_search(11,0,len(arr_list)-1))12345678910111213141516171819题目10:选择排序基本思想:从未排序的序列中找到一个最小的元素,放到第一位,再从剩余未排序的序列中找到最小的元素,放到第二位,依此类推,直到所有元素都排序完毕若列表为[6,8,3,5,9,10,7,2,4,1],先找到1最小调换到第1个位置得到列表[1,8,3,5,9,10,7,2,4,6],接着是2最小调换到第2个位置得到列表[1,2,3,5,9,10,7,8,4,6],接着是3最小位置不变得到列表[1,2,3,5,9,10,7,8,4,6],接着是4最小调换到第4个位置得到列表[1,2,3,4,9,10,7,8,5,6],接着是5最小调换到第5个位置得到列表[1,2,3,4,5,10,7,8,9,6],接着是6最小调换到第6个位置得到列表[1,2,3,4,5,6,7,8,9,10],接着是7最小位置不变得到列表[1,2,3,4,5,6,7,8,9,10],接着是8最小位置不变得到列表[1,2,3,4,5,6,7,8,9,10],接着是9最小位置不变得到列表[1,2,3,4,5,6,7,8,9,10],接着是10最小位置不变,排序完成importrandomasrdsec_list=[rd.randint(1,100)foriinrange(8)]#sec_list=[91,30,93,98,26,98,20,90]length=len(sec_list)print(f'未排序的列表为:{sec_list}')foriinrange(length-1):min_index=iforjinrange(i+1,length):ifsec_list[min_index]>sec_list[j]:min_index=jsec_list[min_index],sec_list[i]=sec_list[i],sec_list[min_index]print(f'第{i+1}轮排好序是:{sec_list}')print(f'最终排好序的列表为:{sec_list}')#未排序的列表为:[91,30,93,98,26,98,20,90]#第1轮排好序是:[20,30,93,98,26,98,91,90]#第2轮排好序是:[20,26,93,98,30,98,91,90]#第3轮排好序是:[20,26,30,98,93,98,91,90]#第4轮排好序是:[20,26,30,90,93,98,91,98]#第5轮排好序是:[20,26,30,90,91,98,93,98]#第6轮排好序是:[20,26,30,90,91,93,98,98]#第7轮排好序是:[20,26,30,90,91,93,98,98]#最终排好序的列表为:[20,26,30,90,91,93,98,98]12345678910111213141516171819202122232425262728题目11:剪刀石头布游戏开始,初始状态下用户和电脑都有100分,赢一局+10分,输一局-10分。当用户为0分时,游戏结束,提示游戏结束,比赛输了当用户为200分时,游戏结束,提示游戏结束,赢得比赛、每轮比赛都输出当前的分数1代表剪刀2代表石头3代表布importrandomasrdprint('='*60)print(''*20,'剪刀石头布游戏')print('1代表剪刀2代表石头3代表布')game_info={1:"剪刀",2:"石头",3:"布"}score=100whileTrue:robots_choice=rd.randint(1,3)user_choice=input("请出拳")ifuser_choicenotin'123':print('出拳错误,请重新出拳')continueuser_choice=int(user_choice)print('*'*60)print(f'电脑出{game_info[robots_choice]}')print(f'你出{game_info[user_choice]}')print('*'*60)ifuser_choice==1androbots_choice==3oruser_choice==2\androbots_choice==1oruser_choice==3androbots_choice==2:score+=10print(f'你赢得本轮游戏,当前分数为{score}')elifuser_choice==robots_choice:print(f'本轮游戏平局,当前分数为{score}')else:score-=10print(f'你输了本轮游戏,当前分数{score}')ifscore>=200:print('游戏结束,你赢得比赛')breakelifscore0:split_words.append(string[last_index:len(string)])breakifchar==sep:split_words.append(string[last_index:index])last_index=index+1count+=1elifindex+1==len(string):split_words.append(string[last_index:index+1])returnsplit_wordsprint(split_s("life-is-short-you-need-python",'-'))#['life','is','short','you','need','python']print(split_s("life-is-short-you-need-python",'-',2))#['life','is','short-you-need-python']123456789101112131415161718192021222324题目16:大衍数列中国古代文献中,曾记载过“大衍数列”,主要用于解释中国传统文化中的太极衍生原理它的前几项是:0、2、4、8、12、18、24、32、40、50…其规律是:偶数项,是序号平方再除2,奇数项,是序号平方减1再除2。打印大衍数列的前100项forxinrange(1,101):ifx%2==0:#偶数a=int((x**2)/2)else:#奇数a=int((x**2-1)/2)print(a)#0#2#4#8#12#18#24#32#40#5012345678910111213141516171819题目17:单词分析小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这个字母出现的次数其实就是让你输入一段字符串后,得到当前字符串出现最多的字母和它的次数输入:HelloWorld输出:l#小写字母l3#小写字母l,出现了3次,出现次数最多1234567我们可以对当前的字符串进行循环迭代,然后把字符串当前每个字符当作key值,把它存到字典里面,如果当前key在字典里面,我们就让它加一如果不在那我们就让它的次数初始化为1,最终我们再从字典找到次数最多的key值和value值defanalyse_words(words):word_dict={}foriinwords:ifiinword_dict:word_dict[i]+=1else:word_dict[i]=1max_key=max(word_dict,key=word_dict.get)print(max_key)print(word_dict[max_key])#l#3analyse_words('helloworld')12345678910111213141516题目18:利用栈打印菱形输入边长n,打印对应边长的菱形分析:打印几行每一行打印几个空格,几个星星前几行打印之前加入到栈,利用栈的后进先出原则打印后几行的内容defdiamond(n):stack=[]foriinrange(1,2*n):ifi',n)p(n-1)print('递归后->',n)p(5)#递归前->5#递归前->4#递归前->3#递归前->2#递归前->1#递归后->1#递归后->2#递归后->3#递归后->4#递归后->5123456789101112131415161718192021题目20:斐波那契递归函数斐波那契数列(Fibonaccisequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(LeonardoFibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、…这个数列,前两项都是数字1,从第三项开始,每一项数字是前两项数字之和数学表达式:f(n)=f(n-1)+f(n-2)deffib(n):ifnb:max_num=aelse:max_num=bifmax_num0andx%10==0:returnFalsestr_x=str(x)returnstr_x==str_x[::-1]print(is_palindrome(121))#Trueprint(is_palindrome(120))#False1234567891011解法二:反转一半数字和前半部分的数字进行比较流程对于整数x,将后半部分反转,保存到变量reverted每次循环x%10拿到末尾数字然后x/10去除末尾的数字循环结束条件x0andx%10==0:returnFalsereverted=0whilex>reverted:#我们看下1221#第一次循环我们需要把末尾数字1取出来第二次取末尾数字2我们需要把21变成12reverted=reverted*10+x%10#把x的末尾数字删除掉x//=10returnx==revertedorx==reverted//10print(is_palindrome(1221))#Trueprint(is_palindrome(1223))#Falseprint(is_palindrome(123321))#True123456789101112131415161718希望这篇文章对正在学习编程的你有所帮助,如果你想学习编程,那给大家分享一份Python学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂。如果需要的话直接划到文末免费获得,让我们一起学习!如果你也想和我一起学习Python,欢迎关注我留个言
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-27 00:27 , Processed in 2.707131 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表