第三次上机作业

1、编写函数接受一个大于1的整数 `n` 并返回不是 `n` 本身的最大因子。

def largest_factor(n):

    >>> largest_factor(15) # factors are 1, 3, 5

    5

    >>> largest_factor(80) # factors are 1, 2, 4, 5, 8, 10, 16, 20, 40

    40

    >>> largest_factor(13) # factor is 1 since 13 is prime

    1

def largest_factor(n):
    max=0
    for i in range(1,n):
        if(n%i==0):
            if(i>max):
                max=i
    return max
num=int(input("input a num:"))
print(largest_factor(num))

2、实现函数 `count_until_larger`,该函数接受一个正整数`num`,统计最右边数位(digit)和离它最近并比它大的数位的距离。函数从右往左计数,一旦遇到比最右边数位大的数位,就返回这个计数,如果不存在这样的数位,就返回 -1。

例如, 8117 的最右边数位是 `7` 并返回计数 `3` 。9118117 也返回计数 `3`,两个都是在 `8` 停止计数。数字 `0` 应该按无数位对待并返回 `-1` 。

def count_until_larger(num):

    >>> count_until_larger(117) # .Case 1

    -1

    >>> count_until_larger(8117) # .Case 2

    3

    >>> count_until_larger(9118117) # .Case 3

    3

    >>> count_until_larger(8777)  # .Case 4

    3

    >>> count_until_larger(22) # .Case 5

    -1

    >>> count_until_larger(0) # .Case 6

    -1

def count_until_large(n):
    i=len(n)
    d=n[i-1]
    m=int(n)
    c=0
    flag=0
    if(m==0):
        return -1
    else:
        while(i!=0):
            if(n[i-1]>d):
                flag=1
                break
            else:
                i-=1
                c+=1
        if(flag==1):
            return c
        else:
            return -1
num=input("input a num:")
print(count_until_large(num))

3、冰雹序列的定义如下:(1)选择一个正整数`n`作为开始;(2)如果`n`为偶数,则将其除以2;(3)如果`n`为奇数,则将其乘以3并加1;(4)继续此过程,直到`n`为1。

这个数字`n`会上下移动,但最终以1结束,就像冰雹在大气层中上下移动,最终降落在地球上。因此`n`的值序列通常被称为冰雹序列。

编写一个函数,接受一个正式的参数名`n`,打印出从`n`开始的冰雹序列,并返回序列中的步数:

>>> a = hailstone(10)

    10

    5

    16

    8

    4

    2

    1

    >>> a

    7

    >>> b = hailstone(1)

    1

>>> b

def hailstone(n):
    if (n == 1):
        print('1')
    else:
        print(n)
    while(n!=1):
        global c
        c+=1
        if(n%2==0):
            return hailstone(n/2)
        if(n%2!=0):
            m=n*3+1
            return hailstone(m)

    return c

c=1
num=int(input("input a num:"))
print(hailstone(num))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值