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