Python编程实践:从算法到游戏

24、数学家斯里尼瓦瑟·拉马努金发现了一个无穷级数,可用于生成 1/π 的数值近似值:1/π = (2√2 / 9801) * ∑((4k)!(1103 + 26390k) / ((k!)^4 * 396^(4k))) ,其中 k 从 0 到 ∞。编写一个名为 estimate_pi 的函数,使用此公式计算并返回 π 的近似值。该函数应使用 while 循环来计算级数的各项,直到最后一项小于 1e - 15(即 10 的 - 15 次方)。你可以通过将结果与 math.pi 进行比较来验证结果。

以下是实现 estimate_pi 函数的 Python 代码:

import math

def estimate_pi():
    total = 0
    k = 0
    factor = 2 * math.sqrt(2) / 9801
    while True:
        num = math.factorial(4 * k) * (1103 + 26390 * k)
        den = math.factorial(k) ** 4 * 396 ** (4 * k)
        term = factor * num / den
        total += term
        if abs(term) < 1e-15:
            break
        k += 1
    return 1 / total

25、字符串切片可以使用第三个索引来指定“步长”,即连续字符之间的间隔数。步长为2表示每隔一个字符取一个;步长为3表示每隔两个字符取一个,依此类推。步长为 -1 表示反向遍历字符串,因此切片 [::-1] 会生成一个反转的字符串。编写一个单行版本的函数来判断一个字符串是否为回文串。

单行版本的实现为: is_palindrome = lambda s: s == s[::-1]

26、以下函数都旨在检查字符串是否包含任何小写字母,但至少有一些是错误的。对于每个函数,描述该函数实际的功能(假设参数是一个字符串)。函数如下:def any_lowercase1(s): for c in s: if c.islower(): return True else: return False def any_lowercase2(s): for c in s: if ‘c’.islower(): return ‘True’ else: return ‘False’ def any_lowercase3(s): for c in s: flag = c.islower() return flag def any_lowercase4(s): flag = False for c in s: flag = flag or c.islower() return flag def any_lowercase5(s): for c in s: if not c.islower(): return False return True

  1. any_lowercase1 :检查字符串的第一个字符是否为小写字母,若是则返回 True ,否则返回 False
  2. any_lowercase2 :由于比较的是字符 'c' 是否为小写,而 'c' 总是小写,所以该函数总是返回字符串 'True'
  3. any_lowercase3 :检查字符串的第一个字符是否为小写字母,返回该字符是否为小写的布尔值。
  4. any_lowercase4 :检查字符串中是否有小写字母,若有则返回 True ,否则返回 False
  5. any_lowercase5 :检查字符串中的所有字符是否都是小写字母,若是则返回 True ,否则返回 False

27、ROT13是一种弱加密形式,它将单词中的每个字母“旋转”13位。旋转一个字母意味着将其在字母表中移动,如果必要的话再回到字母表开头,例如字母“A”移动3位是“D”,字母“Z”移动1位是“A”。编写一个名为rotate_word的函数,该函数接受一个字符串和一个整数作为参数,并返回一个新字符串,该字符串包含原字符串中的字母按给定数量“旋转”后的结果。例如,“cheer”旋转7位是“jolly”,“melon”旋转 - 10位是“cubed”。你可能需要使用内置函数ord(将字符转换为数字编码)和chr(将数字编码转换为字符)。

以下是将给定文本内容调整为 Markdown 格式的结果:


可按以下步骤编写 rotate_word 函数:
1. 遍历字符串中的每个字符;
2. 使用 ord 函数将字符转换为数字编码;
3. 根据旋转的位数移动该数字编码;
4. 处理超出字母表范围的情况;
5. 使用 chr 函数将移动后的数字编码转换回字符;
6. 拼接所有旋转后的字符形成新字符串。

示例代码如下:

def rotate_word(s, n):
    result = ''
    for c in s:
        if c.isalpha():
            start = ord('A') if c.isupper() else o
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值