题目 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