课后练习 第1章 Python入门

课后练习 第1章 Python入门

巩固

R-1.1 编写一个Python函数is_multiple(n, m),用来接收两个整数值nm,如果nm的倍数,即存在整数i使得n = mi,那么函数返回True,否则返回False。

def is_multiple(n, m):
    return n % m == 0

原始答案

# 同上

R-1.2 编写一个Python函数is_even(k),用来接收一个整数k,如果k是偶数返回True,否则返回False。但是,函数中不能使用乘法、除法或取余操作。

def is_even(k):
    return (k & 1 == 0)

原始答案

# 同上

R-1.3 编写一个Python函数minmax(data),用来在数的序列中找出最小数和最大数,并以一个长度为2的元组返回。请注意:不能通过内置函数minmax来实现。

import numpy as np

def minMax(data):
    minVal = data[0]
    maxVal = data[0]
    for val in data:
        if val < minVal:
            minVal = val
        if val > maxVal:
            maxVal = val
    return minVal, maxVal
    
if __name__ == '__main__':
    array = np.random.randint(10, 99, size=10, dtype=np.uint8)
    print(array)
    minVal, maxVal = minMax(array)
    print(minVal, maxVal)

原始答案

def minmax(data):
    small = big = data[0] # assuming nonempty
    for val in data:
        if val < small:
            small = val
        if val > big:
            big = val
    return small,big

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

def sum_of_squares(n):
    return sum(x * x for x in range(n+1))

if __name__ == '__main__':
    print(sum_of_squares(3))

原始答案

def sum_of_squares(n):
    total = 0
    for j in range(1, n+1):
        total += j*j
    return total

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

def sum_of_squares(n):
    return sum(x * x for x in range(n+1))
    
if __name__ == '__main__':
    print(sum_of_squares(3))

原始答案

total = sum(j*j for j in range(1, n+1))

R-1.6 编写一个Python函数,用来接收正整数n,并返回1~n中中所有奇数的平方和。

def sum_of_squares(n):
    total = 0
    for i in range(1, n + 1, 2):
        total += i * i
    return total

if __name__ == '__main__':
    print(sum_of_squares(3))

原始答案

def sum_of_squares(n):
    total = 0
    for j in range(1, n+1, 2):
        total += j*j
    return total

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

def sum_of_squares(n):
    total = sum(x * x for x in range(1, n + 1, 2))
    return total

if __name__ == '__main__':
    print(sum_of_squares(3))

原始答案

total = sum(j*j for j in range(1, n+1, 2))

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

  • 序列的正负索引值对照如下图所示:
-1
n-1
-2
n-2
-3
n-3
k
n+k

所以j = n + k


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

for val in range(50, 90, 10):
    print(val, end=',')

原始答案

range(50, 81, 10)

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

range(8, -9, -2)
for val in range(8, -9, -2):
    print(val, end=" ")

原始答案

range(8, -10, -2)

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

list = [2 ** x for x in range(9)]
print(list)

原始答案

[2∗∗k for k in range(9)]

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

from random import randrange

def choice(data):
    i = randrange(len(data))
    return data[i]
    
if __name__ == '__main__':
    data = [1, 2, 4, 8, 16, 32, 64, 128, 256]
    print(choice(data))

原始答案

def choice(data):
    return data[randrange(len(data))]

创新

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

def reverse(data):
	return data[::-1]

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

提示,两个数字必须是奇数。

以下解法时间复杂度为 O ( n 2 ) O(n^{2}) O(n2)

def find_result(data):
    for i in range(len(data)):
        for j in range(len(data)):
            if i == j:
                continue
            elif (data[i] % 2) == 1 and (data[i] % 2):
                return data[i], data[j]
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值