中级Python编程题(10道)
中级10道
【中级1】给定⻓度为m的⾮重复数组p,以及从其中取n(n<m)个数字组成新的⼦数组q。现要对p进⾏排序,要求:q在数组的最前⽅,其余数字按从⼩到⼤的顺序依次排在后⾯
输⼊样例:
q = [3, 5, 4]
p = [5, 4, 3, 2, 1]
输出样例:
3 5
4 1 2
参考答案:
为了让 q 在数组的最前⽅,我们需要将 q 中的数字在排序后的 p 数组中都
放在第⼀个。
为了让其余数字按从⼩到⼤的顺序依次排在后⾯,我们需要先将 p 中剩余
的数字按从⼩到⼤排序,再将这些数字放在 q 后⾯。
实现起来,我们可以将 p 中的数字全部提取出来,然后对 p 中的数字进⾏
排序,排序后的数组记为 sorted_p。
接着,我们可以创建⼀个新的数组 result,将 q 中的数字依次放⼊
result。
最后,我们遍历 sorted_p,将 sorted_p 中不在 q 中的数字依次放⼊
result。
q = [3, 5, 4]
p = [5, 4, 3, 2, 1]
# 对 p 中的数字进⾏排序
sorted_p = sorted(p)
# 创建⼀个空的列表(数组)result
result = []
# 先把q中的数字依次放⼊result
for ele in q:
result.append(ele)
# 遍历⼀下排好序的p,也即sorted_p, 将sorted_p 中不在q中的元素依次放到result
for num in sorted_p:
if num not in q:
result.append(num)
# 最后,输出结果
print(result)
封装成函数:
def my_sort(p,q):
# 第⼀步,对p进⾏排序
sorted_p = sorted(p)
# 第⼆步,创建⼀个空列表,⽤于保存按要求的排序结果
result = []
# 先把q⾥⾯的元素都放在result⾥⾯
python大数据就业前景for item in q:
result.append(item)
# 再把sorted_p中剩下的元素append到result⾥⾯
for item in sorted_p:
if item not in q:
result.append(item)
return result
# 测试
p = [5, 4, 3, 2, 1]
q = [3, 5, 4]
print(my_sort(p, q))
【中级2】给定⼩写英⽂字符串a和⼀个⾮负数b(0<=b<26), 将a中的每个⼩写字符替换成字⺟表中⽐它⼤b的字⺟。这⾥将字⺟表的z和a相连,如果超过了z就回到了a。
输⼊样例:
a = "dfjkldfdfdl"
b = 5
输出⽰例:
ikopqikikiq
参考答案:
为了实现题⽬要求,我们需要对 a 中的每个字符进⾏替换。替换的⽅法
是:计算出字⺟表中该字符⽐它⼤ b 的字符,然后将该字符替换为⼤ b 的字符。
例如,如果字符为 d,b 为 5,则计算出字⺟表中 d ⽐它⼤ 5 的字符为 i,因此需要将 d 替换为 i。
我们可以使⽤ ord 函数将字符转换为 ASCII 码,然后再使⽤ chr 函数将ASCII 码转换为字符。
下⾯是实现代码:
a = "dfjkldfdfdl"
b = 5
# 定义⼀个空的字符串,⽤于保存结果
result = ""
# 遍历a中的每个字符,并对其加5
for letter in a:
# 计算出字⺟表中⽐letter⼤b(这⾥是5)的字符
# ⾸先我们要得到 ascii码(使⽤ord函数)
letter_new_code = (ord(letter) - ord('a') + b) % 26 + ord('a')
# 然后我们将 ascii 码转为字⺟(使⽤chr函数)
letter_new = chr(letter_new_code)
result += letter_new
# 打印结果
print(result)
封装成函数:
def solution(a, b):
# 定义⼀个空的字符串,来保存结果
result = ""
# 遍历字符串a中的每个字符,对其进⾏加密操作
for letter in a:
# 计算该字⺟对应的新字⺟的ascii码
new_letter_ascii = (ord(letter) + b - ord('a')) % 26 + ord('a')
# 将ascii码转换成字⺟
new_letter = chr(new_letter_ascii)
result += new_letter
return result
a = "dfjkldfdfdl"
b = 5
print(solution(a,b))
【中级3】给定整数a,计算a在⼆进制表⽰下1的个数,并输出。
输⼊样例:
a = 39
输出样例:
4
参考答案(复杂):
为了求出 a 在⼆进制表⽰下 1 的个数,我们可以使⽤⼀个计数器来统计 1 的个数。每检测到⼀个 1,就将计数器加 1。
a = 39
# 定义⼀个计数器,来统计1的个数
counter = 0
# 遍历 a 的⼆进制表⽰中的每⼀位
for i in range(128):
# 使⽤位运算符 & 来监测第i位是否为1
if a & (1 << i) != 0:
# 说明第i位上a有1,那么计数器加1
counter += 1
# 输出结果
print(counter)
参考答案(简单):
使⽤bin函数,bin(int)返回⼀个整数的⼆进制表⽰的字符串,以”ob”开头。
a = 39
counter = 0
str_bin = bin(a)[2:]
for s in str_bin:
if s == '1':
counter += 1
print(counter)
封装成函数:
def solution(a):
counter = 0 # 初始化⼀个计数器
str_bin = bin(a)[2:] # 得到该数的⼆进制表⽰的字符串
for s in str_bin:
if s == '1': # 如果出现了1,计数器加1
counter += 1
# 返回结果
return counter
print(solution(39))
【中级4】克拉兹猜想:任取⼀正整数(⼤于2),如果是偶数,将其除以2。如果是奇数,将其乘以3再
加1,然后重复这个过程,最后结果都会陷⼊4 2 1 的循环。请通过编程实现,当4,2,1重复第⼆次的时候,结束循环,并打印整数为19时的输出列表。
输⼊样例:
a = 19
输出样例:
19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2, 1
参考答案:
为了实现克拉兹猜想,我们可以使⽤⼀个 while 循环来完成。在循环中,我们需要不断进⾏如下操作:
1. 如果当前整数是偶数,则除以 2。
2. 如果当前整数是奇数,则乘以 3 并加 1。
3. 将当前整数加⼊输出列表中。
4. 如果当前整数为 4, 2 或 1,并且在列表中出现了两次,则退出循环。
# 定义⼀个克拉兹猜想(数学家杀⼿)的函数
def collaz_conjecture(a):
# 定义⼀个输出的列表,来保存“线路”
result = []
while True:
# 如果是偶数:除以2
if a % 2 == 0:
a = a // 2
# 如果是奇数:乘3再加1
else:
a = 3 * a + 1
# 将每次运算的记录保存起来
result.append(a)
# 停⽌循环:只要出现了两次1(相当于是出现了两次4-2-1),我们就停⽌循环
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论