python-DAY05构造程序逻辑

DAY05 -构造基本程序逻辑

2019.10.17-2019.10.25

1.水仙花数

水仙花数是指一个 它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)

for num in range (100,1000):
    a=num//100 #求百位数
    b=num//10%10 #求十位数
    c=num%10 #求个位数
    if a**3+b**3+c**3==num:
        print(num,end=" ")

结果为:
153 370 371 407

2.完美数

它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。如果一个数恰好等于它的因子之和,则称该数为"完全数"

for num in range (1,100):
    count=0
    for i in range (1,num):
        if num%i==0:
            count=count+i
            i+=1
    if num==count:
       print(num,end=" ")

结果为:
6 28

3.五人分鱼

问题概述:A、B、C、D、E五个人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。
日上三杆,A第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。B第二个醒来,
也将鱼分为五份,把多余的一条鱼扔掉,保持走自己的一份。C、D、E依次醒来,也按同样的方法拿
走鱼。问他们合伙至少捕了多少条鱼?
五人分鱼python程序参考链接

[参考代码地址](https://blog.csdn.net/Moniicoo/article/details/81516538)
fish=1
while True:                       #表示无限循环,所以循环体中应当利用break语句跳出循环
        num=fish;enough=True
        for _ in range (5):
           if (num-1)%5==0:               #此时分鱼的情况必须是数量减一正好整除
               num=(num-1)/5*4            #下一次分鱼时,鱼的数量
           else:
               enough=False
               break
        if enough:
           print("他们合伙至少捕鱼的数量为{}".format(fish))

           break
        fish+=1
i=1
while i<6:
    num=(fish-1)/5
    print("第%d分别获得的鱼数量为%d"%(i,num))
    fish=(fish-1)//5*4
    i+=1

这道题一开始也是看不懂程序,后面理解到每次分的时候数量必须满足的条件,与分完鱼后,还剩下的数量.,猴子吃桃有相似之处
结果为

他们合伙至少捕鱼的数量为31211分别获得的鱼数量为6242分别获得的鱼数量为4993分别获得的鱼数量为3994分别获得的鱼数量为3195分别获得的鱼数量为255

4.Fibonacci数列

Fibonacci数列是这样定义的:
F[0] = 0
F[1] = 1
for each i ≥ 2: F[i] = F[i-1] + F[i-2]
因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, …,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N求最少需要多少步可以变为Fibonacci数。
————————————————
版权声明:本文为CSDN博主「柳亓」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lunar_queen/article/details/81811378

以下是我的做法,应该而言是非常简单的一种.
这里有个参考链接有五种方法.可以仔细阅读其他人的算法思想
斐波那契数列的五种python实现

a=0;b=1
i=1
print(a,b,end=" ")
while i<10:
    c=a+b
    print(c,end=" ")
    a=b;b=c
    i+=1

5.回文数

判断回文数的关键:将原来的数倒过来也和本身的数一样
所谓回文数,就是说一个数字从左边读和从右边读的结果是一模一样的,例如12321。判断给出的整数是否是回文数;若是,则输出该整数各位数字之和;否则输出该数不是一个回文数。

原理大致为:任何一个数除以10的余数就是该数最后一位;任何一个数除以10的商就是排除掉最后一位后的数;所以 ,一个数1234 就可以通过这种方法得到 123 和 4;接下来对 123 进行同样的操作,就得到 12 和 3;接下来得到 1 和 2;接着得到 0 和 1;整个过程是个循环,当商不是 0 的时候就一直如此;每次拿到一个余数,都用来构造新数,新数=新数*10+余数;所以经过四次循环后,我们得到新数 4321 ,如果是回文,那么新数应该等于原数,否则,说明不是回文。
————————————————
版权声明:本文为CSDN博主「小智解说」的原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42680327/article/details/81742609

num=int(input("请输入一个数字:"))
s=num ;y=0
while s>0:
    y=y*10+s%10
    s=s//10
if y==num:
    print("是回文数")
else:
    print("不是回文数")

结果为:
请输入一个数字:1221
是回文数

还有另一种切片字符串的方法可以

#回文素数
def prime(num):  #判断是否为素数
    list=[]
    for i in range (2,num):
        for j in range (2,i//2): #在python3中得用整除,否则会在后面加一个小数
            if i%j==0:
                break
            else:
                list.append(i)
    return list
def palindrome  (num):
    num=str(num)  #转换成字符串类型然后进行切片
    m=num[ : :-1]  #这个部分非常的巧妙就利用切片的方法非常巧妙的反向输出列表元素
    if num==m:
        return True
    else:
        return False
if __name__== '__main__' :
    num=int(input("请输入一个数:"))
if  prime(num) and palindrome(num):
    print("这是回文素数!")
else:
    print("这个不是回文素数")

6.craps 赌博游戏

craps 赌博 游戏
规则:玩家掷两个骰子,每个骰子点数为1-6,如果第一次点数和为7或11,则玩家胜;如果点数和为2、3或12,则玩家输庄家胜。
若和为其他点数,则记录第一次的点数和,玩家继续掷骰子,直至点数和等于第一次掷出的点数和则玩家胜;若掷出的点数和为7则庄家胜。

import random #引入随机函数模块
num1=random.randint(1,6)
num2=random.randint(1,6)
num=num1+num2
print("整出的数字为:{}".format(num))
if num==7 or num==11:
    print("玩家胜!")
elif num==2 or num==3 or num==12:
    print("庄家胜!")
else:
    while True:
      num3=random.randint(1,6)
      num4=random.randint(1,6)
      num5=num3+num4
      print("再一次丢出的数字和为%d"%num5)
      if num5==num:
          print("玩家胜!")
          break
      if num5==7:
          print("庄家胜!")
          break

整出的数字为:5
再一次丢出的数字和为3
再一次丢出的数字和为8
再一次丢出的数字和为4
再一次丢出的数字和为10
再一次丢出的数字和为6
再一次丢出的数字和为8
再一次丢出的数字和为6
再一次丢出的数字和为12
再一次丢出的数字和为7
庄家胜!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值