【Python】水仙花数、百钱买百鸡、CRAPS游戏、斐波那契数列、完美数、素数
1.寻找水仙花数
水仙花数:是一个3位数,每一位上数字的立方和正好等于它本身,如:13+53+33 = 153,则153就是一个水仙花数,也称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数。
用除法和取模运算分别取出个位十位百位数字,low、mid、high,再进行if判断。
for num in range(100, 1000): low = num % 10 mid = num // 10 % 10 high = num // 100 if num == low ** 3 + mid * 3 + high ** 3: print(num)
用上述方法将输入的正整数反转,如将12345变成54321。
先取出个位数5,然后乘以10加上取出的4,循环如此。
num = int(input('num = ')) reversed_num = 0 while num > 0: reversed_num = reversed_num * 10 + num % 10 num //= 10 print(reversed_num)
2.百钱买百鸡
公鸡5元一只,母鸡3元一只,小鸡1元一只,用100块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?
把公鸡、母鸡、小鸡的数量用x、y、z来表示。
如果都用来买公鸡,x最大可取20,range(0,20)从0开始。
同理y最大可取33,z用总数和减x、y。
for x in range(0,20): for y in range(0,33): z = 100-x-y if 5*x+3*y+z/3==100: print('公鸡:%d只,母鸡:%d只,小鸡:%d只' % (x,y,z))
两层for循环一项一项穷举,也称为暴力搜索法,很慢,但是一定可以找出答案。
3.CRAPS赌博游戏
第一次掷骰子,点数和为7或11,则玩家胜;点数和为2、3或12,玩家输。
点数和为其他则继续掷。
第二次掷骰子,点数和与第一次掷相同,则玩家胜;点数和为7,则玩家输。
点数和为其他则继续掷。往后的输赢条件与第二次相同。
from random import randint money = 1000 while money > 0: print('你的总资产为:', money) loopFlag = False while True: debt = int(input('请下注:')) if 0 < debt <= money: break first = randint(1, 6) + randint(1, 6) print('玩家摇出了%d点' % first) if first == 7 or first == 11: print('玩家胜!') money += debt elif first == 2 or first == 3 or first == 12: print('庄家胜!') money -= debt else: loopFlag = True while loopFlag: loopFlag = False current = randint(1, 6) + randint(1, 6) print('玩家摇出了%d点' % current) if current == 7: print('庄家胜') money -= debt elif current == first: print('玩家胜') money += debt else: loopFlag = True print('你破产了,游戏结束!')
4.生成斐波那契数列的前20个数
斐波那契数列:前两个数都是1,从第三个数开始,每个数都是它前面两个数的和,如:1,1,2,3,5,8,13,21……;又称为黄金分割数列、兔子数列。
a = 0 b = 1 for _ in range(20): a, b = b, a + b print(a, end=',')
下划线_表示一个循环变量,类似于其他语言for循环中的i,j。
a,b = b,a+b
可以写为(a,b) = (b,a+b)
,先计算右边括号的,再赋值给左边的a和b。end = ','表示用逗号代替换行结尾。
5.找出10000以内的完美数
完美数:所有的真因子的和恰好等于它本身,如6 = 1+2+3;28 = 1+2+4+7。
又称为完全数或完备数,真因子(除了自身以外的因子)。
math.sqrt()函数表示开平方根,如math.sqrt(9) = 3。
为什么因子只取到开平方?
比如6开平方根之后得到2.4,因子有如下,每对因子,必定一个大于2.4,一个小于2.4,如果12.4中没有因子,那么2.46中也没有因子,因此只需判断1~根号(x)中是否有因子。
1×6
2×3
3×2
6×1
import math for num in range(1, 10000): result = 0 for factor in range(1, int(math.sqrt(num)) + 1): if num % factor == 0: #是否是因子 result += factor if factor > 1 and num // factor != factor: #因子是否大于1且不等于它本身 result += num // factor if result == num: print(num)
6.输出100以内所有的素数
素数:只能被1和它自身整除的正整数,不包括1(因此从2开始)。
如:2,3,5,7,11,13,17,19
import math for num in range(2, 100): is_prime = True for factor in range(2, int(math.sqrt(num)) + 1): if num % factor == 0: is_prime = False break if is_prime: print(num, end=',')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南