Python入门程序-验证 6174 猜想、判断水仙花数、爬楼梯、抓狐狸游戏

1.验证 6174 猜想。
1955 年,卡普耶卡(D.R.Kaprekar)对 4 位数字进行了研究,发现一个规律:
对任意各位数字不相同的 4 位数,使用各位数字能组成的最大数减去能组成的最小数,对得到的差重复这个操作,最终会得到 6174 这个数字,并且这个操作最多不会超过 7 次。请编写程序验证这个猜想,并输出计算次数。(难点在于如何求解最大数和最小数)

def Min_Number (a):
    a=str(a)
    arr=[]
    for i in range(0,4):
        arr.append(a[i])
    arr.sort()
    return int(''.join(arr))
def Max_Number(a):
    a=str(a)
    arr=[]
    for i in range(0,4):
        arr.append(a[i])
    arr.sort(reverse=True)
    return int(''.join (arr))
a=input("输入:")
while (int(a)!=6174):
    a=Max_Number(a)-Min_Number(a)
print (a,end="")

  1. 判断水仙花数。
    水仙花数(Narcissistic number)也被称为超完全数字不变数、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
    设计循环程序,输入一个三位整数,判断是否是水仙花数,如果是水仙花数,则输出“是水仙花数”,否则输出“不是水仙花数”。
def IsFlower(num):
    a=num//100
    b=num//10%10
    c=num%100%10
    return a**3+b**3+c**3
while True:
    Num=input("输入:")
    while Num!="":
        Num=eval(Num)
        if 0<=Num<=999:
            if Num==IsFlower(Num):
                print ("{}是水仙花数".format(Num))
            else:
                print ("{}不是水仙花数".format(Num))
        else:
            print("输入数值不合理,请重新输入:")
        Num=input("请输入一个三位整数:")
    break

3.爬楼梯。
假设一段楼梯共 n 个台阶,小明一步最多能上 3 个台阶。编写程序计算小明上这段楼梯一共有多少种方法。

def climbStairs2(n):
    first3={1:1,2:2,3:4}
    if n in first3.keys():
        return first3[n]
    else:
        return climbStairs2(n-1)+climbStairs2(n-2)+climbStairs2(n-3)
num=eval(input("请输入台阶数:"))
print("台阶数\t上楼方法")
print("{0:^6d}\t{1:^10d}".format (num,climbStairs2(num)))

4.抓狐狸游戏。
编写程序,模拟抓狐狸小游戏。假设一共有一排 5 个洞口,小狐狸最开始的时候在其中一个洞口,然后玩家随机打开一个洞口,如果里面有狐狸就抓到了。如果洞口里没有狐狸就第二天再来抓,但是第二天狐狸会在玩家来抓之前跳到隔壁洞口里(random库中 choice, randrange 使用)

import random
def catchMe(n=5,maxStep=10):   #五个洞口,最多允许抓十次
        position=[0]*n;            #n个洞口有狐狸就为1,没有狐狸就为0
        oldpos=random.randrange(0,n)
        position[oldpos]=1         #随机给小狐狸一个位置

        #玩家开始抓狐狸
        m=1
        while m<=maxStep:
            #判断输入正确
            print("第{}次".format(m))
            while True :
                try:
                    x=int(input("今天你要开哪个洞口(0-4):"))
                    assert 0<=x<=4          #输入的洞口值要合法,如果不合法抛出异常
                    break
                except:
                    #输入不正确执行下面代码
                    print("请输入正确的洞口")
            #判断有没有找到
            if position[x]==1:
                print("Congratulation!")
                break
            else:
                print("Try again!")
            #小狐狸换洞口,洞口有两个可能,
            if oldpos==0:
                newpos=oldpos+1
            elif oldpos==n-1:#为最后一个洞口
                newpos=0
            else:
                newpos=oldpos+random.choice((-1,1))
            position[oldpos],position[newpos]=0,1   #将位置更新
            m=m+1   #次数+1
        else:
            print("You fail")
catchMe()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值