美文网首页
CA61A(Fall 2016)-Homework 1

CA61A(Fall 2016)-Homework 1

作者: fancypy | 来源:发表于2017-04-26 12:41 被阅读0次

    题目链接

    Q1 在线demo

    from operator import add, sub
    def a_plus_abs_b(a, b):
       """在不使用abs()函数的前提下,返回a + abs(b)的和"""
        if b < 0:
            f = sub
        else:
            f = add
        return f(a, b)
    

    Q2 在线demo

    def two_of_three(a, b, c):
        """
        返回a, b, c中最大2个数的平方和
        假设a, b, c为正数
        """
        # 方法一
        # return max(a*a + b*b, a*a + c*c, b*b + c*c)
        
        # 方法二
        return a*a + b*b + c*c - (min(a, b, c))**2
    

    Q3 在线demo

    def largest_factor(n):
        """
        求n的最大公约数
        利用枚举法,从n-1开始,第一个符合条件的即为最大公约数。
        如果n除以factor余数为0,说明factor为n的最大公约数,否则factor-1继续循环
        """
        factor = n - 1
        while True:
            if n % factor == 0:
                return factor
            else:
                factor -= 1
    

    Q4 在线demo

    本题的用意在于区别with_if_statement()和with_if_function()执行的结果
    if_statement()只有在满足该条件的时候,才会检查该分支是否有误
    而if_function()在执行的时候,就会检查各个参数是否有误
    所以在极端的情况下with_if_statement()会返回1
    而with_if_function()会出现ZeroDivisionError: division by zero
    def c():
        return False 
    
    def t():
        return 1 / 0
        
    def f():
        return 1
    
    
        
      
    

    Q5 在线demo

    def hailstone(n):
        """
        初始化长度为1,因为如果n=1, 则不进入循环直接打印n,返回length
        在while循环里,根据定义对满足条件的n进行处理
        """
        length = 1
        while n != 1:
            print(n)
            if n % 2 == 0:
                n = n // 2 # 得到整数n 
            else:
                n = n*3 + 1
            length += 1
        print(n)
        return length
    

    Q6 在线demo

    def multiple(a, b):
        """
        求a,b的最小公倍数(lowest common multiple)
        思路和求最大公约数差不多,最小公倍数除以被除数,余数为0
        利用枚举法,先从a,b两个数中选出大的那个数作为初始的lcm,
        每次循环lcm加上1,满足条件则return lcm
        """
        if a > b:
            lcm = a
        else:
            lcm = b
        
        while True:
            if lcm % a == 0 and lcm % b == 0:
                return lcm
            else:
                lcm += 1
    

    Q7 在线demo

    def unique_digits(n):
        """
        返回正整数n里不重复的数字的个数
        先把n的类型从不可迭代的int转换为可迭代的str,
        利用set的特性去除重复的元素,最后返回set集合的长度
        """
        return len(set(str(n)))
    

    相关文章

      网友评论

          本文标题:CA61A(Fall 2016)-Homework 1

          本文链接:https://www.haomeiwen.com/subject/yfqizttx.html