python123习题集

  • 06函数
  • 07集合
  • 08列表元组
  • 09集合
  • 10字典
  • 12随机数

06函数


二分法求平方根
tips:

  1. 二分法求解思路
  2. 精度控制
import mathn, delta = map(eval, input().split(','))
def sqrt_binary(n, delta):a, b = 0, n+0.25# 初始化区间while True:x = (a+b)/2if abs(x**2 - n) < delta:# 精度足够print('{:.8f}'.format(x))breakelif x**2 - n < 0:# 不够大,更新下界a = xelse:# 太大了,更新上界b = xsqrt_binary(n, delta)
print('{:.8f}'.format(math.sqrt(n)))

汉诺塔

def hanota(n,a,b,c):if n == 1:print('{} --> {}'.format(a, c))else:hanota(n-1, a, c, b)print('{} --> {}'.format(a, c))hanota(n-1, b, a, c)
if __name__ == '__main__':n = eval(input())a,b,c = input().split()hanota(n, a, b, c)

特殊的数字

描述‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

1179 能用 3 种方法表示为 3 个不同素数平方和的整数。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

如:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

1179 = 1717 + 1919 + 23*23‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

1179 = 77 + 1313 + 31*31‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

1179 = 77 + 1717 + 29*29‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

请输出能用 6 种方式表示为 3 个不同素数平方和的最小整数。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

(本题涉及的最大素数不超过100)

def prime(n):'''高效创建素数集列表'''flag = [1]*(n+2)p=2ls = []while(p<=n):ls.append(p)for i in range(2*p,n+1,p):flag[i] = 0while 1:p += 1if(flag[p]==1):breakreturn lsimport itertools
ls = prime(100)
ls_2 = [s**2 for s in ls]
mul = []
for item in itertools.combinations(ls_2, 3):mul.append(sum(item))
mul.sort() #需要排一下序,题目要求是输出最小整数
for i in mul:if mul.count(i) == 6:print(i)break

参考答案,两个点效率不高,一个是素数集的创建,一个是最后查找最小整数,但是函数式编程的思想值得学习。

from itertools import combinationsdef is_prime(n):"""判断素数的函数,接收一个正整数为参数,参数是素数时返回True,否则返回False减小判定区间,减少循环次数,提升效率"""if n < 2:return False  # 0、1、负数以及偶数都不是素数for i in range(2, int(n ** 0.5) + 1):if n % i == 0:  # 能被2到其n-1之间的数整除的数不是素数return Falseelse:return True  # for循环正常结束,未遇到return的数是素数def combine(ls_of_prime, n):"""根据n获得列表中的所有可能组合(3个元素为一组)"""comb_of_prime = []for c in combinations(ls_of_prime, n):comb_of_prime.append(c)return comb_of_primedef six_ways(comb_of_prime):"""传入所有三个素数的组合列表,计算每个组合中的元素的平方和,产生新的列表,遍历10000以下的整数,如果这个整数在列表中出现的次数为6次,那么便是最小的、可以有6 种表示方法表示为3个素数平方和的那个数"""result = [sum((c[0] ** 2, c[1] ** 2, c[2] ** 2)) for c in comb_of_prime]for i in range(10000):if result.count(i) == 6:   # 统计当前数字在列表中出现的次数return iif __name__ == '__main__':lsOfPrime = [i for i in range(100) if is_prime(i)]combOfPrime = combine(lsOfPrime, 3)print(six_ways(combOfPrime))

素数求和
描述

输入一个正整数n,统计从[0,n]之间的最大的10个素数之和。本题保证测试用例至少有10个满足条件的素数。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

例如:输入31 ,应求得3,5,7,11,13,17,19,23,29,31之和。

一个测试点运行错误。莫名其妙哦?

def prime(n):flag = [1]*(n+2)p = 2ls = []while p <= n:ls.append(p)for i in range(2*p, n+1, p):flag[i] = 0while 1:p += 1if flag[p] == 1:breakreturn lsn = eval(input())
print(sum(prime(n)[-10:]))

字符串移位
描述

在两行中分别输入一个字符串s和整数n,定义一个函数将字符串s循环向右移动n位,n为负数时左移。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

若s为空串’‘,则不论n为多少,均输出’‘‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

如 s=‘123456’ n=3‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

输出结果:456123

tip:

  1. 可以联想到循环队列结构
def f(s,n):p=''if s=='':return pt=(len(s)-n)%len(s)p=s[t:]p+=s[:t]   return ps=input()
n=int(input())
print(f(s,n))

汽车迷
描述

小明是一个汽车迷,看到什么汽车马上就可以说出汽车的生产年份、型号和品牌。定义一个函数,可以输出汽车的介绍。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

例如输入:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

2020 AMG_S65 奔驰‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

可以输出:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

这是一辆2020年生产,型号是AMG_S65的奔驰牌汽车‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

要求函数具有以下功能:当用户只输入生产年份、型号时,品牌按“宝马”输出。

tip:

  1. 函数关键字传参
def Car(a, b, c='宝马'): # 括号里补充你的代码# 补充你的代码return f'这是一辆{a}年生产,型号是{b}的{c}牌汽车。'
# 以下内容不要修修改
ls = input().split()  # 根据空格切分输入字符串为列表
print(Car(*ls))       # 取列表中的全部数据做参数

07集合


自幂数
tip:

  1. 提前建立数值列表的方法多次出现了,引起重视
n = eval(input())
nums = '0123456789'
ls = [x**n for x in range(10)]# 一次性建立数值列表减少计算量
for num in range(10**(n-1), 10**n):total = 0 for s in str(num):total += ls[int(s)]if num == total:print(num)

手机号替换
tip:

  1. 字符串替换方法repalce(old, new, max)的第三个参数有时不可省略,因为如若不指定,解释器会从头查找子串,第三个参数max规定替换的子串数量上限
# 字符串切片拼接法
s = input()
print(s[0:3] + '****' + s[7:11])
print(s[:3] + '****' + s[7:])# 字符串替换方法
s = input()    # 13988776777
print(s.replace(s[3:7], '****',1))  # 139****6777
s_new = s.replace(s[3:7],'****',1)  # 4-7位上的字符替换为“****”,只替换一次
print(s_new)                        # 139****6777# 可以直接将str.replace()函数 作为print()的参数直接输出其返回值
print(s.replace(s[3:7],'****',1))   # 返回值是替换后的字符串,139****6777
print(s)
# 第三个参数 max不可省略,否则某些数据会替换异常
print(s.replace(s[3:7],'****'))
​
# 例如输入 13413413413,替换后的字符串,****34****3
# s[3:7]的值是'1341',解释器会从头开始查找子串'1341'并替换
# 例如输入 13912341234,替换后的字符串,139********
# s[3:7]的值是'1234',解释器会从头开始查找子串'1234'并替换

此题的参考答案并不严谨,即使指定max参数,仍可能替换错误,因为解释器从头开始匹配子串。

>>> s = '13413413413'
>>> s.replace(s[3:7], '****',1)
'****3413413'

本题采用切片拼接的方法更为合适。

08列表元组


完美立方数
tips:

  1. 构造列表数组减少计算量
  2. 如果range的关键字大小逆序,并不会报错,而是直接跳过(遍历空数组,python特性)
N =  int(input())
ls = []
for i in range(1,N + 1): #计算一次i的三次方存于列表,可减少计算量ls.append(i * i * i)
for a in range(2,N + 1):  #a从2-N
#for a in range(6,N + 1):  #小于6无满足条件的数,可减少计算量for b in range(2,a):  #b,c,d都不会大于a,这样可减少计算量for c in range(b,a):  #c大于等于bfor d in range(c,a):  #d大于等于c,此设置保证非降序if ls[a-1] == ls[b-1] + ls[c-1] + ls[d-1]:#if a * a * a == b * b * b + c * c * c + d * d * d :print("Cube = {},Triple = ({},{},{})".format(a,b,c,d))

奇数阶幻方
tip:

  1. 更新下标
def ODD(n):ls = [[0 for i in range(n)] for i in range(n)]x, y = 0, n//2for num in range(1, n**2 + 1):ls[x][y] = num xa, ya = x-1, y+1if xa < 0:xa = n-1if ya > n-1:ya = 0if ls[xa][ya] != 0:x = x+1if x > n-1:x = 0else:x, y = xa, yareturn ls n = eval(input())
result = ODD(n)
for row in result:print(row)

约瑟夫环问题
据说著名历史学家 Josephus有过以下的故事:Josephus及他的朋友共41人围成一个圆圈,由第1个人开始报数,每数到3该人就必须出去,然后再由下一个人重新报数,直到圆圈上少于3人为止。Josephus 将朋友与自己安排在第16个与第31个位置,成为最后剩下的人。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

扩展这个问题,当人数为n,每次报数为k时,求解最后的K-1个剩下的人的位置
tip:

  1. 这是一个经典问题
n, k = map(int, input().split())
ls = list(range(1,n+1))
while len(ls) > k-1:ls = ls[k:] + ls[:k-1]# 核心
print('Data Error!') if (k < 2 or n < k) else print(ls)

09集合


加密字符串

tips:

  1. 去重后的排序关键字,依据可以是字符串也可以是列表字符串,可以混搭
  2. 获取未出现过的元素,可用集合减法
  3. 字符串构建映射字典来完成元素替换
import stringuppercase = string.ascii_uppercase
s = input().upper()# 原始单词
word = list(set(s))# 单词去重
word.sort(key = s.index)# 去重后按原始单词排序
code = list(set(uppercase)-set(word))# 利用集合运算清除单词中出现的重复字母
code.sort()
keys = ''.join(word+code)# 合并构成密钥
d = str.maketrans(uppercase, keys)# 利用字符串方法创建映射字典,一一对应
decode = input().upper()
print(decode.translate(d))# 通过映射字典解码

列表去重

name_lst = input().split(',')                         # 输入的字符串节分为列表
name_no_duplicate = list(set(name_lst))               # 去除重复的元素
print(sorted(name_no_duplicate, key=name_lst.index))  # 按名字在原列表中出现的顺序排序

10字典


英汉字典
答案解析有误

import string
d = {}
with open('dicts.txt', 'r', encoding = 'utf-8') as f:for line in f:line = line.strip().split()d.update(dict({line[0]:line[1:]}))# 在这里,遗漏了词的译文
ls = input().lower()
ls = ls.replace("'s",' is')
ls = ls.replace("n't",' not')
for x in string.punctuation:ls = ls.replace(x, ' ')
ls = ls.split()
for s in ls:if not d.get(s):print(s,'自己猜')else:print(s, *d.get(s))

12随机数


计算概率

描述

A和B两个赌徒各有一百块钱,他们通过抛硬币来赌,正面朝上A赢,B要给A十块钱,反面朝上B赢,A要给B二十块钱,一直持续其中一个人把钱输光为止。请用随机数计算A和B最后把钱输光的概率各是多少?(结果用百分数表示,保留2位小数)‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

tip:
函数式编程能够提升程序效率(这题不采用函数式编程最后一个测试点过不了)

import randomsd, n = map(int, input().split(','))
random.seed(sd)
cnt = 0
for i in range(n):a, b = 100, 100while a > 0 and b > 0:while a > 0 and b > 0:num = random.randint(0,1)if num == 0:b -= 10a += 10else:a -= 20b += 20else:if a <= 0:cnt += 1
print('A输光的概率为:{:.2%}'.format(cnt/n))
print('B输光的概率为:{:.2%}'.format(1-cnt/n))

vs

import randomdef win():a, b = 100, 100while a > 0 and b > 0:num = random.randint(0,1)if num == 0:b -= 10a += 10else:a -= 20b += 20else:if a <= 0:return 1 return 0sd, n = map(int, input().split(','))
random.seed(sd)
cnt = 0
for i in range(n):if win():cnt += 1
print('A输光的概率为:{:.2%}'.format(cnt/n))
print('B输光的概率为:{:.2%}'.format(1-cnt/n))

python123习题集相关推荐

  1. 滨州学院计算机自荐考试题型,滨州学院2004—2005学年第一学期期末考试计算机科学教育专业02级《数据库原理》试题及答案(3份,另附习题集)...

    内容简介: 滨州学院2004-2005学年第一学期期末考试计算机科学教育专业02级<数据库原理>试题及答案(3份) <数据库原理>模拟试题一 一.选择题(每题1分,共5分) 1 ...

  2. c语言一对圆括号不能,C语言单元习题集

    <C语言程序设计>习题集 程序设计基本概念 1. 一个C程序可以包含任意多个不同名的函数,但有且仅有一个(b),一个C程序总是从它开始执 行. (A)过程 (B)主函数 (C)函数 (D) ...

  3. python123测试3平方根格式化,【Python3学习】走进Python

    Python语言的概述 Pyhthon 是 蟒蛇的意思. python语言的拥有者是 Python Software Foundation(PSF) RSF是一个非盈利组织,致力于保护Python语言 ...

  4. python123第九周测验答案2020_运用python123平台助力编程课教学

    2019-2020学年的第一学期,我所在的学院第一次开设了<python语言设计与应用>课程,我承担7个班(48课时/班)的教学任务,共计336课时:其中,工作强度最大的是11月,周课时达 ...

  5. 水利水电工程管理与实务电子版习题_水利水电工程管理与实务复习题集

    内容概要 为了帮助全国二级建造师执业资格考试水利水电专业应考人员进一步理解考试大纲和考试用书,加深对考点和知识点的理解和掌握,提高复习效率,巩固复习效果,提高应考人员的解题能力,本书编委会依据< ...

  6. java程序设计题目_Java程序设计习题集(含答案).doc

    目 录 一.判断题2 二.选择题4 三.填空题17 四.写出下列程序完成的功能25 五.写出下面程序的运行结果29 六.使用Java语言编写程序33 七.简答题34 Java程序设计习题集 一.判断题 ...

  7. python123组合数据类型答案_Python组合数据类型

    集合类型及操作 >集合类型定义 集合是多个元素的无序组合 -集合类型与数学中的集合概念一致 -集合元素之间无序,每个元素唯一,不存在相同元素 -集合元素不可更改,不能是可变数据类型 -集合用大括 ...

  8. reg类型变量综合电路_2014年PLD习题集(含参考答案)数字系统设计

    下载word有问题请添加微信号:xuecool-com或QQ:370150219处理(尽可能给您提供完整文档),感谢您的支持与谅解. 第1章习题 1.1 名词解释 PROM CPLD FPGA ASI ...

  9. python123温度转换-python二级备考 day2

    1. python 语言概述 python 蟒蛇 拥有者 PSF (Python Software Foundation) 非盈利组织,致力于保护python语言 开放.开源.发展 Guido 198 ...

最新文章

  1. [数字图像处理]图像去噪初步(2)--非线性滤波器
  2. 擅长排列的小明 II
  3. SQL Server 2014安装教程
  4. 许昌:让便捷支付成为智慧城市新名片
  5. [编程题] 按照左右半区的方式重新组合单链表
  6. mysql验证身份证号正确_通过SQL校验身份证号码是否正确
  7. 软件测试方法进行调优,性能测试调优过程
  8. ZBrush中Tool工具的保存
  9. 《JavaScript高级程序设计》- 第一章:介绍JavaScript
  10. unity3D 最全资源合集分享
  11. MATLAB 数学应用 微分方程 常微分方程 求解捕食者-猎物方程
  12. 等待其他线程执行完后执行(CountDownLatch)
  13. 从语义网络到知识图谱
  14. 使用EasyExcel的坑
  15. iFunk超极本或出新,你最想知道什么
  16. 【论文阅读】【HLLDA】 A Hierarchical Model of Web Summaries
  17. html+css轮播图
  18. mysql锁表原因及解决
  19. 安装画图工具kolourpaint
  20. 华为p20Android怎么解开,【华为P20】解锁EMUI8.1系统下华为P20的各种玩法新技巧

热门文章

  1. 鸿蒙OS2.0 demo来了, 运动手表上的app
  2. deepin20.3 安装opendaylight
  3. 游龙传说服务器维护,炉石传说服务器维护故障补偿方案详细内容
  4. 预测赢家_新敏捷—赢家
  5. 边充电边玩手机会爆炸吗?
  6. Mac 安装jdk及环境变量配置
  7. html tabcontrol模板,WPF TabControl模板+ ItemContainerStyle
  8. 微信小程序滑动侧边栏
  9. 富士通服务器怎么配置u盘装系统,富士通笔记本用绿叶u盘装系统时启动菜单找不到u盘选项怎么办...
  10. 前端程序员需要了解的JavaScript之高级部分知识