【Python】25道Python练手题(附详细答案),赶紧收藏

题目 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 < number:  
        print("你猜小了")  
    else:  
        print("你猜对了,真棒!")  
        print(f'你一共用了{
     i + 1}次机会')  
        break  
    print(f'还剩{
     9 - i}次机会')  
else:  
    print('游戏结束,你没有猜到')  


题目 5:百鸡百钱

需求分析:

公鸡每只 5 元,母鸡每只 3 元,小鸡 3 只一元,现要求用 100 元钱买 100 只鸡(三种类型的鸡都要买),问公鸡、母鸡、小鸡各买几只?

数学方程:

  • 设公鸡买了 x 只,母鸡买了 y 只,小鸡买了 z 只

  • x+y+z= 100

  • 5x+3y+z/3 = 100

算法思路

  • 以公鸡为突破点,公鸡 5 元一只,100 元最多只能买 20 只,

  • 由于三种鸡都要买,所以公鸡数一定是小于 20 的。

  • 母鸡每只 3 元,100 全拿来买母鸡,最多也不能超过 33 只

  • 设公鸡数为 x,母鸡数为 y,小鸡 z 只

  • 只要满足 5x+3y+z/3=100 和 x+y+z==100 就可以输出此种组合的结果.

count = 0  
for x in range(1,20):  
    for y in range(1,33):  
        z = 100 - x -y  
        if z > 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

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年12月4日
下一篇 2023年12月4日

相关推荐