取余和取整

John还是个孩子时,他已经有五个手指(一只手)。那时候,他经常用手指来数数字。他是这样数的。 a - Thumb b - Index finger c - Middle finger d - Ring finger e - Little finger

alt

a - 拇指 b - 食指 c - 中指 d - 无名指 e - 小指

alt

那么问题来了:当约翰数到数字n时,哪个是对应的手指?

任务 完成接受一个整数的函数,并返回计数结束的手指的名称。"拇指"、"食指"、"中指"、"无名指 "或 "小指"。

两种思路 1、左右手对照看

alt

右手的顺序恰好符合要求

def which_finger(n):
    left = {1:'Thumb finger',
            2:'Index finger',
            3:'Middle finger',
            4:'Ring finger',
            5:'Little finger'
           }

    right = dict(zip(list(left.keys()),
                list(left.values())[::-1]))

    if n <= 5:
        return left[n]
    else:
        lr,f = divmod(n-5,4)
        hands = [right,left]
        return hands[lr%2][1+f]

2nd 思路更简洁

a = ("Index finger""Thumb"
      "Index finger""Middle finger"
      "Ring finger",  "Little finger",
      "Ring finger""Middle finger")

def which_finger(n):
    return a[n % 8]

思考为何解法2nd如此简洁?

任务二 描述

无数个架子错落有致地排列在一起。 根据图示,猫可以同时跳到3个架子上:从架子1跳到架子2或4(猫不能爬到头顶正上方的架子上)。

alt

输入 架子的起始和结束数字(总是正整数,结束不小于起始数)。

任务 找到从起点到终点的最小跳数。

alt

例子 开始1,结束5,那么答案是2(1=>4=>5或1=>2=>5)。

算法

def solution(start, finish):
    step,rest = divmod(finish-start,3)
    return step + rest

运行成功干杯

本文由 mdnice 多平台发布

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值