数据结构与算法 Python语言实现 课后习题第一章

数据结构与算法 Python语言实现 课后习题第一章

  • 记录下自己写的课后习题答案

1.1
在这里插入图片描述

def is_multiple(n,m):
    if m%n == 0:
        return True
    else:
        return False

1.2
在这里插入图片描述

def is_even(k):
    if k&1 == 0:
        return True
    else: 
        return False

1.3
在这里插入图片描述

def minmax(data):
    min1 = max1 = data[0]
    for i in data:
        if min1 > i:
            min1 = i
        else:
            max1 = i
    return max1,min1

1.4 (1.5)
在这里插入图片描述

def Pfanghe(k):
    return sum(j**2 for j in range(1,k+1))

1.6(1.7)
在这里插入图片描述

def JPfanghe(k):
    return sum( j**2 for j in range(1,k+1) if j%2 != 0)

1.8
在这里插入图片描述

def _1_8(data,i):
    return data[len(data)+i]

1.9
在这里插入图片描述

list1_9 = [i for i in range(50,81,10)]

1.10
在这里插入图片描述

list1_10 = [i for i in range(8,-9,-2)]

1.11
在这里插入图片描述

list1_11 = [2**i for i in range(0,9)]

1.12
在这里插入图片描述

def _1_12(data):
    print(data[random.randrange(len(data))])

1.13
在这里插入图片描述

def _1_13(data):
    list1=[]
    for i in range(len(data)):
        x = data.pop()
        list1.append(x)
    print(list1)
_1_13([1,2,3,4])

1.14
在这里插入图片描述

def _1_14(data):
    data = set(data)
    for i in range(len(data)):
        x = data.pop()
        for a in data:
            if (x*a)%2 != 0:
                print(x,a)
            else:
                pass

1.15
在这里插入图片描述

def _1_15(data):
    x = data[:]
    for i in data:
        a = x.pop(len(x)-1)
        if a in x:
            return False
        else:
            pass
    return True

1.16
在这里插入图片描述

该处data为一个列表,所以该列表内存储的是数值的引用。在函数体内部直接改变了列表内所存储的地址,所以实例参数也随之改变。

1.17在这里插入图片描述

不能,此时改变的是单个数值的大小,而非改变列表内的引用

1.18
在这里插入图片描述

list1_18 = [i*(i+1) for i in range(0,10) ]

1.19
在这里插入图片描述

list1_19 = [chr(i) for i in range(97,123)]

1.20
在这里插入图片描述

import random
def shuffle(data):
    zu = []
    for i in range(len(data)):
        if len(data) != 0:
            e = random.randint(0,len(data)-1)
            zu.append(data[e])
            data.remove(data[e])
        else:
            break
    return zu

1.21
在这里插入图片描述

try:
    zu = []
    while 1:
        i = input(":")
        zu.append(i)
except EOFError:
    zu.reverse()
    for i in range(len(zu)):
        print(zu[i])
        
        

1.22
在这里插入图片描述

def _1_22(x,y):
    z = []
    if len(x) == len(y):
       for i in range(len(x)):
           e = x[i] * y[i]
           z.append(e)
       return z
    else:
        raise ('两参数列表长度需要一致')

1.23
在这里插入图片描述

try:
    zu = [1,2,3,4]
    x = zu[5]
    print(x)
except IndexError:
    print("Don not try buffer overflow attacks in python")

1.24
在这里插入图片描述

def _1_24(data):
    key = ['a','e','i','o','u']
    result = 0
    for i in key:
        for j in data[:]:
            if i == j:
                result +=1
            else:
                pass
    return result

1.25
在这里插入图片描述

from string import punctuation as p #导入string包内punctuation内含(!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~)
def _1_25(s):
    for i in s:
        if i in p:
            s = s.replace(i,' ')
        else:
            pass
    return str(s)

1.26(这道题原题只要以固定顺序满足即可,此处我做了修改,可以以任意顺序实现即返回True)
在这里插入图片描述

def _1_26():
    key = []
    for i in range(3):
        x = int(input(':'))
        key.append(x)
    for i in range(len(key)):
        new = key[:]
        new.remove(key[i])
        if key[i] == new[0]+new[1]:
            return True
        elif key[i] == new[0]-new[1] or key[i] == new[1]-new[0]:
            return True
        elif key[i] == new[0]*new[1]:
            return True
        else:
            pass
    return False

1.27
在这里插入图片描述

#本题参考:https://blog.csdn.net/storyfull/article/details/102940318
def _1_27(x):
    k = 1
    key = []
    while k * k < x:
        if x % k == 0:
            yield k
            key.append(x // k)
        k += 1
    if k * k == x:
        yield k
    for i in key[::-1]:
        yield i

1.28
在这里插入图片描述

import math
def _1_28(v, p=2):
    return math.sqrt(sum(pow(x, p) for x in v))

1.29(排列任意列表)
在这里插入图片描述

def _1_29(data):
    key = 0
    from itertools import permutations  #该函数返回列表内所有元素数学全排列
    for i in permutations(data): 
        i = str(i)
        print(i.replace(',',''))
        key += 1
    print(key)

1.30
在这里插入图片描述

def _1_30(n):
    key = 0
    while 1:
        n = n/2
        key += 1
        if n<2:
            break
    return key

1.31
在这里插入图片描述

import math
from decimal import Decimal
def _1_31(need,give):
    word = []
    keyx = float(Decimal(str(give)) - Decimal(str(need)))    #正常进行浮点数加减运算
    a = math.modf(keyx)
    if a[0] != 0:
        for i in str(keyx):
            word.append(i)
        word.remove(".")
        # long = len(word)
        word.reverse()
        print("找回%s张0.1元"%word[0])
        word.pop(0)
        if word[0] != '0':
            print("找回%s张1元"%word[0])
        word.pop(0)
        if int(word[0]) >= 5:
            print("找回1张50元")
            s = int(a[0])-5
            if s>0:
                print("找回%s张10元"%s)
            word.pop(0)
        else:
            print("找回%s张10元"%word[0])
            word.pop(0)
        if len(word) != 0:
            word.reverse()
            x = [str(i) for i in word]
            y = str(" ".join(x))
            print("找回%s张100元"%y)

1.32
在这里插入图片描述

def _1_32():
    x = input("第一个操作数:")
    while 1:
        key = input("运算符:")
        y = input(":")
        x = str(eval(x+key+y))   #eval函数负责进行字符串内表达式的运算
        print(x)

1.33在这里插入图片描述

def _1_32():
    while 1:
        x = input(":")
        x = str(eval(x)) 
        print(x)
        while 1:
            key = input(":")
            if key == '复位':
                print("进行复位操作")
                break
            else:
                print(eval(x+key))

1.34在这里插入图片描述

def _1_34():
    print("请输入:I will never spam my friends again 100次")
    s = 0
    e = 9 
    while 1:
        key = input(":")
        if key == 'I will never spam my friends again':
            s += 1
            print('第{}遍'.format(s))
            if s == 100:
                print("结束")
                break
        else:
            e -= 1
            print("输入错误!,重新输入")
            if e == 0:
                print("输入错误次数超过八次,请重新开始输入")
                s = 0

1.35
在这里插入图片描述

在这里插入图片描述

#参考自https://blog.csdn.net/storyfull/article/details/102940318
import math
def _1_35(num):
    prop = 1 - math.pow((364 / 365), (num * (num - 1) / 2))
    return prop

1.36(在原题基础上加以改进,可以读取英文句子并统计单词频率)
在这里插入图片描述

import re                         #导入re模块,方便后续使用多个分隔符分割字符串
def _1_36(data):
    a = b = data
    a=re.split('[ ,.]',a)             #以空格、逗号以及句号来分隔文档内容
    a.pop()                           #去除字符串中最后一个句号分隔出的空字符串
    count = len(a)
    print("读取到的英文内容为:\n",b,"\n")
    print("文档内含有%d个单词"%count,"单词重复情况如下\n")
    key = set(a)
    for i in key: 
        print("{:10}有 {} 个".format(i,a.count(i))) 
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值