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))