值得收藏的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

你可能感兴趣的:(Python,面试经验,大数据,python,开发语言)