1. 程式人生 > 其它 >《資料結構與演算法》第一章入門的爛又長答案實現

《資料結構與演算法》第一章入門的爛又長答案實現

from random import randrange
import math
class basic_exercises:
    def is_multiple(n,m):
        '''
        is_multiple(n,m)函式,如果n是m的倍數,即存在整數i使得n=mi,那麼函式返回True,否則False
        '''
        try:
            if (n % m):
                return False
            else:
                return True
        except ZeroDivisionError:
            print("ZeroDivisionError,被除數為零")
    def is_even(k):
        '''
        接收一個整數k,不用乘、除、取餘,判斷奇偶
        :return: 奇數返回True,偶數返回Flase
        '''
        try:
            if (k&1):
                return True
            else:
                return False
        except TypeError:
            print("TypeError,輸入非整數")
    def minmax(self, *list):
        '''
        找出序列中的最大數和最小數,返回一個長度為2的元組。
        :param data: 數字序列
        :return: 長度為2的元組——最大數和最小數
        '''
        print(list)
        k = j = list[0]

        # j = list[0]
        for i in range(len(list)):
            if k < list[i]:
                k = list[i]
            elif j > list[i]:
                j = list[i]
        return k,j
    def Sum_of_squares(self, num):
        '''
        返回正整數1~num的平方和
        '''
        k = 0
        for i in range(1,num+1):
            j = i*i
            k = k + j
        return k
    def Sumofsquares_baseonsum(self, num):
        '''功能同Sum_of_squares()方法,使用sum實現'''
        list = []
        for i in range(1,num+1):
            list.append(i*i)
        return sum(list)
    def Odd_Sum_of_squares(self,num):
        '''
        返回1~num正整奇數的平方和
        '''
        k = 0
        j = 0
        for i in range(1,num+1):
            if (i&1):
                j = j + i * i
        return j
    def OddSumof_squares_baseonsum(self,num):
        '''功能同Odd_Sum_of_squares()方法,使用sum實現'''
        list = []
        for i in range(1,num+1):
            if (i&1):
                list.append(i*i)
        return sum(list)
    def Positive_negative_index(self, s ,k):
        '''
        存在長度n的字串s,索引-n<=k<0,s[k]與s[j]指向同一元素,輸入n,返回k
        :param s: 字串s
        :param k:負數索引
        :return:
        '''
        a = len(s)
        if (-a <=k< 0):
            j = k+a
            if(s[k] == s[j]):
                return j
        else:
            print("Error:入參應該為小於長度的負整數")
    def range_test(self,start, end, Cadence=1):
        '''生成一個值為50、60、70、80的排列,求range建構函式的引數'''
        for i in range(start, end, Cadence):
            print(i)
        return start, end, Cadence
    def list_range_make(self,start, end, Cadence=1):
        '''使用range生成列表'''
        list=[]
        for i in range(start, end, Cadence):
            list.append(2 ** i)
        return list
    def choice_data(self, data):
        '''非空序列返回一個隨機元素'''
        i = randrange(len(data))
        return data[i]
    def reverse_list(self, list):
        '''
        顛倒n個整陣列成的列表,輸出新列表
        '''
        list1=[]
        for i in list:
            list1.insert(0, i)
        return list1
    # 更優解
    def reverse_list2(self, data):
        '''
        顛倒n個整陣列成的列表,輸出新列表
        list[param1:param2:param3]
        param1,相當於start_index,可以為空,預設是0
        param2,相當於end_index,可以為空,預設是list.size
        param3,步長,預設為1。步長為-1時,返回倒序原序列
        '''
        return data[::-1]

if __name__ == '__main__':
    data = [0, 1, 2, 5, 5, 2, 5, 5, 56]
    a = basic_exercises().reverse_list2(data)
    print(a)