当前位置: 首页 > news >正文

Python作业答疑

1. 旋转字符串

1.1 问题描述

给定一个字符串(以字符数组的形式)和一个偏移量,根据偏移量原地从左向右旋转字符串。

1.2 问题示例

输入str="abcdefg"offset=3,输出"efgabcd"

输入str="abcdefg"offset=0,输出"abcdefg"

输入str="abcdefg"offset=1,输出"gabcdef",返回旋转后的字符串。

输入str="abcdefg"offset =2,输出"fgabcde",返回旋转后的字符串。

提示:在 Python 中,字符串是不能进行修改的,如果要修改字符串中的字符,可以先转换成列表。

要求至少使用到 2 种以上的的解决方法。

1.3 解题思路

1.3.1 使用字符串的切片一
def rotate_str(s, offset):if len(s) > 0:# 如果offset = offset % len(s)# 使用切片s = s[-offset:] + s[0:len(s)- offset]return ss = input("请输入一个字符串")
offset = int(input("请输入偏移量"))
s = rotate_str(s, offset)
print(s)
1.3.2 使用列表的 popinsert方法
def rotate_str_(s, offset):if len(s) > 0:offset = offset % len(s)# 转换成列表lst = list(s)for i in range(offset):lst.insert(0, lst.pop())# 返回字符串    return "".join(lst)s = input("请输入一个字符串")
offset = int(input("请输入偏移量"))
s = rotate_str_(s, offset)
print(s)
1.3.3 使用字符串的切片二
def rotate_str_01(s, offset):if len(s) > 0:offset = offset % len(s)# 原字符串扩大 2 倍s = (s * 2)[len(s) - offset:2 * len(s) - offset]return ss = input("请输入一个字符串")
offset = int(input("请输入偏移量"))
s = rotate_str_01(s, offset)
print(s)

2. 相对排名

2.1 问题描述

根据N名运动员得分,找到相对等级和获得最高分前 3名的人,分别获得金牌、银牌和铜牌。N是正整数,并且不超过10 000。所有运动员的成绩都保证是独一无二的。

2.2 问题示例

输入运动员的得分 [5,4,3,2,1],输出["金牌","银牌","铜牌","4","5"],前3名运动员得分较高,根据得分依次获得金牌、银牌和铜牌。对于后两名运动员,根据分数输出相对等级。

输入运动员的成绩[6,5,1,8,4,3],输出 ["银牌","铜牌",6,"金牌",4,5]

提示:输入的运动员成绩不一定刚开始就是有序的。

2.3 解题思路

#运动员的成绩
scores = [6, 5, 1, 8, 4, 3]
# 由高向低排序成绩
sort_scores = sorted(scores, reverse=True)
# 保存每一个成绩的名次
dic = {}
for i in range(len(sort_scores)):if i == 0:dic[sort_scores[i]] = "金牌"elif i == 1:dic[sort_scores[i]] = "银牌"elif i == 2:dic[sort_scores[i]] = "铜牌"else:dic[sort_scores[i]] = i + 1res = []
for i in scores:res.append(dic[i])
print(res)
'''
['银牌', '铜牌', 6, '金牌', 4, 5]
'''

3. 下一个更大的数

3.1 问题描述

  • 两个不重复的数组nums1nums2,其中nums1nums2的子集。
  • nums2的相应位置找到nums1所有元素的下一个更大数字。nums1中的数字x的下一个更大数字是nums2x右边第1个更大的数字。
  • 如果它不存在,则为此数字输出-1nums1nums2中的所有数字都是唯一的,nums1nums2的长度不超过1000

3.2 问题示例

输入nums1=[4,1,2]nums2=[1,3,4,2],输出[-1,3,-1]

  • 对于第1个数组中的数字4,在第2个数组中找不到下一个更大的数字,因此输出-1
  • 对于第1个数组中的数字1,第2个数组中的下一个更大数字是3
  • 对于第1个数组中的数字2,第2个数组中没有下一个更大的数字,因此输出-1

提示:注意审题。

3.3 解题思路

3.3.1 使用列表的index方法

nums1 = [4, 1, 2]
nums2 = [1, 3, 4, 2]res = []
for i in nums1:# 在nums1中的数字在nums2中的位置pos = nums2.index(i)flag = -1# 是否存在比自己大的数字if len(nums2)-1 >= pos + 1 is not None and nums2[pos + 1] > i:flag = nums2[pos + 1]res.append(flag)print(res)
'''
输出结果
[-1, 3, -1]
'''

3.3.2 使用栈

nums1 = [4, 1, 2]
nums2 = [1, 3, 4, 2]
# 保存结果
res = {}
# 栈
stack = []
for i in nums2:# 查找栈顶数据是否比自己小if len(stack) > 0 and stack[-1] < i:res[stack[-1]] = istack.pop()stack.append(i)
for i in stack:res[i] = -1for i in nums1:print(res[i], end=" ")

提示,也可以先把nums2中的数字按先后顺序压入到栈中,然后提取栈顶数据,

nums1 = [4, 1, 2]
nums2 = [1, 3, 4, 2]res = {}
stack = []
# 把nums2中的数字全部压入栈中
for i in nums2:stack.append(i)
pre_top = None
for i in range(len(stack)):# 提取栈顶数据top = stack[-1]if pre_top is not None and top < pre_top:res[top] = pre_topelse:res[top] = -1     pre_top = stack.pop()
for i in nums1:print(res[i], end=" ")

4. 点积

4.1 问题描述

给出2个列表,求它们的点积。

4.2 问题示例

输入为A=[1,1,1]B=[2,2,2],输出为61*2+1*2+1*2=6。输入为A=[3,2]B=[2,3,3],输出为-1,没有点积。

提求:至少 2 种方法实现。直接使用列表和numpy

4.3 解题思路

4.3.1 使用列表
a = [1, 1, 1]
b = [2, 2, 2]
res = 0
if len(a) == len(b):for i in range(len(a)):res += a[i] * b[i]
print(res)
4.3.2 使用 numpy
import numpy as np
a = [1, 1, 1]
b = [2, 2, 2]
res = 0
a = np.array(a)
b = np.array(b)
res = a.dot( b)
print(res)

5. 查询区间

5.1 问题描述

给定一个包含若干个区间的List列表,长度是1000,如[500,1500][2100,3100]。给定一个number,判断number是否在这些区间内,返回TrueFalse

5.2 问题示例

输入是lst=[[100,1100],[1000,2000],[5500,6500]]number=6000,输出是True,因为6000在区间[5500,6500]

输入是lst=[[100,1100],[2000,3000]]number=3500,输出是False,因为3500不在lst的任何一个区间中。

5.3 解题思路

lst = [[100, 1100], [1000, 2000], [5500, 6500]]
number = 6000
is_exist = False
for i in lst:if number >= min(i) and number <= max(i):is_exist = Truebreak
print(is_exist)

6. 新郎和新娘

6.1 问题描述

有三对情侣结婚,假设三个新郎为A、B、C,三个新娘为X、Y、Z

有参加婚礼的人搞不清谁和谁结婚,所以去询问了这六位新人中的三位,得到的回答为:

  • 新郎A说他要和新娘X结婚;
  • 新娘X说她的未婚夫是新郎C
  • 而新郎C说他要和新娘Z结婚。
  • 听到这样的回答后,提问者知道他们都是在开玩笑,说的都是假话,但他仍搞不清谁和谁结婚。

现在请编程求出到底哪位新郎和哪位新娘结婚。

6.2 解题思路

xin_lang = ["A", "B", "C"]
for x in xin_lang:for y in xin_lang:for z in xin_lang:if x != xin_lang[0] and x != xin_lang[2] and z != xin_lang[2] and x != y and x != z and y != z:print("X", x)print("Y", y)print("Z", z)

7. 编写求平均分的函数

7.1 问题描述

输入学生的成绩,把学生的成绩传入自定义函数,函数输出学生成绩的平均分。

提示:学生人数不限。自定义函数接收一个列表,输出平均分。

7.2 解题思路

def get_avg(lst):s = 0for i in lst:s += ireturn s / len(lst)scores = []
for i in range(5):s = int(input("请输入学生成绩"))scores.append(s)res = get_avg(scores)
print(res)

8.提取单词

8.1 问题描述

如有一个字符串”this is a test”请根据用户指定的单词位置,输出单词。如 用户输入 4 ,则输出 test。

提示:必须通过调用自定义函数实现效果。

8.2 解题思路

def get_word(s, pos):lst = s.split(" ")return lst[pos - 1]
#
s = "this is a test"
w = get_word(s, 4)
print(w)

9. 求年龄

9.1 问题描述

有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁,问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁,最后问第一个人,他说是10岁。请问第五个人多大?

9.2 解题思路

age=10
def get_age(age):for i in range(4):age=age+2return  age
print (get_age(age))

10. 回文数函数

10.1 问题描述

实现判断一个数是不是回文数的函数。

10.2 解题思路

def get_huiwei(num):if str(num)[::-1] == str(num):return Truereturn False
print(get_huiwei(12312))
http://www.lryc.cn/news/254809.html

相关文章:

  • 计算机网络实用工具之Hydra
  • AUTOSAR 入门
  • 新版IDEA中,module模块无法被识别,类全部变成咖啡杯无法被识
  • vue.js el-table 动态单元格列合并
  • word模板导出word文件
  • debianubuntu的nvidia驱动升级
  • 【开源视频联动物联网平台】视频接入网关的用法
  • 【bug排查解决】现象级延迟8-10s
  • 【人生感悟】不能对一个人太好是有心理学原理的
  • 动态规划学习——最长回文子序列,让字符串变成回文串的最小插入次数
  • CSS新手入门笔记整理:CSS列表样式
  • 12月07日,每日信息差
  • spring mvc理解
  • HTML-标签之文字排版、图片、链接、音视频
  • 圣诞将至—C语言圣诞树代码来啦
  • Git常用命令#merge分支合并
  • Windows server 2019 域环境部署
  • Cocos Creator加入图片没有被识别
  • java double类型保留两位小数并去除后面多余的0
  • C++学习寄录(九.多态)
  • 【Linux基础开发工具】yum生态vim的配置与使用
  • java-HashMap、TreeMap、LinkedHashMap、ArrayList、LinkedList使用笔记
  • Oracle中mybatis批量更新报错ORA-00933:SQL命令未正确结束
  • Mysql综合案例练习<1>
  • Linux系统编程:线程总结
  • activemq启动成功但web管理页面却无法访问
  • 【Flink on k8s】- 0 - Flink kubernetes operator 快速入门与实战
  • 毕设:《基于hive的音乐数据分析系统的设计与实现》
  • PHP使用HTTP代码示例模板
  • 头歌题目-数组