【程设の旅】Python速通作业三

news/2025/3/25 19:30:16/文章来源:https://www.cnblogs.com/namelessstory/p/18788347

这节课老师讲了Python的面向对象部分

速度比较快 但是结合前面cpp的大部分知识可以弄懂
最后一道题估计是py特性了 可以理解但是那两个函数不知道是什么鬼

01:运算符的实现

描述

程序填空

 class A:def __init__(self,x):self.x = x
// 在此处补充你的代码
a,b,c = map(int,input().split())
print(isinstance(A(2),A))
print(A(a) < A(b))
print(A(a) >= A(c))
print(A(a) < c)

输入

输入三个整数a,b,c

输出

先输出一行True
然后
依次输出 a < b, a >= c , a < c 三个表达式的值(True或False)

样例输入

2 8 5

样例输出

True
True
False
True

Solution

py和cpp的特性差别在于
py并没有报错 直接告诉你要重载啥运算符
我们看题目 需要重载一个小于号和一个大于等于号
小于号要判断类型(相比cpp的重载函数里直接给定类型 这里只要重载一次再判断)
下面看代码:

class A:def __init__(self,x):self.x = xdef __lt__(self,other):if isinstance(other,A):return self.x<other.xelse:return self.x<otherdef __ge__(self,other):return self.x>=other.x
# 在此处补充你的代码
a,b,c = map(int,input().split())
print(isinstance(A(2),A))
print(A(a) < A(b))
print(A(a) >= A(c))
print(A(a) < c)

02:组合函数

描述

Python支持高阶函数,即函数可以作为函数的参数和返回值
下面程序的combine函数 combine(f,g)能得到一个新函数k, k(x) = f(g(x)),请填空

def combine(f,g):
// 在此处补充你的代码
def square(x):return x * x
def double(x):return x + x
n = int(input())
f = combine(square,double)
#提示: f(x) = square(double(x))
print(f(n))
g = combine(f,double)
#提示: g(x) = f(double(x))
print(g(n))

输入

整数n

输出

第一行是 (2n)(2n)的值
第二行是 (2
(2n)) * (2(2*n)) 的值

样例输入

3

样例输出

36
144

Solution

简单题 因为py的返回值类型可以是函数 高度自由
新定义一个函数 然后这个函数的类型是f,g得出的就行

def combine(f,g):def k(x):return f(g(x))return k
# 在此处补充你的代码
def square(x):return x * x
def double(x):return x + x
n = int(input())
f = combine(square,double)
#提示: f(x) = square(double(x))
print(f(n))
g = combine(f,double)
#提示: g(x) = f(double(x))
print(g(n))

03:实现带标签的列表

描述

TaggedList 表示元素带标签的列表。每个元素都有不同标签,标签是字符串。元素可以用整数做下标访问,也可以用标签做下标访问。请给出该类的实现

exit = None
class TaggedList:  #元素带标签的列表
// 在此处补充你的代码
a = TaggedList([70,80,90,100],["语文","数学","英语","物理"])
print(len(a),78 in a, 80 in a) #>>4 False True
print(str(a)) #>>语文:70,数学:80,英语:90,物理:100,
print(a[0],a['数学']) #>>70 80   标签也可以作为下标访问元素
a[1] = a['物理'] = 85
print(a) #>>语文:70,数学:85,英语:90,物理:85,

输入

输出

如样例

样例输入

样例输出

4 False True
语文:70,数学:80,英语:90,物理:100,
70 80
语文:70,数学:85,英语:90,物理:85,

Solution

这题有点烧脑 说实在的
需要你实现一个类 我们先明确题目的要求是什么
填入的是两个列表,我们需要建构一个映射关系
因为题目相当于两个字典合并成一个 前面的数是值 而后面数字的编号和字符串都是键
好了 怎么建立映射关系?
当然是用后面的一个拼接函数来了 然后相当于是一个迭代的字典
然后,我们通过查资料明确 contains getitem 和 setitem都是python用魔术方法定义的函数
最后用str拼接 这道题对于括号内for的用法的要求还蛮高的
下面看代码

exit = None
class TaggedList:  #元素带标签的列表def __init__(self,value,tags):self.values=valueself.tag_index={tag:idx for idx,tag in enumerate(tags)}def __len__(self):return len(self.values)def __contains__(self,item):return item in self.valuesdef __getitem__(self,key):if isinstance(key,int):return self.values[key]return self.values[self.tag_index[key]]def __setitem__(self,key,value):if isinstance(key,int):self.values[key]=valueelse:self.values[self.tag_index[key]]=valuedef __str__(self):return ','.join(f"{tag}:{val}" for tag,val in zip(self.tag_index.keys(),self.values))+','
# 在此处补充你的代码
a = TaggedList([70,80,90,100],["语文","数学","英语","物理"])
print(len(a),78 in a, 80 in a) #>>4 False True
print(str(a)) #>>语文:70,数学:80,英语:90,物理:100,
print(a[0],a['数学']) #>>70 80   标签也可以作为下标访问元素
a[1] = a['物理'] = 85
print(a) #>>语文:70,数学:85,英语:90,物理:85,

04:闭包

描述

程序填空,完成函数cons
按要求输出结果

def cons(x,y):s = a = b = None #防止作弊用
// 在此处补充你的代码
s = input().split()
a,b = s[0],s[1]
pair = cons(a,b)
print(pair(int(input())))

输入

第一行是两个字符串,用空格隔开
第二行是一个整数n

输出

如果n 为0,则输出第一个字符串
如果n 为1,则输出第二个字符串
如果n 为其它数,则输出error

样例输入

#样例1:
13 5
0
#样例2:
4 aa
1
#样例3:
bd c
7

样例输出

#样例1:
13
#样例2:
aa
#样例3:
error

Solution

这道题感觉比上道题简单
因为我们观察到最后的pair还是接收了一个n的
所以推测经过前面pair的处理返回的是一个关于n的函数
然后重写一个函数返回就可以了

def cons(x,y):s = a = b = None def f(n):if n==0:return xelif n==1:return yelse:return "error"return f
# 在此处补充你的代码
s = input().split()
a,b = s[0],s[1]
pair = cons(a,b)
print(pair(int(input())))

总的来说,还是第三题比较难,估计是都重载的一些奇怪的函数,平时比较少见
image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/904380.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C/C++开发文档和常用的输入方式汇总

前几天复习的几种输入方式和帮助文档C/C++开发文档获取 之前下载过应该开发文档,今天push到了Gitee上了。可以随时获取,链接字符串操作 C 字符串 | 菜鸟教程 输入输出【包含字符串】 C 输入 & 输出 | 菜鸟教程 #include<stdio.h> int main() {char s[20];int i = 0…

Eino overview

一段话总结 Eino 是基于Golang的大模型应用开发框架,通过组件抽象(如ChatModel、Tool、Retriever)和图编排能力(Chain/Graph/Workflow)简化LLM应用开发。其核心优势包括类型安全的流处理、并发管理、切面注入以及开箱即用的最佳实践,支持构建复杂智能体(如ReAct)和多模…

llm 量化技术综述

综述: LLM 量化 1. Intro 低比特量化主要是减少tensor的bit-width,可以有效减少内存以及计算需求;主要可以压缩权重, 激活值, 和梯度,使得可以在受限资源的设备上使用。 2. 低比特LLM的基础 在这一届,我们主要引入从以下三个方面讨论:low-bit 数值格式 量化粒度 动态或者静…

Top 出海 AI 公司招技术!HIX.AI Pollo.ai | 深圳

HIX.AI & Pollo.ai 招聘高级海外 AI 产品经理 (25-45K) 岗位职责:负责Web 端海外 AI 产品的规划与策划,负责产品需求分析及原型设计,并制定方案推动产品研发落地; 进行产品/竞品调研,了解用户需求,分析、发现需求本质,并给出对应的解决方案; 有效对接开发、测试、运…

2、切片

一:字符串的下标(索引)--重点 ​ Ⅰ:字符串的特性,被称为下标或者 sequence(序列) ​ Ⅱ:一个序列。若干元素组成 ​ Ⅲ:字符串的下标从0开始》标记每个元素的位置,用来获取元素》从左到右,从0开始> a[0],a[1] ,a[3]》可以用正数表示,也可以用负数表示》最…

WEBGL 学习使用代码

目录杂七杂八第一节 绘制出了一个点第二节 动态传递点数据第三节 缓冲区和画线第四节 彩色线段第五节 单个 buffer 渲染颜色第六节 抽离代码 & 画彩色三角形第七节 图元的七种绘制方式第八节 uniform 传值变换数据第九节 旋转矩阵三角函数矩阵的计算推导代码实现第十节 线框…

Kettle 版本这么多,到底该怎么选?

Kettle(Pentaho Data Integration)作为一款功能强大的开源 ETL(Extract, Transform, Load,即数据抽取、转换和加载)工具,拥有众多版本,这让许多用户在选择时犯了难。 1、提出问题 经常有群友提出使用kettle版本的问题,如下图所示:2、kettle版本 有许多的的历史版本,…

C++实验二

实验一#include <stdio.h>#include <stdlib.h>#include <time.h>#define N 5int main() {int number;int i;srand(time(0)); // 以当前系统时间作为随机种子for(i = 0; i < N; ++i) {number = rand() % 100 + 1;printf("20490042%04d\n", n…

ESP32 Audino 驱动12864点阵屏 自定义中文字库

一.安装u8g2 #include <Arduino.h> #include <U8g2lib.h>U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8X8_PIN_NONE, /* clock=*/22, /* data=*/21); // ESP32 Thing, HW I2C with pin remappingvoid setup(void) {u8g2.begin();u8g2.enableU…

Linux 离线安装 lz4

前言:本文操作是在 CentOS-7 下执行的,不确定在其他 Linux 发布版是否能同样正常执行。1、检查前置依赖组件在安装 lz4 之前,需要确认已安装了相关依赖组件: gcc 。 rpm -qa | grep gcc前置依赖组件的具体离线安装方法请参考:CentOS-7离线安装gcc 2、下载lz4安装包 官方下…

sql语句把图片存入数据库

这是一个小的练习,目的是把图片以二进制字符串形式存入sql数据库表中,后续练习尝试在WINCC把其还原成图片。 在以前的数据库MyDB中新建一个数据表,有四个字段: imageID 类型为bigint,作为标识符,自增1 mydatetime 日期事件类型 imagename varchar(100)数据类型 imagedata…