求pi近似值和凯撒密码

5.18小测

求pi的近似值

有题:
数学家拉马努金(Srinivasa Ramanujan)找到了一个无限序列,可以用来生成π的数值近似值:
在这里插入图片描述
编写一个函数estimate_pi,使用这个公式计算并返回π的近似估计。它应当使用一个while循环来计算求和的每一项,直到最后一项的值小于1e-15(这是Python对10-15的标记法)。

输入

输出
比如:3.14
样例输入
0
样例输出
3.141592653589793

题解:

#[MFTOLP]-C7-1-求pi的近似值
import math

def estimate_pi():
    k = 0
    pi = 0
    term = factorial(4*k)*(1103+26390*k)/(factorial(k)**4*396**(4*k))
    while term>=1e-15:
        pi = pi + term
        k = k + 1
        term = factorial(4*k)*(1103+26390*k)/(factorial(k)**4*396**(4*k))

    pi = 9801/(2*math.sqrt(2)*pi)
    return pi

def factorial(n):
    factor = 1
    for i in range(n):
        factor = factor * (i+1)
    return factor

print(estimate_pi())

凯撒密码

有题:
凯撒密码(Caesar Cypher)是一个比较弱的加密形式,它涉及将单词中的每个字母“轮转”固定数量的位置。轮转一个字母意思是在字母表中移动它,如果需要,再从开头开始。所以‘A’轮转3个位置是’D‘,而’Z‘轮转一个位置是’A‘。

要对一个单词进行轮转操作,对其中每一个字母进行轮转即可。例如,“cheer”轮转7位的结果是“jolly”,而“melon”轮转-10位结果是“cubed”。在电影《2001太空漫游》中,舰载机器人叫作HAL,这个单词正是IBM轮转-1位的结果。

编写一个函数rotate_word,接收一个字符串以及一个整数作为参数,并返回一个新字符串,其中的字母按照给定的整数值“轮转”位置。

你可以使用内置函数ord,它能够将一个字符转换为数值编码,以及函数chr,它将数值编码转换为字符。字母表中的字母是按照字母顺序编码的,所以,例如:

ord(‘c’)-ord(‘a’) 
2 

[提示]:注意单词中的大小写不变。你可以用方法isupper或islower判定大小写。
输入
cheer
7
输出
jolly
样例输入
cheer
7
样例输出
jolly

老师题解:

#[MFTOLP]-C6-1-凯撒密码

def rotate_word(s,n):

    length = len(s)
    for i in range(length):
        if s[i].isupper()==True:
            letter = (ord(s[i])-ord('A')+n)%26+ord('A')
            letter = chr(letter)
        elif s[i].islower()==True:
            letter = (ord(s[i])-ord('a')+n)%26+ord('a')
            letter = chr(letter)
        else:
            letter = s[i]
        print(letter,end='')
    #print('\n')

s = input()
n = int(input())
rotate_word(s,n)

由于我的复杂考虑(考虑到正负值得问题),我的题解为:

str = input()
n = int(input())
def rotate_word(str,n):
    jj = ""
    for i in range(len(str)):
        if str[i].isupper()==True:
            if n>=0:
                if ord(str[i])+n>ord('Z'):
                    jj+= chr(ord('A')+((ord(str[i])+n-ord('A'))%26))
                else:
                    jj+= chr(ord(str[i])+n)
            else:
                if abs(ord(str[i])+n)<ord('A'):
                    jj+= chr(ord('Z')+(ord(str[i])-ord('Z')+n)%-26)
                else:
                    jj+= chr(ord(str[i])+n)
        elif str[i].islower()==True:
            if n>=0:
                if ord(str[i])+n>ord('z'):
                    jj+= chr(ord('a')+((ord(str[i])+n-ord('a'))%26))
                else:
                    jj+= chr(ord(str[i])+n)
            else:
                if abs(ord(str[i])+n)<ord('z'):
                    jj+= chr(ord('z')+(ord(str[i])-ord('z')+n)%-26)
                else:
                    jj+= chr(ord(str[i])+n)
        else:
            jj+=str[i]
    print(jj)
rotate_word(str,n)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值