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=' ')