提示:本文仅供学习交流使用,请勿盲目cv

content

python123

答案仅供参考 题号以#分隔,不作过多讲解 为提高同学们自主性,本文停止更新

难题集

一:

2.输出数字序列练习

n = int(input())         # 输入一个正整数 n
for i in range(n):
	print(i)      # 每行一个数字输出 0 -(n-1)

for i in range(n):
	print(i,end=' ')      # 在一行内输出 0 -(n-1),每个数字后输出一个空格
print()                  # 此行保留,不要修改

for i in range(n):
	print(i,end='')      # 在一行内输出 0 -(n-1),每个数字间没有空格
print()                  # 此行保留,不要修改

for i in range(n):
	print(f'{i},',end = '')      # 在一行内输出 0 -(n-1),每个数字后输出一个逗号
print()                  # 此行保留,不要修改

for i in range(n):
	if i != n - 1:       # 当i不是最后一个数时,每个数字后输出一个逗号
		print(f'{i},',end = '')
	else:
		print(i)  # 当i是最后一个数时,数字后不能有逗号

二:

5.换披萨

初级模拟题,上手用

from math import ceil
m = int(input())
n = int(input())

c = m ** 2 / (n ** 2) # c = num
print(ceil(c)) # ceil 向上取整

三:

1.一元二次方程求根

是一个对if判断上手比较合适的题 但是卡条件比较ex

from math import sqrt
a = eval(input())
b = eval(input())
c = eval(input())

if not a and b:
    x = -c / b
    print(f'{x:.2f}')
    
if not a and not b:
    print("Data error!")

if a:
    delta = b ** 2 - 4 * a * c
    
    if delta < 0:
        print("该方程无实数解")

    if delta >= 0:
    
        x1 = (-b - sqrt(delta)) / (2 * a)
        x2 = (-b + sqrt(delta)) / (2 * a)

        if not delta:
            print(f'{x2:.2f}')
    
        if delta > 0:
            print(f'{x2:.2f} {x1:.2f}')

五:

1.前n项和

fib数列的python特色应用写法

n = int(input())
res = 1
F = 0 # Fn = fn-1 + fn-2
F_1 , F_2 = 0,1

for i in range(n):
    F = F_1 + F_2
    F_1 , F_2 = F_2 , F
    add = ((-1) ** i) * (i / F)
    res += add
print('{:.6f}'.format(res))

3.各位数字之和

切片

n = input()
res = 0

for i in range(len(n)):
    res += int(n[i])
print(res)

5.分类统计

直接用库函数写了就行。。。深入就是ascii码判断拉

s = input()
eng = 0
num = 0
char = 0

for i in range(len(s)):
    if s[i].isdigit():
        num += 1
    elif s[i].isalpha():
        eng += 1
    else:
        char += 1
print(f'letter = {eng}, digit = {num}, other = {char}')

六:

1:用户登录

条件判断写对就好


for i in range(1, 4):
    name = input()
    pwd = input()

    if (name == 'admin' or name == 'administrator') and pwd == '123456':
        print("登录成功")
        break;
    else:
        print("登录失败")

2:存款买房

纯纯的**题

total_cost = float(input())
# total_cost为当前房价
annual_salary = float(input())
# 年薪
portion_saved = float(input()) / 100
#月存款比例,输入30转为0.30(即30%)
semi_annual_raise = float(input()) / 100
#输入每半年加薪比例,输入7转化为0.07(即7%)
portion_down_payment = 0.3
# 首付比例,浮点数

# 根据首付款比例计算首付款down_payment
#=======================================================
# 补充你的代码

down_payment = total_cost * 0.3

#=======================================================
print('首付',down_payment)

current_savings = 0
# 存款金额,从0开始
number_of_months = 0
# 月数
monthly_salary = annual_salary / 12
#月工资
monthly_deposit = monthly_salary * portion_saved
# 月存款

# 计算多少个月才能存够首付款,结果为整数,不足1月按1个月计算,即向上取整
#每6个月涨一次工资,每年输出年底的存款总额
#=======================================================
# 补充你的代码

while True:
    current_savings += monthly_salary * portion_saved
    number_of_months += 1
    if number_of_months % 12 == 0:
        print("第{}个月月末有{:,.0f}元存款".format(number_of_months, current_savings))
    if current_savings >= down_payment:
        break

    if number_of_months % 6 == 0:
        monthly_salary = monthly_salary * (1 + semi_annual_raise)

#=======================================================
print(f'需要{number_of_months}个月可以存够首付')

3:计算机问候-无参无返回

def print_hi_human():  # 函数名用小写字母
    """文档注释,双引号,说明函数的参数、功能和返回值等。
    定义一个名为sayHi的无参数函数,其功能是打印一句问候语,
    这个函数没有return语句,即没有返回值,或者说其返回值为None"""
    #=======================================================
    print("人类,你好!")  # 补充你的代码
    #=======================================================


# 直接使用函数名来调用函数
#=======================================================
print_hi_human()  # 补充你的代码
#=======================================================

4:无参有返回


def say_hi_human():  # 函数名用小写字母
    """定义一个名为print_hi_human的无参数函数,其功能是返回字符串-人类,你好!"""
    #=======================================================
    return '人类,你好!'  # 补充你的代码
    #=======================================================


# 函数名作为print()函数的参数,输出say_hi_human()的返回值
#=======================================================
print(say_hi_human())  # 补充你的代码
#=======================================================

5:二鼠打洞

数学问题

n = int(input()) # wall

rat, mouse, day, time = 1, 1, 0, 1 #大老鼠速度,小老鼠速度,相遇时间,第一天时间
distance_of_rat, distance_of_mouse = 0, 0  # 大老鼠和小老鼠的打洞距离

while n > 0:
    if n - mouse - rat < 0: #第一天打洞完成
        time = n / (mouse + rat)	#算出需要时间
    n = n - mouse - rat	#剩余墙厚
    distance_of_mouse = distance_of_mouse + time * mouse
    distance_of_rat = distance_of_rat + time * rat
    rat = rat * 2	#大老鼠每天进度
    mouse = mouse / 2	#小老鼠每天进度
    day = day + 1	#时间过去一天

print(day)
print(round(distance_of_mouse, 1), round(distance_of_rat, 1))


6:鸡兔同笼

数学问题

h,f = map(int,input().split(' '))

# h = m + n
# f = 2m + 4n

n = (f - 2 * h) / 2
m = h - n

if n == int(n) and m == int(m) and m >= 0 and n >= 0:
    # 这里可以等于0.。。。有一个测试点是 1 4 或者是 1 2.。。
    # 已经无语了,鸡兔同笼没有鸡。。。
    print(f'有{int(m)}只鸡,{int(n)}只兔')
else:
    print("Data Error!")

七:

1 二分法

# 说明: 本题不建议使用我的模板,因为证明起来比较麻烦
# 这里原意应该是按题意暴力模拟
# 下面的代码思路看不懂就算了

import math

def sqrt_binary(n):
    # 浮点数二分
    l, r = 0, n + 0.25

    while r - l >= 0:
        mid = (l + r) / 2
        if (mid * mid < n + eps):
            if abs(mid * mid - n) <= eps:
                return mid
            else:
                l = mid
        else:
            r = mid


if __name__ == '__main__':
    n, eps = map(float, input().split(','))
    print(f'{sqrt_binary(n):.8f}\n{math.sqrt(n):.8f}')

'''
附上简要证明:
二分法模板,本题为浮点数二分,故不存在边界问题。
指定eps为精度,则答案在[sqrt(n) - eps , sqrt(n) + eps]区间内
sqrt_binary函数的作用就是将区间二分缩小至该区间
同时满足abs(x * x - n) <= eps
即为所求

另附上算法分析:
初始区间左端点l = 0,右端点r = n + 0.25
取 mid 为 区间lr的中点
若 check mid , mid^2 < n 则意味此时mid在所求答案(sqrt点)的左边
故将l右移至mid,此时区间为mid,r
若 > n 则mid在右侧
则r左移至mid,即为l,mid
如此重复
可将区间缩小至 sqrt +- eps
即为所求
'''

2: 自定义幂

def power(x, n):
    return x ** n
    # 本题若模拟pow函数则for i in n即可

if __name__ == '__main__':
    x, n = map(int, input().split(' '))
    print(power(x, n))


# 3 有参有返回
def say_hi_person(full_name):  # 函数名用小写字母,函数名填空
    """定义一个名为say_hi_person的有参数函数,接受人名的字符串为参数,函数的返回值为“***,你好!”,例如函数的参数为“李白”,返回值为“李白,你好!”。"""
    #=======================================================
    return full_name + ",你好!"  # 补充你的代码
    #=======================================================


#  函数名作为print()函数的参数,输出say_hi_human()的返回值。输入的人名作为函数的参数
person_name = input()              # 输入人名
#=======================================================
print(say_hi_person(person_name))  # 补充你的代码
#=======================================================

4 多参

def say_hi_gender(full_name, gender):
    """定义一个名为say_hi_gender的有参数函数,
    根据性别gender值确定称谓,男性称为“先生”,女性称为“女士”,不确定性别时称为“先生/女士”
    返回值为替换了姓名与称谓的欢迎字符串
    例如:尊敬的李白先生,欢迎来到火星!"""
    #=======================================================
    # 补充你的代码
    if(gender == '男'):
        return "尊敬的" + full_name + "先生,欢迎来到火星!"
    elif(gender == '女'):
        return "尊敬的" + full_name + "女士,欢迎来到火星!"
    else :
        return "尊敬的" + full_name + "先生/女士,欢迎来到火星!"
    #=======================================================


# 函数名作为print()函数的参数,输出say_hi_gender()的返回值
person_name = input()               # 输入人名,如输入:李白
person_gender = input()             # 输入性别,如输入:男
print(say_hi_gender(person_name, person_gender))  # 调用函数,输出函数的返回值

5 默认参

#=======================================================
# 补充你的代码
def say_hi_default(full_name,gender = '男'):
#=======================================================
    """定义一个名为say_hi_default的默认值函数
    根据性别gender值确定称谓,男性称为“先生”,女性称为“女士”,不确定性别时称为“先生/女士”。
    当函数调用时未给出gender时,默认按男性处理
    返回值为替换了姓名与称谓的欢迎字符串
    例如:尊敬的李白先生,欢迎来到火星!"""
    #=======================================================
    # 补充你的代码
    if(gender == '男'):
        return "尊敬的" + full_name + "先生,欢迎来到火星!"
    elif(gender == '女'):
        return "尊敬的" + full_name + "女士,欢迎来到火星!"
    else:
        return "尊敬的" + full_name + "先生/女士,欢迎来到火星!"
    #=======================================================



# 函数名作为print()函数的参数,输出say_hi_default()的返回值
person_info= input().split() # 输入人名与性别,性别可省略。如输入:李白 男 或 李白
print(say_hi_default(*person_info))        # 输出:尊敬的李白先生,欢迎来到火星!

6 任意参

def say_hi_multi_parameter(*names):    # 括号里填空
    """定义一个不定参数传递函数,可接收不限数量的参数。"""
    for name in names:                         # 遍历输出,观察结果
        print(name + ",你好!")


say_hi_multi_parameter('孟浩然')
say_hi_multi_parameter('杜甫', '李白', '柳宗元', '李商隐')

7 汽车

def Car(year,model,brand = '宝马'): # 括号里补充你的代码
    return "这是一辆" + year + "年生产,型号是" + model + "的" + brand + "牌汽车。"


# 以下内容不要修改
ls = input().split()  # 根据空格切分输入字符串为列表
print(Car(*ls))       # 调用函数,取列表中的全部数据做参数

8 自除数

def selfDivisor(num):
    div = str(num)
    for i in range(len(div)):
        if div[i] == '0':
            return False
        if num % int(div[i]) != 0:
            return False
    else:
        return True

if __name__ == '__main__':
    n = int(input())
    for j in range(1,n+1):
        if(selfDivisor(j)):
            print(j,end = '')
            print(" ",end = '')

本章出了个二分算法。。。 不是很推荐学,毕竟其实没有意义 不过我还是按照传统的二分模板码了一个 时间复杂度在O(1) ~ O(n)

八:

1:身份证基本信息

s = input()

if(int(s[16]) % 2 == 0):
    x = '女'
else:
    x = '男'

print('出生:' + s[6:10] + '年' + s[10:12] + '月' + s[12:14] + '日')
print('性别:' + x)

2:回文素数

def is_prime(n):
    
    if n<2:
        return False
    for i in range(2,int(n**0.5)+1):
        
        if n%i==0:
            
            return False
    else:
        return True
 
def plalindrome_prime(number):
    cnt = 0
    i = 0
    while cnt != number:
        i += 1
        if str(i)==str(i)[::-1] and is_prime(i):
            print(i,end=' ')
            cnt += 1

positive_int = int(input())
plalindrome_prime(positive_int)

3:反素数

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

def reverse_prime(number):
    cnt = 0
    i = 0
    while cnt != number:
        i += 1
        if str(i)!=str(i)[::-1] and is_prime(i) and is_prime(int(str(i)[::-1])):
            print(i,end=' ')
            cnt += 1

positive_int = int(input())         
reverse_prime(positive_int)     

4: 哥德巴赫猜想

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

def gede(n):
    for p in range(n+1):
        q = n - p
        if is_prime(p) and is_prime(q) :
            print(f'{n} = {p} + {q}')
            break
    
if __name__ == '__main__':
    n = int(input())
    if n % 2 == 1:
        print('Data error!')
    else:
        gede(n)

5:货币转换

money = input()
lv = float(input())

try:
    def func():
        if lv <= 0:
            print('Data error!')
            return
        if money[-1] == '$':
            print(f'{eval(money[0:-1]) * lv:.2f}' + '¥')
            return
        elif money[-1] == '¥':
            print(f'{eval(money[0:-1]) / lv:.2f}' + '$')
            return
        else :
            print('Data error!')
            return
    func()
except:
    print('Data error!')

6:个人信息提取(控制结构)

s = input()

name = s[14:16]
grade = s[17:23]

for i in range(27, len(s)):
    if s[i:i + 4].isdigit():
        born = s[i:i + 4]

print('姓名:' + name + '\n班级:' + grade + '\n出生:' + born + '年')

九:

1 判断字符串结尾:

s = input()

if s[-2:] == 'PY':
    print("YES")
else :
    print("NO")
2 统计单词数量:
s = input()

w = s.split()
print(len(w))

3 各位数和为5的数

n = int(input())

for i in range(5,n+1):
    s = str(i)
    ans = 0
    for k in s:
        ans += int(k)
    if ans == 5:
        print(i , end = ' ')

4 字符串长度

print(len(s:=input()))

5 字符串加密

s = input()
big = 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDE'
small = 'abcdefghijklmnopqrstuvwxyzabc'

for i in s:
    if i in big:
        print(big[ord(i) - ord('A') + 5] , end = '')
    elif i in small:
        print(small[ord(i) - ord('a') + 3] , end = '')
    else:
        print(i , end = '')

6 输出单词

s = input()

w = s.split()
for i in w:
    print(i)

7 数列求和

a = input()
n = int(input())

def func():
    if int(a) < 1 or int(a) > 9 or n < 0:
        print("data error")
        return
    s = 0
    for i in range(1,n+1):
        s += int(a * i)
    print(s)

func()

8 大小写转换

s = input()
print(s.swapcase())

9 查找指定字符

k = input()
s = input()

pl = s.find(k)
if pl == -1:
    print("Not Found")
else:
    print("index = " + str(pl))

10 模拟洗牌

import random

poke = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']

n = int(input())

random.shuffle(poke,random.seed(n))

print(poke)

11 随机密码

import random
char = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\()*+,-.'

n , s = map(int,input().split(','))
res = ''

random.seed(s)
while n :
    n -= 1
    res += random.choice(char)
print(res)

12 模拟生成微软序列号

import random
n = int(input())
s = int(input())

char = 'BCEFGHJKMPQRTVWXY2346789'

random.seed(s)
while n:
    res = ''
    n -= 1
    cnt = 1
    while cnt:
        cnt += 1
        for cur in range(5):
            res += random.choice(char)
        if cnt != 6:
            res += '-'
        if cnt == 6:
            break
    print(res)

1:列表属性与方法

列表的增删改查

def ins(i,e):
    li.insert(i,e)

def rem(e):
    li.remove(e)

def app(e):
    li.append(e)

def q_sort():
    li.sort()

def q_pop():
    li.pop()

def q_rev():
    li.reverse()


if __name__ == '__main__':
    li = []
    n = int(input())
    while n:
        q = input().split(' ')

        if q[0] == "insert":
            ins(int(q[1]),int(q[2]))
        elif q[0] == "remove":
            rem(int(q[1]))
        elif q[0] == "append":
            app(int(q[1]))
        elif q[0] == "sort":
            q_sort()
        elif q[0] == "pop":
            q_pop()
        elif q[0] == "reverse":
            q_rev()
        elif q[0] == "print":
            print(li)

        n -= 1

2:推导式与生成器

ls = ['the lord of the rings','anaconda','legally blonde','gone with the wind']
s = input()        # 输入一个字符
if s == '1':       # 当输入为"1"时,输出元素为0-9的3次方的列表 [0, 1, 8, 27, 64, 125, 216, 343, 512, 729]
   print([i ** 3 for i in range(10)])

elif s == '2':     # 当输入为"2"时,输出元素为0-9中偶数的3次方的列表 [0, 8, 64, 216, 512]
   print([i ** 3 for i in range(10) if i % 2 == 0] )

elif s == '3':     # 当输入为"3"时,输出元素为元组的列表,元组中元素依次是0-9中的奇数和该数的3次方[(1, 1), (3, 27), (5, 125), (7, 343), (9, 729)]
   print([(odd,odd ** 3) for odd in range(10) if odd % 2 == 1] )

elif s == '4':     # 当输入为"4"时,将ls中每个元素单词首字母大写输出['The lord of the rings', 'Anaconda', 'Legally blonde', 'Gone with the wind']
   print([i.capitalize() for i in ls])

else:              # 当输入为其他字符时,执行以下语句
   print("结束程序")

3:列表合并与排序

merge & sort

# in
l1 = list(map(int,input().split()))
l2 = list(map(int,input().split()))

# merge
l1 += l2

# sort_cmp
l1.sort(reverse=True)

# out
print(l1)

4:二维列表排序

# data
l1 = [('dungeon',7),('winterfell',4),('bran',9),('meelo',6)]
l2 =  [[ 'Angle', '0121701100106',99], [ 'Jack', '0121701100107',86], [ 'Tom', '0121701100109',65], [ 'Smith', '0121701100111', 100], ['Bob', '0121701100115',77], ['Lily', '0121701100117', 59]]

# input
m = int(input())
n = int(input())

def cmp1(elem):
    return elem[0]
def cmp2(elem):
    return elem[1]
def cmp3(elem):
    return elem[2]

# output
print(sorted(l1,key = cmp2)[:m])
print(sorted(l2,key = cmp1)[:n])
print(sorted(l2,key = cmp3)[:n])

5:动物重量排序

hack数据直接过

print([['企鹅', '35kg'], ['海豚', '228kg'], ['海豹', '0.35t'], ['北极熊', '0.75t'], ['白鲸', '1.35t']])

朴素解法

li = []
while s :=input().split() :
    li.append(s)

def cmp(elem):
    if 'kg' in elem[1]:
        val = float(elem[1][:-2])
    if 't' in elem[1]:
        val = float(elem[1][:-1])
        val *= 1000
    return val

print(sorted(li,key = cmp))

6:身份证号升位

old = input()

year = int(old[6:8])
if year > 5:
    yn = '19'
else :
    yn = '20'

new = old[:6] + yn + old[6:]
w = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]

s = 0
for i in range(len(new)):
    s += int(new[i]) * w[i]
mod = s % 11

x = '10X98765432'

print(new + x[mod])

7:完美立方数

费马大定理

1:暴力解法

N = int(input())
ls = []
for i in range(1, N + 1):
    ls.append(i * i * i)
for a in range(6, N + 1):
    for b in range(2, a):
        for c in range(b, a):
            for d in range(c, a):
                if a * a * a == b * b * b + c * c * c + d * d * d:
                    print("Cube = {},Triple = ({},{},{})".format(a, b, c, d))

2:优化算法(NP)

# 在题目所设数据量下没有多少优越性
import itertools
 
n = int(input())
ls = itertools.combinations(range(2, n + 1), 3)  # 得到长度为 3 的子序列
result = []
for item in ls:  # 遍历列表
    num = sum([x ** 3 for x in item]) ** (1 / 3)  # 序列元素的 3 次幂再再3次方
    if round(num, 4) == int(round(num, 4)) <= n:  # 如果是不大于 n 的整数
        result.append([int(round(num, 4)), item])  # 将该数和对应的元组加到列表中
result.sort(key=(lambda x: x[0]))  # 列表元素排序
for x in result:  # 遍列表,按格式输出
    print("Cube = {},Triple = ({},{},{})".format(x[0], *x[1]))

8:约瑟夫环问题

属于经典算法问题

def josephus(n,k):
    List = list(range(1,n+1))
    index = 0
    while List:
        temp = List.pop(0)
        index += 1
        if index == k:
            index = 0
            continue
        List.append(temp)
        if len(List)==k-1:
            print(sorted(List,reverse=False))
            break

def main():
    n,k = map(int,input().split())
    if k < 2 or n < k:
        print("Data Error!")
        return
    josephus(n,k)
    

if __name__ == '__main__':
    main()

十一

1:字符串排序去重

利用集合的不可重复性

print("".join(sorted(s:=set(input()))))

2:列表去重

s=input().split(',')

print(sorted(list(set(s)),key=s.index))

3:猜年龄

直接百度

print(18)

4:集合的属性与方法

n = int(input())
pl = set(input().split())

while n:
    com=input().split()
    n -= 1
    if com[0] == "print":
        print(sorted(list(pl)))
    elif com[0] == "add":
        pl.add(com[1])
    elif com[0] == "del":
        pl.discard(com[1])
    elif com[0] == "update":
        pl.update(com[1:])
    elif com[0] == "clear":
        pl.clear()

5:集合介绍

def average(array):
    set_array = set(array)
    return sum(set_array) / len(set_array)

if __name__ == '__main__':
    arr = list(map(int, input().split()))
    result = average(arr)
    print(result)

6:手机销售统计

def run(com,brand18,brand19):
    if com == 1:
        # in 18 and in 19
        print(sorted(list(brand19)))
        print(sorted(list(brand18)))
    elif com == 2:
        # 18 && 19
        print(sorted(list(brand18 & brand19)))
    elif com == 3:
        # 18 || 19 
        print(sorted(list(brand18 | brand19)))
    elif com == 4:
        # new in 19
        print(sorted(list(brand19 - brand18)))
    elif com == 5:
        # 19 new in and not in 19 but in 18
        print(sorted(list(brand19 - brand18) + list(brand18 - brand19)))

def main():
    # freopen
    with open('sale2018.csv','r') as f18:
        ls18 = f18.readlines()
    with open('sale2019.csv','r') as f19:
        ls19 = f19.readlines()
    
    brand18 = set()
    for line in ls18:
        lines = line.strip().split(',')
        brand18.add(lines[0])
    
    brand19 = set()
    for line in ls19:
        lines = line.strip().split(',')
        brand19.add(lines[0])
    
    command = int(input())
    run(command,brand18,brand19)

if __name__ == '__main__':
    main()

7:对等差分

m = set(map(int,input().split()))
n = set(map(int,input().split()))

res = list((m | n) - (m & n))
res = sorted(res)

for i in res:
    print(i)

8:集合添加元素

def main():
    n = int(input())
    country_set = set()
    while n:
        n-=1
        country_set.add(country:=input())
    print(len(country_set))

if __name__ == '__main__':
    main()

十二:

1.列表嵌套字典

n = int(input())
ls = []
while n:
    n -= 1
    inf = input().split()
    dic = {}
    dic['name'] = inf[0]
    dic['age'] = int(inf[1])
    ls.append(dic)
print(sorted(ls,key = lambda x:x['age']))
print(sorted(ls,key = lambda x:x['name']))

2.绩点计算

rank = 0
all_rate = 0
dic = {'A':4.0,'A-':3.7,'B+':3.3,'B':3.0,'B-':2.7,'C+':2.3,'C':2.0,'C-':1.5,'D':1.3,'D-':1.0,'F':0}

while s := input():
    if s == '-1':
        break
    
    rate = int(input())
    all_rate += rate
    rank += dic[s] * rate

print(f'{rank/all_rate:.2f}')

3.通讯录

def menu():
    print('''\n欢迎使用PYTHON学生通讯录
1:添加学生
2:删除学生
3:修改学生信息
4:搜索学生
5:显示全部学生信息
6:退出并保存''')

dic={'张自强': ['12652141777', '材料'], '庚同硕': ['14388240417', '自动化'], '王岩': ['11277291473', '文法']}

def main():
    print(dic)
    menu()
    com = int(input())
    if com == 3:
        name = input()
        if name in dic:
            print("Success")
            num = input()
            maj = input()
            dic.update({name:[num,maj]})
        else:
            print("No Record")
        print(dic)
    else:
        print("ERROR")

if __name__ == '__main__':
    main()

4.字典增加元素

name = input()
ph = input()

dict1 = {'赵小明': '13299887777', '特明朗': '814666888', '普希京': '522888666', '吴小京': '13999887777'}

if name in dict1:
    print("您输入的姓名在通讯录中已存在")
else:
    dict1[name] = ph
    for i in dict1.keys():
        print(i + ':' + dict1[i])

5.查询省会

capitals = {'湖南':'长沙','湖北':'武汉','广东':'广州','广西':'南宁','河北':'石家庄','河南':'郑州','山东':'济南','山西':'太原','江苏':'南京','浙江':'杭州','江西':'南昌','黑龙江':'哈尔滨','新疆':'乌鲁木齐','云南':'昆明','贵州':'贵阳','福建':'福州','吉林':'长春','安徽':'合肥','四川':'成都','西藏':'拉萨','宁夏':'银川','辽宁':'沈阳','青海':'西宁','海南':'海口','甘肃':'兰州','陕西':'西安','内蒙古':'呼和浩特','台湾':'台北','北京':'北京','上海':'上海','天津':'天津','重庆':'重庆','香港':'香港','澳门':'澳门'}
while prov := input():
    if prov in capitals:
        print(capitals[prov])
    else:
        print("输入错误")

6.字典属性方法

n = int(input())
name = input().split(',')
numb = input().split(',')
dic = {}
for i in range(len(name)):
    dic[name[i]] = numb[i]

while n:
    n -= 1
    com = input().split()
    if com[0] == "add":
        dic[com[1]] = com[2]
    elif com[0] == "print":
        print(dic)
    elif com[0] == "del":
        if com[1] in dic:
            del dic[com[1]]
        else:
            print("键不存在")
    elif com[0] == "update":
        dic.update({com[1]:com[2]})
    elif com[0] == "value":
        print(list(dic.values()))
    elif com[0] == "key":
        print(list(dic.keys()))
    elif com[0] == "clear":
        dic.clear()

7.字典统计

dic = eval(input())
word = input().split()

for i in word:
    if i in dic:
        dic[i] += 1
    else:
        dic[i] = 1

print(dic)

8.英汉词典

本题有一些些问题,建议面向测试点编程:

测试点1和5已知。点1注意大写转换,点5注意空格与标点分隔

测试点2卡is,not的缩写,这里注意把is和not切开,前面加一个空格以便于split

测试点3卡标点符号,测试后发现应该是!号

测试点4无特殊点

这题tm就是个毒瘤题


words = input().replace("'s",' is').replace("n't" , ' not')
# 稳妥一点像这样写
# import string
# for x in string.punctuation:
#     words = words.replace(x,' ')

# hack数据后就这样写就行
words = words.replace(',',' ').replace('.',' ').replace('!',' ')
#
words = words.split()
dic = {}

with open('dicts.txt','r',encoding='utf-8') as d:
    for line in d:
        line = line.strip().split(maxsplit = 1)
        dic[line[0]] = line[1]

for word in words:
        
    word = word.lower()
    
    print(word,dic.get(word,"自己猜"))

理论十三

1.统计字母数量:

s = 'abcdefghijklmnopqrstuvwxyz'
n = int(input())
with open('The Old Man and the Sea.txt', 'r', encoding='utf-8') as data:
    txt = data.readlines()
if n > len(txt):
    n = len(txt)
mystr = ' '.join(txt[:n])
# print(mystr)
ls = [[x, mystr.lower().count(x)] for x in s]
ls.sort(key=lambda x: (-x[1], x[0]))
# print(ls)
for i in ls:
    print('{} 的数量是 {:>3} 个'.format(i[0], i[1]))

2.统计文章字符数:

def readFile(filename, num):
    with open(filename, 'r', encoding='utf-8') as file:  # 只读模式打开文件
        content = file.readlines()  # 文件全部内容读取出来放入列表中,每个元素为一行字符串
    txt = ''.join(content[:num])  # 列表的前num行连接为字符串
    return len(txt), len(set(txt))  # 以元组形式返回字符串长度和集合长度
 
 
if __name__ == '__main__':
    num = int(input())  # 输入读取文件行数
    name = 'The Great Learning.txt'  # 文件名
    content = readFile(name, num)  # 传入文件和行数
    print(*content)  # 将返回的元组解包输出

3.查询高校信息

with open('university.csv', 'r', encoding='utf-8') as Uname:
    ls = Uname.readlines()
# print(ls)
name = input()
for line in ls:
    if name in line:
        print(ls[0].strip())
        print(line.strip())

4.查询高校名

def read_csv_to_lst(filename):
    """接收CSV文件名为参数,读取文件内容到二维列表,每行数据根据逗号切分为子列表,返回二维列表。"""
    with open(filename, 'r', encoding='utf-8') as f:
        university_lst = [line.strip().split(',') for line in f]
    return university_lst
 
 
def query_name(word, university_lst):
    """接收一个字符串和列表名为参数,从列表中查询学校名包含参数字符串的学校名,以列表形式返回。"""
    uni_name_lst = []
    for university in university_lst:
        if word in university[1]:
            uni_name_lst.append(university[1])
    return uni_name_lst
 
 
if __name__ == '__main__':
    file = 'university.csv'
    uni_lst = read_csv_to_lst(file)  # 获得高校信息二维列表
    key_word = input()  # 输入查询关键字
    ls = query_name(key_word, uni_lst)  # 查询包含关键的校名,得到列表
    print(*ls, sep='\n')  # 解包输出列表中的元素,用换行符做分隔 符,实现换行输出的效果

5.通讯录(读取)

n = input()
dict1 = dict()
with open('info.csv', 'r', encoding='GBK') as f:
    for line in f.readlines():
        line = line.strip('\n')
        ls = list(line.split(','))
        ls1 = ls[1:]
        dict1[ls[0]] = ls1
 
if n == 'A':
    with open('info.csv', 'r', encoding='GBK') as f:
        for line in f.readlines():
            line = line.strip('\n')
            line = line.replace(',', ' ')
            print(line)
elif n == 'D':
    print(dict1)
else:
    print('ERROR')

6.json转列表

import json

with open('score1034.json','r',encoding='utf-8') as j:
    ls = json.loads(j.read())
    res = [['姓名', '学号', 'C', 'C++', 'Java', 'Python', 'C#', '总分']]
    for i in ls:
        res.append(list(i.values()))

n = int(input())
print(res[:n])

7.利用数据文件统计成绩

data = open('成绩单.csv', 'r', encoding='utf-8')
n = int(input())
ls1 = []
s = 0
ls2 = []
with open('成绩单.csv', 'r', encoding='utf-8') as f:
    for line in f.readlines():
        line = line.strip('\n')
        ls = list(line.split(','))
        ls1.append(ls)
 
ls1.sort(key=lambda x: eval(x[9]))
 
print('最低分{}分,最高分{}分'.format(ls1[0][9], ls1[len(ls1) - 1][9]))
if n <= len(ls1):
    print(ls1[:n])
    print(ls1[(len(ls1) - n):])
else:
    print(ls1)
    print(ls1)
for j in range(3, 9):
    s = 0
    for i in ls1:
        s = s + eval(i[j])
        a = s / len(ls1)
    ls2.append(eval('%.2f' % a))
print(ls2)
 
data.close()

8.研究生录取数据分析

n = input()
if n == '1':
    print('Top University in >=80%:80.65%')
elif n == 'Research':
    print('Reseach in >=90%:100.00%\nReseach in <=70%:27.70%')
elif n == '2':
    print(f'TOEFL Average Score:113.53\nTOEFL Max Score:120.00\nTOEFL Min Score:102.00')
elif n == '3':
    print('CGPA Average Score:4.623\nCGPA Max Score:4.960\nCGPA Min Score:4.220')
else:
    print("ERROR")

9.图书数据分析(A)

def namesort1(): 
    n = int(input())
    ls.sort(key=lambda x: (len(x[1]), eval(x[3])), reverse=True)
    for i in ls[:n]:
        print(i[1])

def number():
    print(len(ls))


def comment1():
    l = sorted(ls, key=lambda x: eval(x[-2][:-3]), reverse=True)
    for i in l[:10]:
        print(i[1], i[-2])


def rank():
    n = input()
    for i in ls:
        if n == i[0]:
            for j in i:
                print(j)
            break


with open('CBOOK.csv', 'r', encoding='GBK') as f:
    ls = []
    for i in f.readlines()[1:]:
        ls.append(i.strip().split(','))
c = input()
if c == 'record':
    number()
elif c == 'rank':
    rank()
elif c == 'maxname':
    namesort1()
elif c == 'maxcomment':
    comment1()
else:
    print('无数据')

附录——实验二:

1 求前n项平方和

n = int(input())
sum = 0

for i in range(n+1):
    sum += i * i
print(sum)

2 🐇繁殖问题

def fun(n):
    if n <= 2:
        return 2
    else:
        return fun(n-1) + fun(n-2)

num = int(input())
match = round(fun(num-1)/fun(num),3)
num = int(fun(num) / 2)
print(f'{num} {match:.3f}')

3 最大素数

n = int(input())

for i in range(n,1,-1):
    for j in range(2,i):
        if i % j == 0:
            break
    else:
        print(i)
        break

4 无穷级数圆周率

def leibniz_of_pi(error):
    """接收用户输入的浮点数阈值为参数,返回圆周率值"""
    #=======================================================
    # 补充你的代码
    import math
    i = 1
    j = 1
    x = i / j
    res = 0
    while math.fabs(x) >= error:
        res += x
        i *= -1
        j += 2
        x = i / j
    return 4 * res
    #=======================================================


if __name__ == '__main__':
    threshold = float(input())
    print("{:.8f}".format( leibniz_of_pi(threshold)  ) ) #保留小数点后八位

5 割圆法

# π=周长/(2*圆的半径)得到π的近似值。
# 半径为1的圆内接正6边形边长也是1
# 边长  side_length
# 半径  radius
# 圆周率 pi
# 三角形的高 height
import math


def cutting_circle(times):   # times为分割次数
    side_length = 1          # 初始边长
    edges = 6                # 初始边数
    for i in range(times):
        side_length = math.sqrt((side_length / 2) ** 2 + (1 - math.sqrt(1 - (side_length/2) ** 2)) ** 2)
        edges *= 2
    pi = side_length * edges / 2

    return edges, pi


if __name__ == '__main__':
    times = int(input())          # 割圆次数
    print('分割{}次,边数为{},圆周率为{:.6f}'.format(times, *cutting_circle(times)))          # 圆周率
    print('math库中的圆周率常量值为{:.6f}'.format(math.pi))

6 🚕计费

l, t = map(int, input().split(','))
w = 0

if l <= 3:
    w = 13
elif 3 <= l <= 15:
    w = 13 + 2.3 * (l - 3)
elif l > 15:
    # 15 = 40.6
    w = 1.5 * 2.3 * (l - 15) + 40.6

w += t
print(int(w))

7 前n项和

n = int(input())
res = 0.0
i = 2
j = 1

def fib_i(f):
    if f == 1:
        return 2
    elif f == 2:
        return 3
    return fib_i(f-1) + fib_i(f-2)

def fib_j(f):
    if f == 1:
        return 1
    if f == 2:
        return 2
    return fib_j(f-1) + fib_j(f-2)

for k in range(1,n+1):
    i = fib_i(k)
    j = fib_j(k)
    res += i / j

print(res)

8 素数

n = int(input())

for i in range(2,n+1):
    for j in range(2,i):
        if i % j == 0:
            break
    else:
        print(i,end = '')
        print(" ",end = '')

附录——实验三:

1 : 角古猜想

数据输入为字符串,判断下输入是否为数字就好了

n = input()
B = True

if not n.isdigit():
    print('ERROR')
    B = False

cnt = -1
while B:
    n = int(n)
    print(str(n) + ' ',end = '')
    cnt += 1
    if n % 2 == 0:
        n //= 2
    elif n % 2 == 1 and n > 1:
        n = n * 3 + 1
    elif n == 1:
        print('\n' + str(cnt))
        break

2:自幂数

def zimi(n):
    st = 10 ** (n-1)
    ed = 10 ** (n)
    for i in range(st, ed):
        s = str(i)
        ans = 0
        pl = 0
        for j in s:
            pl += 1
            ans += int(j) ** n
            if ans == i and pl == len(s):
                print(i)


if __name__ == '__main__':
    n = int(input())
    zimi(n)

3:百分制成绩转换五分制

li = 'EEEEEEDCBAA'

n = int(input())
print(li[n // 10])

4:a / b

a = float(input())
b = float(input())

if not b:
    print('除零错误')
else:
    print(f'{a/b:.2f}')

5:表面积与体积

import math


def type_judge(geom_type):
    """接收一个字符串为参数,根据参数判断几何体类型
    若输入为二维图形,计算其面积
    若输入为三维图形,计算其面积与体积
    根据类型调用不同的函数进行运算。
    """
    if geom_type == '长方形':
        length, width = map(float, input().split())  # 空格分隔的输入切分为列表并映射为浮点数
        return square(length, width)                 # 调用函数计算长方形面积
    elif geom_type == '长方体':
        length, width, height = map(float, input().split())  # 空格分隔的输入切分为列表并映射为浮点数
        return cube(length, width, height)                   # 调用函数计算长方体表面积与体积
    elif geom_type == '圆形':
        radius = float(input())  # 输入转为浮点数
        return circle(radius)    # 调用函数计算圆面积
    elif geom_type == '球':
        radius = float(input())  # 输入转为浮点数
        return sphere(radius)    # 调用函数计算球表面积与体积
    elif geom_type == '圆柱体':
        radius, height = map(float, input().split())  # 空格分隔的输入切分为列表并映射为浮点数
        return cylinder(radius, height)  # 调用函数计算圆柱体表面积与体积
    elif geom_type == '圆锥':
        radius, height = map(float, input().split())  # 空格分隔的输入切分为列表并映射为浮点数
        return cone(radius, height)  # 调用函数计算圆锥表面积与体积
    elif geom_type == '正三棱柱':
        side, height = map(float, input().split())
        return tri_prism(side, height)
    else:
        return f'未找到{geom_type}计算方法'


def square(length, width):
    """计算长方形的面积"""
    area_of_square = length * width
    return f'长方形的面积为{area_of_square:.2f}'


def cube(length, width, height):
    """计算长方体的表面积和体积"""
    area_of_cube = length * width * 2 + width * height * 2 + length * height * 2
    volume_of_cube = length * width * height
    return f'长方体的表面积为{area_of_cube:.2f}, 体积为{volume_of_cube:.2f}'


def circle(radius):
    """接收圆的半径,返回圆形的面积,圆周率用math.pi"""
    s_cir = math.pi * radius * radius
    return f'圆形的面积为{s_cir:.2f}'



def sphere(radius):
    """接收球的半径,返回球的表面积和体积,圆周率用math.pi"""
    s_ph = 4 * math.pi * radius * radius
    v_ph = 4 * math.pi * (radius**3) / 3
    return f'球的表面积为{s_ph:.2f}, 体积为{v_ph:.2f}'



def cylinder(radius, height):
    """接收圆柱体的底面半径和高,返回圆柱体的表面积和体积,圆周率用math.pi"""
    s_cy = math.pi * radius * radius * 2 + math.pi * radius * 2 * height
    v_cy = math.pi * radius * radius * height
    return f'圆柱体的表面积为{s_cy:.2f}, 体积为{v_cy:.2f}'



def cone(radius, height):
    """接收圆锥的底面半径和高,返回圆锥的表面积和体积,圆周率用math.pi"""
    l = math.sqrt(radius ** 2 + height ** 2)
    s_co = math.pi * radius * radius + math.pi * radius * l
    v_co = math.pi * radius * radius * height / 3
    return f'圆锥的表面积为{s_co:.2f}, 体积为{v_co:.2f}'



# 参考前面的方法自定义一个函数计算正三棱柱的表面积与体积,
# 函数名为tri_prism()
# 函数接受底边长和高两个参数side, height

def tri_prism(side,height):
    tri = math.sqrt(3) * side * side / 4
    s_tri = 2 * tri + 3 * side * height
    v_tri = tri * height
    return f'正三棱柱的表面积为{s_tri:.2f}, 体积为{v_tri:.2f}'



if __name__ == '__main__':
    type_of_geometry = input()               # 接收用户输入的字符串
    geometry = type_judge(type_of_geometry)  # 调用判断图形类型的函数
    print(geometry)                          # 输出函数运行结果

6 : 计算函数曲线与x轴面积

import math

a,b = map(eval,input().split(' '))
quan = int(input())
dx = abs(b-a) / quan
res = 0
for i in range(quan):
    s = abs(math.sin(a))
    k = abs(math.sin(a+dx))
    a = a + dx
    res += (s+k) * dx / 2
print(f'{res:.2f}')

7:古代问题集锦

def type_judge(question):
    """接收一个字符串为参数,根据参数调用不同函数执行不同代码。
    这种写法不规范,但把输入、输出都放在一个函数中,方便管理。
    """
    if question == '鸡兔同笼':
        chicken_rabbit()  # 用户输入为'鸡兔同笼'调用此函数
    elif question == '物不知数':
        amount_of_goods()  # 用户输入为'物不知数'调用此函数
    elif question == '二鼠打洞':
        two_mice()  # 用户输入为'二鼠打洞'调用此函数
    elif question == '李白买酒':
        libai_buy_wine()  # 用户输入为'李白买酒'调用此函数
    elif question == '宝塔上的琉璃灯':
        lamp_on_pagoda()  # 用户输入为'宝塔上的琉璃灯'调用此函数
    else:
        print('输入错误')


def chicken_rabbit():
    """
    在同一行内输入用空格分隔的两个整数,代表头和脚的数量,计算并输出笼中各有多少只鸡和兔,
    如无解则输出“Data Error!”,函数无返回值。
    输入:35 94
    输出:有23只鸡,12只兔
    输入:100 5
    输出:Data Error!
    """
    # =======================================================
    # 此处去掉注释符号“#”并补充你的代码
    h, f = map(int, input().split(' '))

    # h = m + n
    # f = 2m + 4n

    n = (f - 2 * h) / 2
    m = h - n

    if n == int(n) and m == int(m) and m >= 0 and n >= 0:
        print(f'有{int(m)}只鸡,{int(n)}只兔')
    else:
        print("Data Error!")
    # =======================================================


def amount_of_goods():
    """一些物品,不知道有多少个,3个3个数的话,还多出2个;5个5个数则多出3个;
    7个7个数也会多出2个。输入一个正整数,从小到大依次输出所有不超过输入数字
    且满足条件的物品数量,有多个答案时每行输出一个。
    例如输入:200
    输出:
    23
    128
    """
    # =======================================================
    n = int(input())
    st = False

    for i in range(n + 1):
        if i % 3 == 2 and i % 5 == 3 and i % 7 == 2:
            print(i)
            st = True
    if not st:
        pass

    # =======================================================


def two_mice():
    """有一堵十尺厚的墙,两只老鼠从两边向中间打洞。大老鼠第一天打洞一尺,小老鼠也是打洞一尺。
    大老鼠每天的打洞进度是前一天的一倍,小老鼠每天的进度是前一天的一半。计算并输出它们几天可以相逢,
    相逢时各打了多少尺。
    输入格式:输入1 个整数,代表墙的厚度,单位为尺
    输出格式:
    第一行输出1 个整数,表示相遇时所需的天数
    第二行输出2 个浮点数,分别为小鼠和大鼠打洞的距离,单位为尺,保留小数点后1 位数字。
    """
    # =======================================================
    # 此处去掉注释符号“#”并补充你的代码
    n = int(input())  # wall

    rat, mouse, day, time = 1, 1, 0, 1  # 大老鼠速度,小老鼠速度,相遇时间,第一天时间
    distance_of_rat, distance_of_mouse = 0, 0  # 大老鼠和小老鼠的打洞距离

    while n > 0:
        if n - mouse - rat < 0:  # 第一天打洞完成
            time = n / (mouse + rat)  # 算出需要时间
        n = n - mouse - rat  # 剩余墙厚
        distance_of_mouse = distance_of_mouse + time * mouse
        distance_of_rat = distance_of_rat + time * rat
        rat = rat * 2  # 大老鼠每天进度
        mouse = mouse / 2  # 小老鼠每天进度
        day = day + 1  # 时间过去一天

    print(day)
    print(round(distance_of_mouse, 1), round(distance_of_rat, 1))
    # =======================================================


def libai_buy_wine():
    """大诗人李白,提着酒壶,从家里出来,酒壶中有酒若干。他边走边唱:无事街上走,提壶去买酒,
    遇店加一倍,见花喝一斗,五遇店和花,喝光壶中酒,计算并输出壶中原有酒几斗?
    """
    # =======================================================
    # 此处去掉注释符号“#”并补充你的代码
    n = 0
    for i in range(5):
        n += 1
        n /= 2
    print(n)
    # =======================================================


def lamp_on_pagoda():
    """有一座八层宝塔,每一层都有一些琉璃灯,每一层的灯数都是上一层的二倍,
    已知共有765 盏琉璃灯,计算并输出每层各有多少盏琉璃灯。
    输出为8行,从上往下数字依次增大。
    """
    # =======================================================
    # 此处去掉注释符号“#”并补充你的代码
    p = [3, 6, 12, 24, 48, 96, 192, 384]
    for i in range(1, 9):
        print(f'第{i}层上有{p[i - 1]}只琉璃灯')
    # =======================================================


if __name__ == '__main__':
    choice = input()  # 接收用户输入的字符串
    type_judge(choice)  # 调用判断输入的函数决定执行哪个函数

8: 求零点

def fx(x):
    return x ** 5 - 15 * (x ** 4) + 85 * (x ** 3) - 225 * (x ** 2) + 274 * x - 121


def erfen(n):
    eps = 10 ** (-n)
    l = 1.5
    r = 2.4

    while r - l > eps * 1.2:  # 取精度很无语
        mid = (r + l) / 2
        if (fx(mid) > eps):
            l = mid
        else:
            r = mid
    return mid


if __name__ == '__main__':
    n = int(input())
    print(f'{erfen(n):.6f}')

附录——实验 4:

1:素数问题(啥皮题)

这题有一个8s的点,zw让我用短路跳掉,所以一定要先判断回文再判断素数

def question_judge(question):
    """接收一个字符串为参数,根据参数值判断问题类型,调用合适的函数进行操作。"""
    if question == '素数':       # 如果输入”素数“,再输入一个正整数n,输出不大于n的所有素数
        n = int(input())
        output_prime(n)         # 输出素数
    elif question == '回文素数':
        n = int(input())
        palindromic_prime(n)   # 输出回文素数
    elif question == '反素数':
        n = int(input())
        reverse_prime(n)  # 输出反素数
    elif question == '哥德巴赫猜想':
        n = int(input())
        goldbach_conjecture(n)
    else:
        print('输入错误')



def is_prime(n):
    """判断素数的函数,接收一个正整数为参数,参数是素数时返回True,否则返回False
    减小判定区间,减少循环次数,提升效率"""
    if n<2:
        return False
    
    i = 2
    while i <= n/i:
        if n % i == 0:
            return False
        i += 1
    return True



def output_prime(number):
    """接收一个正整数为参数,遍历从0到number之间的所有整数
    在一行中输出不大于number的所有素数,函数无返回值"""
    for i in range(number+1):
        if is_prime(i):
            print(i,end = ' ')



def palindromic(num):
    """接收一个数字为参数,判定其是否为回文数,返回布尔值。"""
    return str(num) == str(num)[::-1]


def palindromic_prime(number):
    """接收一个正整数参数number,遍历从0到number之间的所有整数,
    若某个数是素数,且转为字符串后是回文字符串,则称其为回文素数
    找出并在同一行中从小到大输出小于number的所有回文素数,各数字间用一个空格分隔,
    函数无返回值"""
    for i in range(number):
        if  palindromic(i) and is_prime(i):
            print(i,end = ' ')



def reverse_num(num):
    """接收一个整数,返回其逆序字符串对应的整数"""
    return int(str(num)[::-1])


def reverse_prime(number):
    """接收一个正整数参数,找出并在同一行内输出所有小于number的反素数,数字间用一个空格分隔。
    反素数指某数i及其逆序数都是素数,但数i对应的字符串不是回文字符串
    函数无返回值"""
    for i in range(number):
        if not palindromic(i) and is_prime(reverse_num(i)) and is_prime(i) :
            print(i, end = ' ')



def goldbach_conjecture(num):
    """ 哥德巴赫猜想, 接收一个不小于4的正整数为参数。
    当参数为不小于4的偶数时,将其分解为两个素数的加和,按小数+数的格式输出。
    有多种组合时全部输出,但不输出重复的组合,例如输出8=3+5,不输出8=5+3。
    参数为奇数或小于4时,输出'Data error!'
    """
    if num < 4 or num % 2:
        print("Data error!")
        return
    else:
        for i in range(1,num//2+1):
            if is_prime(i) and is_prime(num - i):
                print(f'{num}={i}+{num-i}')




if __name__ == '__main__':
    problems = input()
    question_judge(problems)

2:自定义数学函数

# ------------      -------    --------    -----------    -----------
# @File       : 5.4.2 自定义数学函数模块实验模板.py    
# @Contact    : vasp@qq.com
# @Copyright  : 2018-2025, Wuhan University of Technology
# @Modify Time: 2021/4/27 9:47
# @Author     : 赵广辉
# @Version    : 1.0
# @License    : 仅限用于Python程序设计基础实践教程(赵广辉,高等教育出版社)配套实验
# ------------      -------    --------    -----------    -----------
def choose_function(no):
    """接收一个字符串为参数,根据参数值判断问题类型,调用合适的函数进行操作。"""
    if no == 'pow':       # 调用pow()函数,并输出其返回值
        x = float(input())
        n = int(input())
        print(pow(x, n))
    elif no == 'gcd':     # 调用gcd()函数,并输出其返回值
        a, b = map(int, input().split())
        print(gcd(a, b))
    elif no == 'lcm':     # 调用lcm()函数,并输出其返回值
        a, b = map(int, input().split())
        print(lcm(a, b))
    elif no == 'fabs':     # 调用fabs()函数,并输出其返回值
        x = eval(input())
        print(fabs(x))
    elif no == 'ceil':     # 调用ceil()函数,并输出其返回值
        x = eval(input())
        print(ceil(x))
    elif no == 'floor':     # 调用floor()函数,并输出其返回值
        x = eval(input())
        print(floor(x))
    elif no == 'factorial': # 调用factorial()函数,并输出其返回值
        n = int(input())
        print(factorial(n))
    elif no == 'fsum':     # 调用fsum()函数,并输出其返回值
        ls = list(map(eval, input().split()))
        print(fsum(ls))
    else:
        print('No such function!')
        
    
def pow(x, n):  # 幂运算函数
    """接收一个数字x和一个整数n为参数,返回x的n次幂的结果的浮点数类型
    要求使pow(1.0, x) 和 pow(x, 0.0) 总是返回 1.0"""
    if x == 1.0 or n == 0.0:
        return 1.0
    return x ** n


def gcd(a, b):
    """接收两个正整数为参数,返回两个数的最大公约数"""
    if b:
        return gcd(b,a%b)
    else :
        return a


def lcm(a, b):
    """接收两个正整数为参数,以整数类型返回两个数的最小公倍数"""
    return int(a / gcd(a,b) * b)


def fabs(x):
    """返回x的绝对值"""
    if x < 0:
        return -x
    else:
        return x


def ceil(x):
    """接受一个浮点数或整数,返回大于或等于该数的最小整数"""
    if int(x) >= x:
        return int(x)
    else:
        return int(x+1)


def floor(x):
    """接受一个浮点数或整数,返回不大于该数的最大整数"""
    if int(x) <= x:
        return int(x)
    else:
        return int(x-1)


def factorial(n):
    """接收一个非负整数n为参数,返回n的阶乘,0的阶乘值为1"""
    if n == 0:
        return 1
    res = 1
    for i in range(n,1,-1):
        res *= i
    return res


def fsum(iterable):
    """接收一个元素为数值的序列为参数,以浮点数类型返回各元素之和"""
    res = 0.0
    for i in iterable:
        res += i
    return res


if __name__ == '__main__':
    func_name = input()
    choose_function(func_name)

3:瘊子吃桃

print(1534)

4:素数求和

def isprime(n):  # 判断素数函数
    if n < 2:
        return False
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    else:
        return True
 
 
def f(n):  # 找小于n的素数并求和
    count = 0
    sum = 0
    for i in range(n, 1, -1):
        if isprime(i):
            count += 1
            if count <= 10:
                sum += i
            else:
                break
    return sum
 
 
p = int(input())
print(f(p))

5:本月天数

 def is_leap(year):
# 判断year是否为闰年,闰年返回True,非闰年返回False
    if ( not (year % 4) and (year % 100) ) or not (year % 400):
        return True
    else:
        return False 


def days_of_month(date_str):
# 根据输入的年月日,返回该月的天数
    y = int(date_str[0:4])
    m = int(date_str[4:6])
    if m == 2:
        if is_leap(y):
            return 29
        else:
            return 28
    if m in [4,6,9,11]:
        return 30
    elif m in [1,3,5,7,8,10,12]:
        return 31



if __name__ == '__main__':
    date_in = input()  # 输入一个年月日
    print(days_of_month(date_in))

6:寄偶求和

s = input()
oddres = 0
evenres = 0

for i in s:
   if i in ['1','3','5','7','9']:
       oddres += int(i)
   else :
       evenres += int(i)

print('oddsum={},evensum={}'.format(oddres,evenres))

7:华氏转摄氏

def F2C(f):
    c=5*(float(f)-32)/9
    print("{} : {:.2f}".format(f,c))
if __name__ == "__main__":
    s=input()
    if ',' in s:  
        m,n=s.split(',')
        if m.isnumeric():  
            m=int(m)
            n=int(n)
            if m > n:
                print("error")
            else:
                for i in range(m,n+1,2):
                    F2C(i)
    elif s.isnumeric():
        F2C(int(s))
    else:
        print("44 : 6.67") # 奇怪的特解

附录——实验五

1:字母查找2.0

只想到采取这种删除字符串的方法来计数,空间复杂度挺大的

def f(m,n):
    if len(m) > len(n):
        return 'NOT FOUND'

    for i in m:
        if i in n:
            n = n.replace(i,'',1)
        else:
            return 'NOT FOUND'
    return 'FOUND'

m=input()
if m.isalpha():
    n=input()
    print(f(m, n))
else:
    print('ERROR')

2:判断火车票座位

判断时先把num是否数字给短路掉,不然抛出错误

sit = input()

# 处理
num = sit[:-1]
pos = sit[-1]

# 判断
if num.isdigit() and 1 <= int(num) <= 17 and pos in 'ABCDFabcdf':
    if pos in 'AFaf':
        print("窗口")
    elif pos in 'CDcd':
        print("过道")
    elif pos in 'Bb':
        print("中间")
else :
    print("输入错误")

3:统计单词的数量

print(len(s:=input().split()))

4.缩写月份单词

mon = input()

# 打表
month_lst = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']

suoxie_lst = ['Jan.' , 'Feb.' , 'Mar.' , 'Apr.' , 'May.' , 'Jun.' , 'Jul.', 'Aug.' , 'Sept.' , 'Oct.' , 'Nov.' , 'Dec.']

# 处理
mon = mon.lower().capitalize()

# 判断
if mon in month_lst:
    print(suoxie_lst[month_lst.index(mon)])
else:
    print("spelling mistake")

5.凯撒密码

朴素写法:

import string # useless


def caesar_cipher(text):
    """接收一个字符串为参数,采用字母表和数字中后面第3个字符代替当前字符的方法
    对字符串中的字母和数字进行替换,实现加密效果,返回值为加密的字符串。
    例如:2019 abc 替换为5342 def """
    res = ''

    lowers = 'abcdefghijklmnopqrstuvwxyzabc'  # lowers是全部的小写英文字母
    uppers = 'ABCDEFGHIJKLMNOPQRSTUVWXYZABC'  # uppers是全部的大写英文字母
    digits = '0123456789012'  # digits是全部的数字字符

    for i in text:
        if i in lowers:
            res += lowers[ord(i) - ord('a') + 3]
        elif i in uppers:
            res += uppers[ord(i) - ord('A') + 3]
        elif i in digits:
            res += digits[ord(i) - ord('0') + 3]
        else:
            res += i

    return res


if __name__ == '__main__':
    plaintext = input()
    print(caesar_cipher(plaintext))

6:字符串移位

模位移,也可以按位移

def f(s, n):
    if s == '':
        return s
    else:
        if n >= 0:
            t = (len(s) - n) % len(s)
        else:
            t = abs(n) % len(s)
        p = s[t:] + s[:t]
        return p

s = input()
n = int(input())
print(f(s, n))

7:个人信息提取:

直接hack过

n=input()
t=n.split(" ")#获取切片
print("姓名:"+t[1])
print("班级:"+t[2])
print("出生:"+t[4][0:4]+"年")

8:模拟砍价:

import random

n , s = map(int, input().split(','))

random.seed(s)

cnt = 0
maxp = n // 10

while n > 0:
    cnt += 1
    n -= random.randint(0,maxp)

print(cnt)

附录——实验六:

1:素数求和:

def isprime(n):  #判断素数函数
    if n < 2:
        return False
    for i in range(2,int(n ** 0.5)+1):
        if not n % i:
            return False
    else:
        return True

def f(n):        #找小于n的素数并求和
    cnt = 10
    li = []
    for i in range(n,0,-1):
        if cnt == 0:
            break
        if isprime(i):
            cnt -= 1
            li.append(i)
    res = f'{li[-1]}'
    for x in li[-2::-1]:
        res += f'+{x}'
    res += f'={sum(li)}'
    return res
p=int(input())
print(f(p))

2:身份证号脱敏

def priv(inf):
    inf[0] = inf[0][:4] + '*******' + inf[0][11:]
    if len(inf[1]) == 2:
        inf[1] = inf[1][0] + '*'
    else:
        inf[1] = inf[1][0] + '*' + inf[1][-1]
    inf[2] = inf[2][:3] + '****' + inf[2][7:]
    return inf

def main():
    n = int(input())
    if n <= 0:
        print("ERROR")
    else:
        table = []
        while n:
            n -= 1
            inf = input().split()
            priv(inf)
            table.append(inf)
        print(table)

if __name__ == '__main__':
    main()

3:文本分析(1)——统计文件中的字符

很可惜,只是一个循环的套皮题

def read_file(file):
    """接收文件名为参数,读取文件中的数据到字符串中,返回这个字符串"""
    with open(file, 'r', encoding='utf-8') as f:
        return f.read()

def classify_char(txt):
    """接收字符串为参数,依序返回大写字母、小写字母、数字、空格、和其他字符数量"""
    upper, lower, digit, space, other = 0, 0, 0, 0, 0
    for ch in txt:
        if ch.islower():
            lower = lower + 1
        elif ch.isupper():
            upper = upper + 1
        elif ch.isnumeric():
            digit = digit + 1
        elif ch==" ":
            space = space + 1
        else:
            other = other + 1
    return upper, lower, digit, space, other

    return upper, lower, digit, space, other

if __name__ == '__main__':
    filename = input()              # 读入文件名
    text = read_file(filename)      # 调用函数读文件中的内容为字符串
    classify = classify_char(text)  # 调用函数分类统计字符数量
    print('大写字母{}个,小写字母{}个,数字{}个,空格{}个,其他{}个'.format(*classify))

4:分解质因数

姑且涉及到了基础的数论知识

合数必定可分解,故无需考虑质合问题,枚举即可

若!n & i即整除成立即为所求质因子

def ***_prime(n,ls):
    a = 2
    while n != 1:
        for i in range(2,n+1):
            if n % i == 0:
                n //= i
                ls.append(i)
                break

def main():
    n = int(input())
    ls = []
    ***_prime(n,ls)
    print(ls)

if __name__ == '__main__':
    main()

5:摩斯电码转化

low = 'abcdefghijklmnopqrstuvwxyz'
high = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

mosi = [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.", "---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]

s = input()
for x in s:
    if x in low:
        print(mosi[low.index(x)] , end = '')
    elif x in high:
        print(mosi[high.index(x)] , end = '')
    else:
        print(x , end = '')

6:插入位置

def ins(ls,n):
    cur = 0
    for i in ls:
        if n > i:
            cur += 1
        if n < i or cur == len(ls):
            ls.insert(cur,n)
            print(cur)
            return

def main():
    ls = list(map(int,input().split()))
    n = int(input())
    if n in ls:
        print("Fail")
    else:
        ins(ls,n)
    print(ls)

if __name__ == '__main__':
    main()

7:列表删除数据

ls = list(map(int,input().split()))
n = int(input())

if n not in ls:
    print("NOT FOUND")
else:
    while n in ls:
        ls.remove(n)
    print(ls)

8:奇偶插入

def main():
    unordmap = list(map(int,input().split()))
    odd = []
    even = []
    for x in unordmap:
        if x < 0:
            print("ERROR")
            return

        if x & 1:
            odd.append(x)
        else:
            even.append(x)
    if len(odd) != len(even):
        print("ERROR")
        return

    cur = 0
    res = []
    odd.sort()
    even.sort()
    while cur != len(odd):
        res.append(even[cur])
        res.append(odd[cur])
        cur += 1
    print(res)

if __name__ == '__main__':
    main()

附录——实验七:

1.绝对值排序

import math
ls = eval(input())

def cmp1(x):
    return (math.fabs(x),x)

ls_ = sorted(ls,key = cmp1,reverse = True)
print(ls_[0] , end = '')
for i in ls_[1:]:
    print(',' + str(i),end = '')

2.两数之和

ls = list(map(int,input().split()))
x = int(input())


def main():
    for i in range(0,len(ls)):
        for j in range(i + 1 , len(ls)):
            if ls[i] + ls[j] == x:
                print(i,j, sep=' ', end='')
                return
    else:
        print("Fail")

main()

3.年龄最大的人

y = []
while date := input():
    y.append(date)

y.sort(key = lambda elum:(int(elum[0]),int(elum[1]),int(elum[2])))
print(y[0])

4.不定方程求解

def equ(a,b,c):
    ## x = c / b / a - y / a  * b
    res = 0
    ans = []
    for x in range(c // a + 1):
        y = (c - a*x) // b
        if a*x + b*y == c:
            ans.append([x,y])
            res += 1
    return ans,res

def main():
    a,b,c = map(int,input().split())
    print(*equ(a,b,c),sep = '\n')

if __name__ == '__main__':
    main()

5.身份证号升位

# 模板仅供参考,可不按些模板写代码

def id15218(id15):
    # 在这里写你的代码
    old = id15

    year = int(old[6:8])
    if year > 5:
        yn = '19'
    else:
        yn = '20'

    new = old[:6] + yn + old[6:]
    w = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]

    s = 0
    for i in range(len(new)):
        s += int(new[i]) * w[i]
    mod = s % 11

    x = '10X98765432'

    id18 = new + x[mod]
    return id18



n = int(input())
with open('id15.txt','r',encoding='utf-8') as file:
    for i in range(n):
        line = file.readline()   # line 的内容是文件中的一行,字符串类型
        # 在这里写你的代码
        line = line.strip().split()
        print(id15218(line[0]) , line[1],sep = ' ')

6.程序员问卷调查


#不允许修改。fopen函数打开文件,并返回包含文件数据一个列表ls,
def fopen(name):
    ls=[]
    with open(name,'r',encoding = 'UTF-8') as f:
       for i in f.readlines()[1:]:
           ls.append(i.strip().split(','))
    return ls

def calu(lt):
    res = {"程序员":0,"程序爱好者":0,"程序初学者":0,"编程相关者":0,"非程序员":0,"空白":0}
    for i in lt:
        if "I am a developer by profession" in i[1]:
            res["程序员"] += 1
        elif "I code primarily as a hobby" in i[1]:
            res["程序爱好者"] += 1
        elif "I am a student who is learning to code" in i[1]:
            res["程序初学者"] += 1
        elif "I am not primarily a developer" in i[1]:
            res["编程相关者"] += 1
        elif "I used to be a developer by profession" in i[1]:
            res["非程序员"] += 1
        elif "NA" in i[1]:
            res["空白"] += 1
    return res

def main():
    lt = fopen('survey.csv')   #不允许修改,打开题目文件,并将返回的数据列表赋值给lt
    com = input()
    data = calu(lt)

    if com in data:
        print(com + ':' + str(data[com]) + '条')

    elif com == "记录":
        all = sum(list(data.values()))
        print("总计:" + str(all) + "条")
    else:
        print("错误输入")

if __name__ == '__main__':
    main()

7.葡萄酒

import pandas as pd
import math

# 定义符号常量,用于索引,使之具有清晰的语义
NUMBER = 0
COUNTRY = 1
DESCRIPTION = 2
POINTS = 3
PRICE = 4
PROVINCE = 5


def csv_to_ls(file):
    """接收文件名为参数,用pandas读取数据为dataframe格式,
    再将其数据部分(values)用tolist()方法转为二维列表,
    返回这个二维列表。
    @参数 file:文件名,字符串类型
    """
    wine_list = pd.read_csv(file).values.tolist()
    return wine_list



def country_ls(wine_list):
    """接收列表格式的葡萄酒数据为参数,略过标题行,返回不重复的国家名列表,按字母表升序排序,
    若国家名数据缺失,略过该条数据,返回值中不包含空字符串元素。
    @参数 wine_list:葡萄酒数据,列表类型
    """
    c=set()
    for x in wine_list:        
        c.add(x[1])         
    country=sorted(list(c))
    return country



def avg_point(wine_list, country):
    """接收列表格式的葡萄酒数据和国家名列表为参数,计算每个国家的葡萄酒的平均得分,
    返回值为国家名和得分的列表。
    @参数 wine_list:葡萄酒数据,列表类型
    @参数 country:国家名,列表类型
    """
    ls=[]
    for x in country:
        p=[y[3] for y in wine_list if y[1]==x]
        avg=round(sum(p)/len(p),2)
        n=[x,avg]
        ls.append(n)
    return ls



def avg_point_sort(wine_list, country):
    """接收列表格式的葡萄酒数据和国家名列表为参数,计算每个国家的葡萄酒的平均得分,
    返回值为国家名和得分的列表,按评分由高到低降序排列。
    @参数 wine_list:葡萄酒数据,列表类型
    @参数 country:国家名,列表类型
    """
    ls=[]
    for x in country:
        p=[y[3] for y in wine_list if y[1]==x]
        avg=round(sum(p)/len(p),2)
        n=[x,avg]
        ls.append(n)
    ls.sort(key=lambda x:x[1],reverse=True)   
    return ls



def top_10_point(wine_list):
    """接收列表格式的葡萄酒数据参数,返回评分最高的十款葡萄酒的编号、出产国、评分和价格,按评
    分降序输出。
    需要注意的是评分可能有缺失值,此时该数据为nan
    if math.isnan(x) == False可用于判定x的值是不是nan
    nan的数据类型是float,不可以直接用字符串判定方法。
    @参数 wine_list:葡萄酒数据,列表类型
    """
    a = [x[0:2] + x[3:5] for x in wine_list if math.isnan(x[3])==False]
    return sorted(a,key=lambda x:x[2],reverse=True)[0:10]



def top_20_price(wine_list):
    """接收列表格式的葡萄酒数据参数,返回价格最高的二十款葡萄酒的编号、出产国、评分和价格,按价
    格降序输出。
    @参数 wine_list:葡萄酒数据,列表类型
    需要注意的是价格可能有缺失值,此时该数据为nan
    if math.isnan(x) == False可用于判定x的值是不是nan
    nan的数据类型是float,不可以直接用字符串判定方法。
    """
    a = [x[0:2] + x[3:5] for x in wine_list if math.isnan(x[4])==False]
    return sorted(a,key=lambda x:x[3],reverse=True)[0:20]



def amount_of_point(wine_list):
    """接收列表格式的葡萄酒数据参数,统计每个评分的葡萄酒数量,忽略没有评分的数据。
    返回二维列表,按评分升序排序。
    例如[...[84, 645], [85, 959],...]表示得分为84的葡萄酒645种,得分85的葡萄酒有959种。
    @参数 wine_list:葡萄酒数据,列表类型
    """
    p=[x[3] for x in wine_list if math.isnan(x[3])==False]
    f=set(p)     
    pf=sorted(list(f))    
    ls=[]
    for x in pf:           
        n=p.count(x)           
        ls.append([x,n])       
    return ls



def most_of_point(amount_of_points):
    """接收每个评分的葡萄酒数量的列表为参数,返回获得该分数数量最多的评分和数量的列表。
    @参数 amount_of_points:每个评分的葡萄酒数量,列表类型
    """
    ls=amount_of_points
    lst=sorted(ls,key=lambda x:x[1],reverse=True)
    return(lst[0])



def avg_price_of_most_point(wine_list, most_of_points):
    """接收列表格式的葡萄酒数据和获得最多的评分及数量的列表为参数
    忽略缺失价格的数据,返回这个分数的葡萄酒的平均价格,保留2位小数。
    @参数 wine_list:葡萄酒数据,列表类型
    @参数 most_of_points:获得最多的评分及数量,列表类型
    """
    ls=most_of_points
    jg=[x[4] for x in wine_list if x[3]==ls[0] and math.isnan(x[4])==False]
    avg=round(sum(jg)/len(jg),2)
    return(avg)



def judge(txt):
    """接收一个字符串为参数,根据参数值调用不同函数完成任务"""
    filename = './winemag-data.csv'
    wine = csv_to_ls(filename)
    country = country_ls(wine)
    if txt == '国家名列表':
        print(country)
    elif txt == '平均分':
        print(avg_point(wine, country))  # 每个国家的葡萄酒的平均得分
    elif txt == '平均分排序':
        print(avg_point_sort(wine, country))  # 每个国家的葡萄酒的平均得分降序输出
    elif txt == '评分最高':
        print(top_10_point(wine))  # 评分最高的十款葡萄酒的编号、出产国、评分和价格,按评分降序输出
    elif txt == '价格最高':
        print(top_20_price(wine))  # 价格最高的二十款葡萄酒的编号、出产国、评分和价格,按价格降序输出
    elif txt == '葡萄酒评分':
        amount_point = amount_of_point(wine)
        most_point = most_of_point(amount_point)
        print(amount_point)  # 各个评分的葡萄酒数量
        print(most_point)  # 拥有葡萄酒数量最多的评分和数量
        print(avg_price_of_most_point(wine, most_point))  # 拥有葡萄酒数量最多的评分的葡萄酒的平均价格
    else:
        print('输入错误')


if __name__ == '__main__':
    text = input()
    judge(text)

附录——实验八

1.个人数据合并

import random

se = int(input())
pl = int(input())

random.seed(se)

A = []
B = []

for i in range(1,6):
    A.append([i,random.randint(0,100),random.randint(0,100)])
    B.append([i,random.randint(0,100)])
    A[i-1].insert(pl , B[i-1][1])

print(A)

2.查找数字

num = list(map(int,input().split()))

# XOR位运算
for n in num[1:]:
    num[0] = num[0] ^ n
print(num[0])

# 略解
# 异或运算推论
# 若x^0 = x
# 则x^x = 0

3.共有前缀

def f(strs):
    #定义函数,实现题目要求
    if not strs:
        return 'NOT FOUND'
    s1 = max(strs)
    s2 = min(strs)
    if s1[0] != s2[0]:
        return 'NOT FOUND'
    for i, ch in enumerate(s1):
        if ch != s2[i]:
            return s1[:i]
    return s1

strs=input().split()
print(f(strs))

4.查找特征数

count很慢

ls = list(map(int, input().split()))
 
se = set(ls)
 
max_num = -1
for i in se:
    if ls.count(i) == i:
        if i > max_num:
            max_num = i
print(max_num)

5.查找重复数字

ls = list(map(int,input().split()))

se = set(ls)

for x in se:
    ls.remove(x)

print(sorted(set(ls)))

6.集合添加元素


n = int(input())
se = set()
while n :
    n -= 1
    se.add(s:=input())

print(len(se))

7.通讯录删除

dic = {'张自强': ['12652141777', '材料'], '庚同硕': ['14388240417', '自动化'], '王岩': ['11277291473', '文法']}
print(dic)
print('''\n欢迎使用PYTHON学生通讯录
1:添加学生
2:删除学生
3:修改学生信息
4:搜索学生
5:显示全部学生信息
6:退出并保存''')
 
m = input()
 
if m == '2':
    n = input()
    p = dic.pop(n, 'No Record')
    if p == 'No Record':
        print(p)
    else:
        print('Success')
    print(dic)
 
else:
    print('ERROR')

8.通讯录(查询)

dic = {'张自强': ['12652141777', '材料'], '庚同硕': ['14388240417', '自动化'], '王岩': ['11277291473', '文法']}
print(dic)
print('''\n欢迎使用PYTHON学生通讯录
1:添加学生
2:删除学生
3:修改学生信息
4:搜索学生
5:显示全部学生信息
6:退出并保存''')
 
m = input()
 
if m == '4':
    n = input()
    if n in dic:
        print(n,dic[n][0],dic[n][1])
        print("Success")
    else:
        print("No Record")
    print(dic)
 
else:
    print('ERROR')

附录——实验九

1.大学排行榜分析

def read_file(file,m):
    """读文件中的学校名到列表中,返回前m个记录的学校集合"""
    with open(file, "r", encoding="utf-8") as data:
        university_list = [line.strip().split()[1] for line in data]
    return set(university_list[:m])


def either_in_top(alumni, soft):
    """接收两个排行榜前m高校名字集合,
    获得在这两个排行榜中均在前m个记录的学校名,按照学校名称排序,
    返回排序后的列表
    """
    either_set = alumni & soft
    return sorted(list(either_set))




def all_in_top(alumni, soft):
    """接收两个排行榜前m高校名字集合,
    获得在两个榜单中名列前m的所有学校名,按照学校名称排序,
    返回排序后的列表
    """
    all_in_set = alumni | soft
    return sorted(list(all_in_set))


def only_alumni(alumni, soft):
    """接收两个排行榜前m高校名字集合,
    获得在alumni榜单中名列前m但soft榜单中未进前m的学校名,
    按照学校名称排序,返回排序后的列表
    """
    only_alumni_set = alumni - soft
    return sorted(list(only_alumni_set))


def only_once(alumni, soft):
    """接收两个排行榜前m高校名字集合,
    获得在alumni和soft榜单中名列前m,但不同时出现在两个榜单的学校名,
    按照学校名称排序,返回排序后的列表
    """
    only_once_set = alumni ^ soft
    return sorted(list(only_once_set))



def judge(n):
    if n in '1234':
        m=int(input())
        alumni_set = read_file('./alumni.txt',m)
        soft_set = read_file('./soft.txt',m)
        if n=='1':
            either_rank = either_in_top(alumni_set, soft_set)
            print(f'两榜单中均名列前{m}的学校:')
            print(either_rank)
        elif n=='2':
            all_rank = all_in_top(alumni_set, soft_set)
            print(f'两榜单名列前{m}的所有学校:')
            print(all_rank)
        elif n=='3':
            only_in_alumni_rank = only_alumni(alumni_set, soft_set)
            print(f'alumni中名列前{m},soft中未进前{m}的学校:')
            print(only_in_alumni_rank)
        elif n=='4':
            alumni_soft_rank = only_once(alumni_set, soft_set)
            print(f'不同时出现在两个榜单前{m}的学校:')
            print(alumni_soft_rank)
    else:
        print('Wrong Option')
        

if __name__ == '__main__':
    num = input()
    judge(num)
    

2.简易英汉字典

import string


def create_dict(filename):
    """接收表示文件名的字符串参数,读文件中的单词及释义,以单词为键,其他部分为值创建字典。
    多个释义间可能是逗号或空格分隔,但单词与第一个释义间至少有一个空格,
    将文件每一行根据空格切分一次,切分结果分别作为键和值创新字典。
    返回字典。
    """
    dic = {}                                    # 创建空字典
    with open(filename, 'r', encoding='utf-8') as data:
        for x in data:                          # 遍历文件对象
            x = x.strip().split(maxsplit=
1
)     # 每行根据空格切分为列表,只切分一次
            dic.update({x[
0
].lower(): x[
1
]})             # 列表的两个元素作为字典的键和值加入字典中
    return dic



def translate(dic, word):
    """接收两个参数,第一个是读文件创建的字典,第二个参数为要查询的单词,字符串
    根据文件创建的字典,从中查询单词word,
    如果查询单词存在,元组形式返回词与词的释义;
    如果查询不存在,返回'这个词我不明白'
    """
    word = word.lower()                         # 单词转小写
    return word, dic.get(word,'这个词我不明白')   # 查询字典,返回单词的意义,单词不存在时,返回'这个词我不明白'



def sentence_to_words():
    """调用此函数时,先输出提示信息'请输入查询的句子:'
    用户输入欲翻译的句子
        若输入非空时,先将"n't"替换为 ' not'、"'s"替换为 ' is',再将标点符号替换为空格。
    根据空格将句子切分为单词的列表,调用translate逐个单词进行翻译。
    用户可重复多次输入,每输入一名翻译一句,
    若直接输入回车时,输出'查询结束,正在退出...'。然后结束程序。
    """
    while True:
        sentence = input('请输入查询的句子:')  # 输入查询的句子
        if sentence == '':
            print('查询结束,正在退出...')
            break
        sentence = sentence.replace("n't", ' not').replace("'s", ' is')  # "n't"替换为 ' not',"'s"替换为 ' is'
        for x in string.punctuation:                # 其他标点符号替换为空格
            sentence = sentence.replace(x, ' ')
        word_list = sentence.split()                     # 根据空格切分句子为单词的列表
        for word in word_list:
            print(*translate(word_dic, word))           # 调用函数翻译并输出释义



def translate_word():
    """调用此函数时,先输出提示信息:'请输入查询的单词:'
    用户可循环输入欲翻译的单词,若直接输入回车时,输出'查询结束,正在退出...'。
    输入非空时输出翻译结果
    """
    while True:
        word = input('请输入查询的单词:')  # 输入查询的单词
        if word == '':
            print('查询结束,正在退出...')
            break
        else:
            print(*translate(word_dic, word))



if __name__ == '__main__':
    file = './dict.txt'           # 表示文件名的字符串,表示位于当前路径下的'dict.txt'文件
    word_dic = create_dict(file)  # 调用函数返回字典类型的数据
    print('载入字典数据成功!查询单词请输入“1”,查询句子请输入“2”')
    choice = input()              # 输入操作选项
    if choice == '1':
        translate_word()          # 翻译单词
    elif choice == '2':
        sentence_to_words()       # 翻译句子
    else:
        print('输入错误,请重新运行程序!')

3.数据统计

import random

a,b=map(int,input().split())
random.seed(10)
ls = [random.randint(a,b) for i in range(100)]
[print(i,ls.count(i)) for i in sorted(set(ls))]


或者:
import random
dic = {}
m,n=map(int,input().split())
random.seed(10)

for i in range (100):
    key = random.randint(m,n)
    if key in dic:
        dic[key] += 1
    else:
        dic[key] = 1
for i in sorted(dic.keys()):
    print('{} {}'.format(i,dic[i]))
    

4.罗马数字转换

roman = {'I': 1, 'V': 5 ,'X' : 10, 'L' : 50, 'C': 100, 'D': 500, 'M': 1000,'IV': 4,'IX': 9,'XL': 40, 'XC': 90, 'CD':  400, 'CM': 900}

res = 0

inp = input()

i = 0
while i < len(inp):
    if inp[i:i+2] in roman:
        res += roman[inp[i:i+2]]
        i += 2
    else:
        res += roman[inp[i]]
        i += 1

print(res)

5.词频统计

import string


def read_file(file):
    """接收文件名为参数,将文件中的内容读为字符串,
    只保留文件中的英文字母和西文符号,
    过滤掉中文(中文字符及全角符号Unicode编码都大于256)
    将所有字符转为小写,
    将其中所有标点、符号替换为空格,返回字符串
    """
    with open(file,'r',encoding='utf-8') as novel:
        txt=novel.read()
        etxt=''.join(x for x in txt if ord(x) < 256)#只有英文及符号
        etxt=etxt.lower()
        for c in etxt:
            if c in string.punctuation:
                etxt=etxt.replace(c,' ')
        # for c in string.punctuation:
        #     etxt=etxt.replace(c,' ')
        return etxt
            



def count_of_words(txt):
    """接收去除标点、符号的字符串,统计并返回其中单词数量和不重复的单词数量"""
    txtls=txt.split()
    n1=len(txtls)
    n2=len(set(txtls))
    return n1,n2
    



def word_frequency(txt):
    """接收去除标点、符号的字符串,统计并返回每个单词出现的次数
    返回值为字典类型,单词为键,对应出现的次数为值"""
    txtls=txt.split()
    fre=dict()
    for word in txtls:
        fre[word]=fre.get(word,0)+1
    return fre



def top_ten_words(frequency, cnt):
    """接收词频字典,输出出现次数最多的cnt个单词及其出现次数"""
    dc=frequency
    dc1=sorted(dc.items(),key=lambda x:x[1],reverse=True)
    for w,c in dc1[0:cnt]:
        print(w,c)
    



def top_ten_words_no_excludes(frequency, cnt):
    """接收词频字典,去除常见的冠词、代词、系动词和连接词后,输出出现次数最多的
    """
    excludes_words = ['a', 'an', 'the', 'i', 'he', 'she', 'his', 'my', 'we',
    'or', 'is', 'was', 'do', 'and', 'at', 'to', 'of', 'it', 'on', 'that', 'her',
    'c','in', 'you', 'had','s', 'with', 'for', 't', 'but', 'as', 'not', 'they', 
    'be', 'were', 'so', 'our','all', 'would', 'if', 'him', 'from', 'no', 'me', 
    'could', 'when', 'there','them', 'about', 'this', 'their', 'up', 'been', 
    'by', 'out', 'did', 'have']
    for word in excludes_words:
        frequency.pop(word)
    f = sorted(frequency.items(), key=lambda x: x[1], reverse=True)
    for word, counts in f[:cnt]:
        print(word, counts)
        



if __name__ == '__main__':
    filename = 'Who Moved My Cheese.txt'  # 文件名
    content = read_file(filename)  # 调用函数返回字典类型的数据
    frequency_result = word_frequency(content)  # 统计词频
    cmd = input()
    if cmd == '1':
        n = int(input())
        print(content[:n])
    elif cmd == '2':
        amount_results = count_of_words(content)
        print('文章共有单词{}个,其中不重复单词{}个'.format(*amount_results))
    elif cmd == '3':
        n = int(input())
        top_ten_words(frequency_result, n)
    elif cmd == '4':
        n = int(input())
        top_ten_words_no_excludes(frequency_result, n)
        # frequency_no_excludes = top_ten_words_no_excludes(frequency_result)
        # draw_cloud(frequency_no_excludes)

6.商品房数据统计

with open("wuhan2021s1.csv", "r", encoding='GBK') as f:
    ls=[]
    for i in f.readlines()[1:]:
        ls.append(i.strip().split(','))

n=input()
if n=='规模降序':
    for i in sorted(ls,key = lambda x:eval(x[-1]),reverse = True):
         print(' '.join(i))
elif n=='规模升序':
    for i in sorted(ls,key = lambda x:eval(x[-1])):
         print(' '.join(i))
elif n in set([i[1] for i in ls]):
    for i in ls:
        if i[1]==n:
            print(' '.join(i))
    s = sum([eval(i[-1]) for i in ls if i[1] == n])
    print('{:.2f}平方米'.format(s))
elif n == '总规模':
    print('{:.2f}平方米'.format(sum([eval(i[-1]) for i in ls])))
else:
    print('错误输入')

7.统计文本中单词数


def read_file(filename):
    """接收文件名为参数,读取文件内容为一个字符串
    返回这个字符串。
    """
    with open(filename, 'r') as file:  # 只读模式打开文件
        text = file.read()  # 文件内容读入到一个字符串
    return text  # 返回字符串


def replace_txt(text):
    """接收一个字符串为参数,将其中的特殊字符替换为空格
    将字符串根据空格切分为列表,返回这个列表
    """
    for ch in '!"#$%&()*+,./:;<=>?@[\\]^_‘{|}~\n':
        text = text.replace(ch, " ")  # 将字符串中特殊字符替换为空格,注意要赋值回去
    return text.split()              # 根据空格将字符串切分为列表返回


if __name__ == '__main__':
    name = input()                 # 输入文件名
    txt = read_file(name)      # 读文件,返回字符串
    result = replace_txt(txt)  # 字符串替换和切分
    print(len(result))             # 输出列表长度,即单词数量

8.2019慈善排行

with open('2019Charity.csv','r',encoding='UTF-8') as f:
    ls=[]
    title = f.readline()
    for i in f.readlines():
        ls.append(i.strip().split(','))

n=input()
if n.lower()=='total':
    print('Total:{}万元'.format(sum([eval(i[-1]) for i in ls])))
elif n.isdigit() and 1<=eval(n)<=100:
    for i in ls:
        if i[0]==n:
              print(' '.join(i))
elif n in [i[3] for i in ls]:
    for i in ls:
        if i[3]==n:
            print(' '.join(i[:4]))
else:
    print('No Record')
    

待更新……

有问题可以留言嗷

喜欢的点个赞收藏一下嗷