py第5天构造程序逻辑

  表弟来我家里做客,陪表第玩了几天。
第五天是编程练习,构造程序逻辑
第一个: 寻找“水仙花数”。
水仙花数是 水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
我们应该先思考,
对于一个数 abc(d) 要是水仙花数的花必须是 a*a*a + b*b*b +c*c*c = d =a*100+b*10+c*1
我们可以得到

         if(a == pow(num3,3)+pow(num2,3)+pow(num1,3)):
 print("我是水仙花%d"%(a),end="")

接下来就有一个问题,如何得到每一位数
我们通过尝试法:

##print(99%10)
##print(999/10)
##print(999%10)
##print(999%100)
##a = 999%100
##print(a%10)
##print(int(999/100))
##print(int(999/100))

得出

 num3 = int(a%10)
 b = a%100
 num2 = int(b/10)
 num1 = int(a/100)
 

综合起来我们得出解决方案

for a in range(100,1000):
 num3 = int(a%10)
 b = a%100
 num2 = int(b/10)
 num1 = int(a/100)
 if(a == pow(num3,3)+pow(num2,3)+pow(num1,3)):
     print("我是水仙花%d"%(a),end="")


寻找“完美数”。
完美数的定义
所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。如果一个数恰好等于它的因子之和,则称该数为"完全数"。
那么我们必须要找到一个数的约数,我们可以想出一个方法
要把约数都加起来
如果约数和等于本身则输出我是完美数

if(a%b == 0 ):
c = c+b
if c==a:
print("我是完美数%d"%c)

那么加一个循环,再加一个循环得出解决方法

for a in range(1,1000):
  c = 0
  for b in range(1,a):
   if a % b == 0:
      c = c + b
   if c == a:
      print("我是完美数%d"%c)
      break

“百钱百鸡”问题。

for num_cock in range(0,100):
  for num_hen in range(0,100):
    if 14*num_cock + 8*num_hen -200 == 0 and 100-num_hen-num_cock >= 0:
      print('公鸡{0}只,母鸡{1}只,雏鸡{2}
      只'.format(num_cock,num_hen,(100-num_cock-num_hen)))

生成“斐波拉切数列”。
列出数列寻找规律

##numi = (a+b) + b + (a+b) + (a+b)+b##3x+2b : 4x  4
##numi = (a+b) + b + (a+b) + (a+b)+b + (a+b)+b+(a+b)##5x+3b : 6x + b  6.5
##numi = (a+b) + b + (a+b) + (a+b)+b + (a+b)+b+(a+b)+ (a+b) + b + (a+b) + b + (a+b) + b ##8x+5b : 10x + b 10.5

并没有发现规律
于是
我希望可以通过定义来解决
numi = numi + numu

于是发现一个严重的问题就是numu = numi 的时候,我们还需要调用一次numu对应的值,所以我们创造一个numu的副本numu_2

每一次可以循环一这个
numu = 1
numi = 1
##循环体
num_2 = numu
numu = numi
numi = numi + num_2

numu = 1
num_2 = numu
numi = 1##x + b   1.5
n = int(input("你需要多少序列"))
for i in range(n):
 num_2 = numu
 numu = numi
 numi = numi + num_2##2x+b    2.6
 print(numi)

改进一下

numu = 1
num_2 = numu
numi = 1##x + b   1.5
n = int(input("你需要多少序列"))
for i in range(n):
 if n == 1:
  print(1)
  break
 if n == 2:
  print(1)
  print(1)
  break
 num_2 = numu
 numu = numi
 numi = numi + num_2##2x+b    2.6
 print(numi

Craps赌博游戏。
直接写,要稍微注意一下,我写的也没多好

from random import randint

who_win = 3
n = 1
while True:
    index = randint(2, 12)
    if index == 7 or index == 11:
        print("玩家胜利")
        print("第%d轮%d" % (n, index))
        break
    elif index == 2 or index == 3 or index == 12:
        print("专家胜利")
        print("第%d轮%d" % (n, index))
        break
    else:
        print("第%d轮%d"%(n,index))
        n = n + 1
    index1 = randint(2,12)
    if index == 7:
        print("庄家胜利")
        print("第%d轮%d" % (n, index))
    elif index1 == index:
        print("玩家胜利")
        print("第%d轮%d" % (n, index))
    else:
        print("第%d轮%d" % (n, index))
        n = n + 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值