首页 > 其他分享 >第33次CSP认证模拟的教训

第33次CSP认证模拟的教训

时间:2024-09-12 19:15:09浏览次数:12  
标签:__ return matrix 33 self 认证 array CSP def

在写第三题化学方程式配平的时候,我用的是Python,决定写两个类来更好的实现逻辑。

主要就是Array类,能像numpy那样对整个数组的元素进行操作。

但是写完之后运行总报错有None参与运算或者Array不支持除法等(我寻思着有实现__div__啊)

以下是我收获的教训:

1.魔法方法的增量赋值运算符如__iadd__等实现+=效果的,要返回self,不能没有返回值

我一开始就是没有返回值,导致运算中出现了None

2.除法是truediv而不是div,得和整除floordiv区分

我以为除法就是div,加上pycharm没有提示,就自以为是的用div,导致一直报错
附随便找的一个魔术方法大全

下面贴一下最后通过的代码

class Array:
    def __init__(self, array: list[int]):
        self.array = array

    def __mul__(self, other: int|float):
        return Array([i*other for i in self.array])

    def __rmul__(self, other):
        return self.__mul__(other)

    def __imul__(self, other):
        for i, val in enumerate(self.array):
            self.array[i] = val * other
        return self

    def __truediv__(self, other):
        return Array([i/other for i in self.array])

    def __itruediv__(self, other):
        for i, val in enumerate(self.array):
            self.array[i] = val / other
        return self

    def __sub__(self, other):
        # array - array
        return [self.array[i]-other.array[i] for i in range(len(self.array))]

    def __isub__(self, other):
        for i, val in enumerate(self.array):
            self.array[i] = val - other.array[i]
        return self

    def __add__(self, other):
        # array - array
        return [self.array[i] + other.array[i] for i in range(len(self.array))]

    def __iadd__(self, other):
        for i, val in enumerate(self.array):
            self.array[i] = val + other.array[i]
        return self

    def is_zero(self):
        return all(i==0 for i in self.array)

    def __len__(self):
        return len(self.array)

    def __getitem__(self, item):
        return self.array[item]

    def __repr__(self):
        return str(self.array)


class Matrix:
    def __init__(self, matrix=None):
        if matrix is None:
            self.matrix = [[]]
            self.m = 0
            self.n = 0
        else:
            self.matrix = matrix
            self.m = len(matrix)
            self.n = len(matrix[0])

    def exchange(self, i, j):
        self.matrix[i], self.matrix[j] = self.matrix[j], self.matrix[i]

    def normalize(self, i, j):
        self.matrix[i] /= self.matrix[i][j]

    def eliminate(self, i, j, col):
        if self.matrix[j][col] == 0:
            return
        k = self.matrix[j][col] / self.matrix[i][col]
        self.matrix[j] -= self.matrix[i] * k

    def nonzero_col(self, r, j):
        for i in range(r, self.m):
            if self.matrix[i][j]:
                return i
        return -1

    def __getitem__(self, item):
        return self.matrix[item]

    def __str__(self):
        return str(self.matrix)


def str_process(s: str) -> dict[str, int]:
    dic = {}

    li = []
    start = 0
    for i in range(1, len(s)):
        if s[i].isalpha() and s[i-1].isdigit() or s[i].isdigit() and s[i-1].isalpha():
            li.append(s[start:i])
            start = i
    li.append(s[start:])
    for i in range(0, len(li), 2):
        dic[li[i]] = int(li[i+1])
    return dic

def check(material: list[str]):
    li = [str_process(s) for s in material]
    dic = {}
    for d in li:
        for key in d.keys():
            dic[key] = []
    for d in li:
        for key in dic.keys():
            dic[key].append(d.get(key, 0))
    matrix = Matrix([Array(i) for i in dic.values()])

    if matrix.m < matrix.n:
        return True

    r = 0
    for j in range(matrix.n):
        row = matrix.nonzero_col(r, j)
        if row == -1:
            continue
        if row != r:
            matrix.exchange(r, row)
        matrix.normalize(r, j)
        for i in range(r+1, matrix.m):
            matrix.eliminate(r, i, j)
        r += 1
    if r < matrix.n:
        return True
    else:
        return False


n = int(input())

for _ in range(n):
    m, *mat = input().split()
    print("Y" if check(mat) else "N")

'''
1
4 al2s3o12 n1h5o1 al1o3h3 n2h8s1o4

'''

标签:__,return,matrix,33,self,认证,array,CSP,def
From: https://www.cnblogs.com/faf4r/p/18410866

相关文章

  • 和平精英游戏启动错误?和平精英_323393.exe找不到入口的终极解决方案
    针对“和平精英游戏启动错误?和平精英_323393.exe找不到入口”的问题,这里提供一套终极解决方案,旨在帮助玩家快速定位问题根源并修复,从而恢复游戏的正常运行。终极解决方案1.检查系统文件完整性使用系统文件检查器(SFC):打开命令提示符(以管理员身份运行),输入sfc/scannow命令并......
  • 详解新规|逐条剖析《电子政务电子认证服务管理办法》
    《电子政务电子认证服务管理办法》已在2024年8月26日国家密码管理局局务会议审议通过,并于9月10在国家密码管理局官网正式公布,自2024年11月1日起施行。来源|公开资料图源|Pixabay编辑|公钥密码开放社区为了规范电子政务电子认证服务行为,对电子政务电子认证服务机构实施监督管理,保障电子......
  • ccie和hcie要怎么选?摸清高级认证的选择技巧
    当下,众多大学生都期望能够充分借助在校的充裕时光去考取相关证书,如此一来,待到毕业寻觅工作之际便能增添一项有力的加分筹码。网络工程师这一职业,在当下可谓是炙手可热,备受大学生们的青睐。而ccie和hcie作为IT领域极具权威性的专业认证,毫无疑问受到了大家的热切关注。那么,究竟......
  • 详解新规|逐条分析《电子认证服务管理办法(征求意见稿)》修订重点
    近日,工信部就《电子认证服务管理办法(征求意见稿)》公开征求意见。来源|公开资料图源|Pixabay编辑|公钥密码开放社区《电子认证服务管理办法》(以下简称《办法》)于2009年2月18日由中华人民共和国工业和信息化部发布,并在2015年4月29日进行了修订。该《办法》包括总则、电子认证服务机构、......
  • 什么是Carplay认证?什么样的Carplay认证过程?
    在当今的数字化时代,汽车不再仅仅是交通工具,更是人们生活中不可或缺的一部分。随着智能科技的不断发展,车载系统逐渐变得智能化和互联化。其中,CarPlay作为苹果公司推出的一款车载系统,凭借其简洁、直观和安全的操作体验,赢得了广大车主的喜爱。然而,要想让自己的车辆支持CarPlay功能,并不......
  • AndroidAuto认证难吗?需要准备哪些资料?
    在当前的数字化时代,汽车不再仅仅是交通工具,更是集成了众多智能技术的移动空间。其中,AndroidAuto作为连接手机与车载系统的桥梁,为驾驶者提供了更加便捷、智能的驾驶体验。然而,对于许多汽车制造商和车载系统开发者来说,AndroidAuto认证成为了一个绕不开的话题。那么,AndroidAuto认证......
  • ISO 9001认证:驱动企业高效管理与市场信任的双引擎
    ISO9001认证的最大优势之一,就是通过标准化管理,帮助企业从根本上提升运营效率。它要求企业在管理中设置清晰的流程和责任分工,从而避免了由于管理不当、流程不畅所导致的运营混乱。这种系统化的管理模式不仅让企业能够快速适应市场变化,还能够减少产品返工、次品和流程中的浪费现象,帮......
  • 2021 CSP-J 完善程序3
    2021CSP-J完善程序31完善程序(单选题,每小题3分,共30分)(矩形计数)平面上有n个关键点,求有多少个四条边都和x轴或者y轴平行的矩形,满足四个顶点都是关键点。给出的关键点可能有重复,但完全重合的矩形只计一次。试补全枚举算法#include<stdio.h>structpoint{ intx,y,id;}......
  • WIFI中EAP-AKA-PRIME认证分析
    WIFI中EAP-AKA-PRIME认证分析一概述EAP-AKA'isanewEAPmethodthatfollowstheEAP-AKAspecification  [RFC4187]inallrespectsexceptthefollowing:   ItusestheTypecode50,not23(whichisusedbyEAP-AKA).   ItcarriestheAT_KDF_......
  • 2022 CSP-J 阅读程序3
    12022CSP-J阅读程序3阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填√,错误填×;除特殊说明外,判断题1.5分,选择题3分)源代码#include<iostream>usingnamespacestd;intn,k;intsolve1(){intl=0,r=n;while(l<=r){intmid=(l+r)/......