数据结构与算法python语言实现-第一章答案



把第一章的代码补完了。一起学习,请大家多指正,谢谢。


数据结构与算法python第一章答案和提示打包


链接是

link.


习题1.3 编写一个Python函数 minmax(data),用来在数的序列中找出最小数和最大数,并以一个长度为 2 的元组的形式返回。注意:不能通过内置函数 min 和 max 来实现。
代码如下:

def minmax(data):
    size=len(data)
    max=data[0]
    min=data[0]
    for fig in data:
        if fig > max:
            max=fig
        if fig< min:
            min=fig
    return [min,max]
data=[1,2,8,9,23,45,64,8,123,875,321]
print(minmax(data))

1.4 编写一个Python函数,用来接收正整数 n,返回 1 ~ n 的平方和。

def quadratic_sum(n):
    sum=0
    for i in range(1,n+1):
        sum+=i*i
    return sum
n=int(input('输入n'))
print(quadratic_sum(n))

1.5 基于Python的解析语法和内置函数 sum,写一个单独的命令来计算练习R-1.4中的和。

n=4
print(sum(i*i for i in range(1,n+1)))#生成器解析
print(sum({i*i for i in range(1,n+1)}))#集合解析
print(sum([i*i for i in range(1,n+1)]))#列表解析

1.6 编写一个Python函数,用来接收正整数n,并返回 1 ~ n 中所有的奇数的平方和。
1.7 基于Python的解析语法和内置函数 sum,写一个单独的命令来计算练习R-1.6中的和。

n=6
print(sum(i*i for i in range(1,n+1,2)))#生成器解析 1+9+25=35

1.8 Python 允许负整数作为序列的索引值,如一个长度为 n 的字符串 s,当索引值-n<=k<0时,所指的元素为s[k],那么求一个正整数索引值j>=0,使得s[j]指向的也是相同的元素。

s='python'
k=2
print(s[-1*k])
print(s[len(s)-k])

1.9 要生成一个值为 50, 60, 70, 80 的排列,求 range构造函数的参数.

for i in range(50,90,10):
    print(i)

1.10 要生成一个值为 8, 6, 4, 2, 0, -2, -4, -6, -8 的排列,求 range 构造函数中的参数。

for i in range(-8,10,2):
   print(i)

1.11 演示怎样使用 Python 列表解析语法来产生列表 [1, 2, 4, 8, 16, 32, 64, 128, 256].

print([2**i for i in range(1,9)])

1.12 Python 的 random 模块包括一个函数 choice(data),可以从一个非空序列返回一个随机元素。Random模块还包含一个更基本的 randrange 函数,参数化类似于内置的 range 函数,可以在给定范围内返回一个随机数。只使用 randrange 函数,实现自己的 choice 函数。

# 字符串,列表,元组都可以看作序列
from random import randrange
def choice(data):
   c = randrange(0,len(data))
   print(c)
   return data[c]

data='python'
print(choice(data))

1.13 编写一个函数的伪代码描述,该函数用来逆置 n 个整数的列表,使这些以相反的顺序输出,并将该方法与可以实现相同功能的 Python 函数进行比较。

data=[12,55,31,654,99,12]
trans=[]
for i in range(1,len(data)+1):  #从-1开始
   trans.append(data[-1*i])
print(trans)

1.14 编写一个 Python 函数,用来接收一个整数序列,并判断该序列中是否存在一对乘积是奇数的互不相同的数。

def if_odd(array):
   result=[]
   for i in range(0,len(array)):
       for j in range(i+1,len(array)):
           if array[i]*array[j]%2==1:
               result.append([array[i],array[j]])
   return result
   # print(i,j,array[i],array[j])
array=[3,4,6,5,7]
print(if_odd(array))

1.15

def if_dif(array):
    result=[]
    for i in range(0,len(array)):
        for j in range(i+1,len(array)):
            if array[i]==array[j]:
                result.append([i,j])
    return result
    # print(i,j,array[i],array[j])
array=[3,4,6,5,7,6,4]
print(if_dif(array))#输出相同的序号组

1.16

def scale(data,factor):
    for j in range(len(data)):
        data[j]=data[j]*factor#形参指向实参,调用形参(实参)里的内容,则可以改变实参
    data=[]#直接对形参赋值,改变了别名,使形参data指向了一个[]空列表,而不能改变实参,因为原本形参就是指向实参的一个别名。
grade=[0,56,3]
factor=2
scale(grade,factor)
print(grade)

1.17

def scale(data,factor):
    for val in data:
        val *=factor
grade=[0,56,3]
factor=2
scale(grade,factor)
print(grade)

1.18

print([2*sum(range(0,i+1)) for i in range(0,10)])
# s=0
# print([s+2*i for i in range(0,10)])
# 不能用之前迭代的结果做下次迭代的参数

1.19

print([chr(ord('a')+i) for i in range(0,26)])
#p20 chr(integer) 返回给定Unicode编码的字符
#    order(char)返回给定字符的Unicode编码的编码值

1.20

from random import randint


def shuffle(data):
    new = []
    for i in range(0, len(data)):
        new.append(data[randint(0, len(data) - 1)])
    return new

data = [5, 6, 8, 5, 8, 7, 1, 123]
print(shuffle(data))

1.21

result = []
while True:
    try:
        result.append(input('输入'))
    except EOFError:
        break
for i in range(1, len(result) + 1):
    print(result[-1 * i])

1.22

z1=list(map(int,input('数组1').split()))#map函数,映射
z2=list(map(int,input('数组2').split()))
result=0
for i in range(0, len(z1)):
    result = result + z1[i] * z2[i]
print(result)

1.23

data=[1]
try:
    for i in range(len(data)):
        print(data[i+5])
except IndexError:
    print("Don't try buffer overflow attacks in Python!")

1.24

phrase=input('pleas enter the phrase')
number=0
for alphabet in phrase:
    if alphabet=='a'or alphabet=='e'or alphabet=='i'or alphabet=='o'or alphabet=='u':
        number+=1
print(number)

1.28

def norm(num_list,order):
    return sum(num**order for num in num_list)**(1/order)
data=[1,3,5]
p=3
print(norm(data,p))