1.计算圆周率——无穷级数法
描述
圆周率π可以用无穷级数表示: image

左边的展式是一个无穷级数,被称为莱布尼茨级数(Leibniz),这个级数收敛到π/4,它通常也被称为格雷戈里-莱布尼茨级数,用以纪念莱布尼茨同时代的天文学家兼数学家詹姆斯·格雷戈里。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

编程用这个公式计算π值,输入一个小数作为阈值,当最后一项的绝对值小于给定阈值时停止计算并输出得到的π值。

样例
输入
0.000002

输出
3.14158865
这个题没什么难度,主要涉及两个知识点,第一个是要把输入的字符串转换为float类型的,第二个是输出保留八位小数,用round()函数

num = float(input())
sum = int(0)
flag = int(1)
i = int(1)
while 1 / i >= num:
    if flag % 2 != 0:
            sum += 1 / (i)
    else:
            sum -= 1 / (i)
    i = i + 2
    flag = flag + 1
print(round(sum * 4, 8))

2.凯撒密码——加密
描述
在密码学中,凯撒密码是一种最简单且最广为人知的加密技术。“恺撒密码”据传是古罗马恺撒大帝用来保护重要军情的加密系统。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推,小写字母和数字也一样处理,其他字符不作任何改变。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

例如这样一条指令:'All roads lead to Rome.' 用恺撒密码加密后就成为:‘Doo urdgv ohdg wr Urph.’

编写一个程序实现凯撒加密:输入一个字符串,对字符串中的字母和数字进行加密(规定加密偏移量为3,即后移三位),并输出加密后的字符串。

格式
输入
一行字符串

输出
加密后的字符串

样例
输入
Open Box PassWord:2021

输出
Rshq Era SdvvZrug:5354
首先输入一个字符串,然后对其进行遍历判断,字符串中主要包含数字,字母(大写和小写),和其他
我们写一个exchange转换函数,来得到转换后的字符串。要在函数中定义一个空字符串来储存结果注意点有三个,如下:
第一:
判断一个字符是否为数字,用isdigit()函数,判断一个数字是否为字母,用isalpha()函数,判断一个字母是否为大写字母,用isupper()函数,判断一个字母是否为小写字母,用islower()函数
第二:
当已经判断该字符是小写字母后,我们就要对其进行转换,先计算出它对于'a'的ACSSI码的偏移量,再将其模26,然后加上'a'的ACSSI值,(计算ACSSI值用ord()函数)再将ACSSI码转换为字符形式(用chr()函数)添加到记录结果的字符串中去

if char.islower():
                result += chr((ord(char) - ord('a') + pian) % 26 + ord('a'))

大写字母同理:
result += chr((ord(char) - ord('A') + pian) % 26 + ord('A'))
第三:
对于数字的转换,直接将字符转换为整形加上偏移量模10再转换为字符串形式(str()函数)
result += str((int(char) + pian) % 10)

完整代码如下:

def change(text, pian):
    result = ""
    for char in text:
        if char.isalpha():
            if char.islower():
                result += chr((ord(char) - ord('a') + pian) % 26 + ord('a'))
            else:
                result += chr((ord(char) - ord('A') + pian) % 26 + ord('A'))
        elif char.isdigit():
            result += str((int(char) + pian) % 10)
        else:
            result += char
    return result
text = input()
print(change(text, 3))

3.素数筛选
题目如下:
描述
一个正整数若只能被1和自身整除,则称为素数。编写程序,输入一系列正整数,筛选出其中的素数。

格式
输入
输入多个正整数,中间用空格隔开。

输出
输出筛选出的素数,中间用空格隔开。

样例
输入
22 40 77 41 92 93 73 27 43 71
输出
41 73 43 71
对于这个题有三个注意点:
第一:
判断一个数是否为素数的函数,如果这个数小于2,函数直接return False,然后循环进行判断,循环的范围是从2到这个数开根号的,在Python中,一个数的平方根就是这个数的0.5倍,用x ****** 0.5即可

def is_prime(xx):
    if xx < 2:
        return False
    for i in range(2, int(xx ** 0.5) + 1):
        if xx % i == 0:
            return False
    return True

第二:
在Python中,输入只能是字符串,所以我们需要将输入的含有很多数字的字符串转换成一个数字列表
首先第一步,我们需要用split()函数来将该字符串分割为一个一个的子字符串,split()函数是默认通过空格分割的
分割结束后,我们需要将每一个子串转换为整型形式放入一个新列表中

a = input()
b = a.split()
c = [int(num) for num in b]

这是一种方法,但也可以用另一种方法

a = input()
b = list(map(int, a.split()))

利用map的映射将字符串全部转换为整形后存储到新的list中
第三:
由于Python的输出默认是要换行的,但是题目中的输出是并行输出,所以我们需要在print()函数中加上end=“ ”

for i in c:
   if is_prime(i):
      print(i, end=" ")

完整代码如下:

def is_prime(xx):
    if xx < 2:
        return False
    for i in range(2, int(xx ** 0.5) + 1):
        if xx % i == 0:
            return False
    return True

a = input()
b = a.split()
c = [int(num) for num in b]

for i in c:
    if is_prime(i):
        print(i, end=" ")

4.日期计算
题目如下:
描述
输入一个日期,输出这个日期是这一年的第几天

样例
输入
2023-3-14

输出
73
首先,运用元组来定义每一个月的天数,然后写一个闰年判断函数

def is_run(year):
    if year % 400 == 0 or year % 4 == 0 and year % 100 != 0:
        return True
    return False

year = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)

这个比较简单,注意要点就上面两个,完整代码如下:

def is_run(year):
    if year % 400 == 0 or year % 4 == 0 and year % 100 != 0:
        return True
    return False

year = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)

riqi = input()
riqis = list(map(int, riqi.split('-')))
y = riqis[0]
m = riqis[1]
d = riqis[2]
day = 0
for i in range(1, m):
    if i == 2:
        if is_run(y):
            day += year[i - 1] + 1
        else:
            day += year[i - 1]
    else:
        day += year[i - 1]
day += d
print(day)

5.扑克牌游戏

import copy
import random

list1 = ['', '', '', '']
list2 = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
New_List = []
PlayerList = {}
SortPlayerList = {}
num = int(input())
seed = int(input())
# 表示对于数字列表中的每个元素,在其前面加上花色,生成一个新的扑克牌字符串
for i in list1:
    New_List = New_List + [i + item for item in list2]

New_List.append('jokers')
New_List.append('JOKERS')
List = copy.deepcopy(New_List)
print("参与游戏的人数:" + str(num))
print("新牌顺序")
print(*New_List, sep=' ')
random.seed(seed)
random.shuffle(New_List)
print("洗牌顺序")
print(*New_List, sep=' ')
print("每个人手上分到的牌")
for i in range(0, num):
    PlayerList[i] = []
    for j in range(i, len(New_List), num):
        PlayerList[i].append(New_List[j])
    print(*PlayerList[i], sep=' ')

print("每个人手上排序的牌")

for n in range(0, num):
    Temp_List = []
    for i in List:
        for j in PlayerList[n]:
            if i == j:
                Temp_List.append(i)
    SortPlayerList[n] = Temp_List
    print(*SortPlayerList[n], sep=' ')