python析构函数__del__的行为

python类的

__del__()

函数在执行之前发生了什么?

我想在类的析构函数中保存数据,以防成员函数出现异常数据没有保存,现在我在析构函数中调用open()函数会出现错误
图片说明

是什么原理,python在执行del前就已经释放了一些资源么?

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
利用python对excel进行截图并保存的时候,经常性出现excel没有正常关闭,导致截图失败。
利用python对excel进行截图并保存的时候,经常性出现excel没有正常关闭,导致截图失败。源代码如下: # -*- coding:utf-8 -*- # Datetime:2019/12/30 11:45 # Author:sys from win32com.client import Dispatch, DispatchEx import pythoncom,os from PIL import ImageGrab, Image import uuid #coding:utf-8 # screen_area——类似格式"A1:J10" ''' 函数参数名:filename:需要截图的文件名和路径 sheetname:需要截图的文件的sheet名称 save_image_name:截图后保存的图片名称,格式为save_image_name.png ''' def Excel_Catch_Screen(filename, sheetname ,save_image_name): """ 对excel的表格区域进行截图——用例:""" filename = os.path.abspath(filename) pythoncom.CoInitialize() # excel多线程相关 excel = DispatchEx("Excel.Application") # 启动excel #del excel #这个地方很重要,杀死excel进程是这个地方起作用 excel.Visible = False # 不显示Excel,而True可视化 excel.DisplayAlerts = True # 是否显示警告,关闭系统警告(保存时不会弹出窗口) workbook = excel.workbooks.Open(filename) # 打开excel sheet = workbook.worksheets[sheetname] # 选择sheet screen_area = sheet.UsedRange #有内容的区域 screen_area.CopyPicture() # 复制图片区域 sheet.Paste() # 粘贴 #img_name='告警截图' img_name=save_image_name excel.Selection.ShapeRange.Name = img_name # 将刚刚选择的Shape重命名,避免与已有图片混淆 sheet.Shapes(img_name).Copy() # 选择图片 img = ImageGrab.grabclipboard() # 获取剪贴板的图片数据 print(img) # 可以弄个报错 img.save(img_name + '.png') # 保存图片 #workbook .Close(SaveChanges=0) # 关闭工作薄,不保存 workbook.Close(False) # 关闭Excel文件,不保存 excel.Quit() # 退出excel del excel #这个地方很重要,杀死excel进程是这个地方起作用 pythoncom.CoUninitialize() # 关闭多线程 os.remove(filename) if __name__ == '__main__': #pass filename = "excel_output.xls" sheetname = 'Sheet1' Excel_Catch_Screen(filename,sheetname,'告警截图') #删除文件 ``` ``` 出现的告警如下图所示: ![图片说明](https://img-ask.csdn.net/upload/202002/03/1580689151_98588.png) 这该怎么处理啊?
python对excel表格内容进行截图并保存的时候,经常性的出现类似告警,哪位帮忙看一下咋解决?
from win32com.client import Dispatch, DispatchEx import pythoncom,os from PIL import ImageGrab, Image import uuid #coding:utf-8 # screen_area——类似格式"A1:J10" ''' 函数参数名:filename:需要截图的文件名和路径 sheetname:需要截图的文件的sheet名称 save_image_name:截图后保存的图片名称,格式为save_image_name.png ''' def Excel_Catch_Screen(filename, sheetname ,save_image_name): """ 对excel的表格区域进行截图——用例:""" filename = os.path.abspath(filename) pythoncom.CoInitialize() # excel多线程相关 excel = DispatchEx("Excel.Application") # 启动excel #del excel #这个地方很重要,杀死excel进程是这个地方起作用 excel.Visible = False # 不显示Excel,而True可视化 excel.DisplayAlerts = True # 是否显示警告,关闭系统警告(保存时不会弹出窗口) workbook = excel.workbooks.Open(filename) # 打开excel sheet = workbook.worksheets[sheetname] # 选择sheet screen_area = sheet.UsedRange #有内容的区域 screen_area.CopyPicture() # 复制图片区域 sheet.Paste() # 粘贴 ''' name = str(uuid.uuid4()) # 重命名唯一值 image_name = name[:6] excel.Selection.ShapeRange.Name = image_name # 将刚刚选择的Shape重命名,避免与已有图片混淆 ''' #img_name='告警截图' img_name=save_image_name excel.Selection.ShapeRange.Name = img_name # 将刚刚选择的Shape重命名,避免与已有图片混淆 sheet.Shapes(img_name).Copy() # 选择图片 img = ImageGrab.grabclipboard() # 获取剪贴板的图片数据 print(img) # 可以弄个报错 img.save(img_name + '.png') # 保存图片 #workbook .Close(SaveChanges=0) # 关闭工作薄,不保存 workbook.Close(False) # 关闭Excel文件,不保存 excel.Quit() # 退出excel del excel #这个地方很重要,杀死excel进程是这个地方起作用 pythoncom.CoUninitialize() # 关闭多线程 os.remove(filename) if __name__ == '__main__': #pass filename = "excel_output.xls" sheetname = 'Sheet1' Excel_Catch_Screen(filename,sheetname,'告警截图') ![图片说明](https://img-ask.csdn.net/upload/202002/03/1580688762_892843.png) 我感觉应该是excel没关闭导致的,该咋弄?
Python多线程通信问题
新人第一次提问, 最近在学习Python多线程, notify()与wait()语句。这是我写的一个作业, 要求是: 现在的你,是一个农场主。农场中养着10头小牛,牛吃草长大,但只有当下雨的时候草才会长大,每天有20%的概率下雨,草经过3次成长后就可以喂给牛吃了。每头小牛吃过5次草之后就会长大了。要求使用多线程来完成。小牛(消费者)线程和草(生产者)之间需要通信。 以下是我的代码: ``` import threading import random from time import sleep """ 声明全局变量: num_cows: 牛的数量, 整形,十头。 cows: 牛的集合, 列表(数组)。 长度:10 num_grass: 草的数量, 整形,若干。 区间:50-101棵。 为了确保每头牛都可以长大,小草必须至少有50棵。 grass: 草的集合, 列表(数组)。 长度:num_grass initial_stat: 草/牛的初始状态,整形,设置为0。 increment: 用于改变状态的变量,整形,设置为0。 """ # 定义全局变量 num_cows, initial_stat, num_grass = 10, \ 0, \ random.randint(50, 101) cows, grass = [], [] for i in range(num_grass): # 设置草儿数量,初始化每一棵小草状态 grass.append(initial_stat) for i in range(num_cows): # 初始化每一头牛 cows.append(initial_stat) # TODO 草儿生长类 class GrassGrow(threading.Thread): """草成长线程""" # TODO 重写run函数 def run(self): global grass global cows while True: ct.acquire() print("一天过去了...小草会不会生长呢?") grass = rain(grass) # 淋雨的草儿成长一次,数位进一, 呼叫rain函数, 传入参数grass列表 if len(grass) > 0: # 判断还有没有需要生长的草儿 if grassgrow(grass): # 检查草儿,若有一株淋到三次雨,通知牛儿吃草 print("提醒牛儿该吃草了") ct.notify() # 提醒牛儿线程该吃草了 ct.release() print("草线程解锁") sleep(1) print("通知牛儿吃草了") elif len(grass) <= 0: # 如果草儿被吃完了,结束进程 print("草儿被吃光啦") ct.release() # 解锁 break # 退出程序 # TODO 牛儿生长类 class CowGrow(threading.Thread): """牛儿成长线程""" print("start") # TODO 重写run函数 def run(self): print("1") global cows global grass # TODO 随机一头牛吃草 while True: print("2") ct.acquire() print("3") ct.wait() print("4") if grassgrow(grass) and 5 not in cows: print("牛有草能吃了") # 长大的小草中,随机吃掉一株,从草儿列表中移除 index = [] for i in range(len(grass)): if grass[i] >= 3: index.append(i) delete = index[random.randint(0, len(index) - 1)] del grass[delete] cows[random.randint(range(len(cows)))] += 1 # 随机一头牛吃草,状态进1 print("有一头牛把吃了一颗草,现在的牛儿们是:{}".format(cows)) # 判断牛儿中是否有长大的牛儿 elif 5 in cows: # 移除所有已经长大的牛儿 for cow in range(len(cows)): if cows[cow] == 5: del cows[cow] # 判断是不是所有的牛儿都长大了,如果都长大了,结束进程 elif len(cows) == 0: print("所有的牛儿都长大啦") ct.release() break ct.wait() ct.release() # sleep(1) # TODO 下雨函数 def rain(grass_list): """ :param grass_list: 接收 草儿列表作为参数 :return: 返回 新的,淋雨之后的草儿列表 """ # 遍历草列表中的每一株草 rain_probability = random.randint(1, 101) # 每天有20%几率局部下雨。如果未下雨,则所有小草都不会成长。如果下雨了,局部小草会成长。 if rain_probability <= 20: for a_grass in range(len(grass_list)): grass_grow_prob = random.randint(1, 101) if grass_grow_prob <= 50 and 0 <= grass_list[a_grass] <= 2: grass_list[a_grass] += 1 print("今天下雨啦,现在的小草们:{}".format(grass)) print("今天没有下雨,没有小草生长...") return grass_list # TODO 判断草长大函数 def grassgrow(grass_list): """ :param grass_list: 接收 草儿列表作为参数 :return: 返回 若有生长好的小草则返回真,否则为假 """ if 3 not in grass_list: print("目前为止还没有小草生长完成") return False else: print("有小草生长完成了,现在的小草们:{}".format(grass)) return True if __name__ == "__main__": ct = threading.Condition() # 定义线程变量, 用于多线程通信 cow_thread = CowGrow() grass_thread = GrassGrow() cow_thread.start() print("牛等待吃草") grass_thread.start() ``` rain函数用来20%几率下雨, grasgrow函数用来判断有没有草淋了三次雨, 一旦有草淋到三次雨就可以了通知CowGrow线程吃草了。 我的解题思路是: 创建一个列表grass代表草, 一个列表cows代表牛。类GrassGrow中当判断grassgrow函数为真时, 唤醒牛线程。然后随机一头牛吃了一颗草之后,阻塞自己等待。而当我实际运行的时候,牛在一开始被阻塞之后一直没有被唤醒 以下是运行结果: ============================================= start 1 2 3牛等待吃草 一天过去了...小草会不会生长呢? 今天没有下雨,没有小草生长... 目前为止还没有小草生长完成 一天过去了...小草会不会生长呢? 今天下雨啦,现在的小草们:[1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1] 今天没有下雨,没有小草生长... 目前为止还没有小草生长完成 一天过去了...小草会不会生长呢? 今天没有下雨,没有小草生长... 目前为止还没有小草生长完成 一天过去了...小草会不会生长呢? 今天下雨啦,现在的小草们:[1, 1, 1, 0, 0, 2, 1, 1, 1, 2, 0, 0, 1, 1, 2, 1, 2, 2, 1, 0, 1, 1, 0, 1, 2, 1, 0, 2, 1, 1, 0, 1, 2, 1, 1, 0, 1, 0, 2, 1, 2, 2, 2, 0, 0, 2, 1, 2, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 2, 1, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 0, 1, 1, 2, 2, 2, 0, 2, 1, 2, 1, 2, 1, 0, 1, 0, 2, 1, 1, 1, 2, 1, 1, 1] 今天没有下雨,没有小草生长... 目前为止还没有小草生长完成 一天过去了...小草会不会生长呢? 今天下雨啦,现在的小草们:[2, 2, 1, 1, 1, 2, 2, 1, 2, 2, 1, 0, 1, 1, 2, 2, 2, 3, 2, 1, 1, 1, 0, 1, 2, 2, 1, 2, 2, 2, 0, 1, 3, 1, 2, 0, 1, 0, 3, 2, 3, 3, 3, 0, 1, 2, 1, 2, 0, 1, 1, 2, 2, 1, 0, 1, 1, 1, 1, 3, 1, 1, 1, 3, 2, 2, 3, 1, 2, 2, 1, 3, 2, 1, 1, 2, 3, 2, 2, 1, 2, 1, 3, 1, 2, 2, 1, 1, 0, 3, 2, 2, 1, 3, 2, 2, 1] 今天没有下雨,没有小草生长... 有小草生长完成了,现在的小草们:[2, 2, 1, 1, 1, 2, 2, 1, 2, 2, 1, 0, 1, 1, 2, 2, 2, 3, 2, 1, 1, 1, 0, 1, 2, 2, 1, 2, 2, 2, 0, 1, 3, 1, 2, 0, 1, 0, 3, 2, 3, 3, 3, 0, 1, 2, 1, 2, 0, 1, 1, 2, 2, 1, 0, 1, 1, 1, 1, 3, 1, 1, 1, 3, 2, 2, 3, 1, 2, 2, 1, 3, 2, 1, 1, 2, 3, 2, 2, 1, 2, 1, 3, 1, 2, 2, 1, 1, 0, 3, 2, 2, 1, 3, 2, 2, 1] 提醒牛儿该吃草了 草线程解锁 通知牛儿吃草了 一天过去了...小草会不会生长呢? ============================================== 可以看到牛只有一开始调用了一次...之后再也没有被唤醒, 而且前几次小草没有sleep就运行了好多次,之后才开始运行sleep,打印"提醒牛儿该吃草了", "草线程解锁", "通知牛儿吃草了"才开始运行。谷歌和本站都查了一些问题,但和我的情况都不太相似。真心像各位请教...拜托了..
Python中用类实现一个字典,但是提示我的代码不安全(作业的)
python 用类实现一个字典,完成单词的增删查改。 本地使用是可以的,但是放到作业系统就提示我“Your core has sensitive words"。 能帮我看看那个函数不安全吗? ``` class Dic: def __init__(self, n): self.num = n self.dic = {} self.word = None def add(self, word): self.word = word en, ch = self.word.split() self.dic[en] = ch def search(self, word): self.word = word if self.word in self.dic.keys(): print(self.dic[self.word]) else: print('meiyou') def dell(self, word): self.word = word del self.dic[self.word] def op1(n): n = int(n) my_dic = Dic(num) for i in range(n): op2 = input() word1 = input() if op2 == 'add': my_dic.add(word1) elif op2 == 'search': my_dic.search(word1) elif op2 == 'del': my_dic.dell(word1) num = input() op1(num) ``` 感谢!!!!!
请教python3.6下的pickle.dump函数用法
请大侠帮我解惑,谢谢! import pickle shoplistfile='shoplist.data' shoplist=['apple','banana','mango'] f=open(shoplistfile, 'wb') pickle.dump(shoplist,f)#把对象储存到打开的文件中 f.close() del shoplist f=open(shoplistfile) storedlist=pickle.load(f) print(storedlist) 结果如下报错: D:\python\python.exe D:/python/程序/pickle.py Traceback (most recent call last): File "D:/python/程序/pickle.py", line 1, in <module> import pickle File "D:\python\程序\pickle.py", line 7, in <module> pickle.dump(shoplist,f)#把对象储存到打开的文件中 AttributeError: module 'pickle' has no attribute 'dump'
如何向Python的内置函数传递自动参数,这个参数是另外函数返回的。
``` # -*- coding: utf-8 -*- def returnTwoNum(a, b): return a,b print(type(returnTwoNum(1, 2))) print(divmod(returnTwoNum(1,2))) ``` 错误提示: <type 'tuple'> Traceback (most recent call last): File "del.py", line 10, in <module> divmod((returnTwoNum(1,2))) TypeError: divmod() takes exactly 2 arguments (1 given) 原本是想要把returnTwoNum返回的两个数传给divmod,但是返回的是tuple,请问这个该如何修改?谢谢
python2.5中无法用next()函数的问题
需要用python写个命令行俄罗斯方块,在网上搜了一个源码,其中一段代码如下,由于该源码作者是在2.7环境下的,所以代码能实现,但是在2.5不行,求问大神如何改才能在2.5中实现到? patterns=u"■" #填充花色 def pTurntable(): while True: for c in patterns: yield c nPattern=pTurntable() print nPattern cellPattern=next(nPattern) ``` 全部代码如下: # -*- coding: cp936 -*- """python2.7 / Windows控制台""" import os,time,random,msvcrt helpInfo=u"""A S D W 操控 Num 1-4 游戏速度 Space 暂停 R 重玩 Q 变换花色 G 屏幕大小 Esc 退出""" gridWidth,gridHeight=10,20 #栅格宽高 rewardDict={1:1,2:3,3:6,4:10} #炸楼/得分表 gears={1:.64,2:.32,3:.16,4:.08} #速度/刷新时间间隔 gameSpeed=1 patterns=u"■" #填充花色■◇●¤◆※▓卐╬囧 def pTurntable(): while True: for c in patterns: yield c nPattern=pTurntable() print nPattern cellPattern=next(nPattern) #cellPattern=nPattern class Tetris(): mino_I=((0,0),(1,0),(2,0),(3,0)) , ((1,-1),(1,0),(1,1),(1,2)) mino_J=((0,0),(0,1),(1,1),(2,1)) , ((0,-1),(0,0),(0,1),(1,-1)) , ((0,0),(2,1),(1,0),(2,0)) , ((0,1),(1,-1),(1,0),(1,1)) mino_L=((0,0),(0,1),(1,0),(2,0)) , ((0,-1),(1,0),(1,1),(1,-1)) , ((0,1),(2,0),(1,1),(2,1)) , ((0,-1),(0,0),(0,1),(1,1)) mino_O=((0,0),(1,0),(0,1),(1,1)) , mino_S=((0,-1),(0,0),(1,1),(1,0)) , ((0,1),(1,0),(1,1),(2,0)) mino_Z=((0,0),(0,1),(1,-1),(1,0)) , ((0,0),(1,1),(1,0),(2,1)) mino_T=((0,0),(1,-1),(1,1),(1,0)) , ((0,1),(1,0),(1,1),(2,1)) , ((0,-1),(0,0),(0,1),(1,0)) , ((0,0),(1,1),(1,0),(2,0)) minos=(mino_I,mino_J,mino_L,mino_O,mino_S,mino_Z,mino_T) def __init__(self): self.matrix=[[0 for c in range(gridWidth)] for r in range(gridHeight)] #栅格:0表示空白,1表示降落中的方块,2表示落地的方块 self.score=0 self.iCY=self.iCY0=gridHeight #基点位置/初始位置 self.iCX=self.iCX0=gridWidth//2-1 self.focusFig,self.focusPos=self._minoRandPick() self.nextFig,self.nextPos=self._minoRandPick() self.cellsCoos=self._cellsCCalc(self.focusPos,self.iCX) #方块所在坐标 self.message=helpInfo def _minoRandPick(self): figure=random.choice(self.__class__.minos) posture=random.choice(figure) return figure,posture def _cellsCCalc(self,pos,cX): coosList=[] for row,col in pos: y,x=row+self.iCY,col+cX if x>=0 and x <gridWidth and y>=0 and y<gridHeight: coosList.append((y,x)) return coosList def _cellsFill(self,value=1): for y,x in self.cellsCoos: self.matrix[y][x]=value def _the911(self): """炸楼""" blackList=[] for r in set(cp[0] for cp in self.cellsCoos): if set(self.matrix[r])=={2}: blackList.append(r) if blackList: count=len(blackList) self.score+=rewardDict[count] for r in sorted(blackList,reverse=True): del self.matrix[r] self.matrix.append([0 for c in range(gridWidth)]) def _gameOver(self): global cellPattern def rOrQ(): key=msvcrt.getch() if key in (b'r',b'R'): self.__init__() return True elif key==b'\x1b': exit() while not msvcrt.kbhit() or not rOrQ(): cellPattern=next(nPattern) self.message=u"游戏结束\n\n┑( ̄Д  ̄)┍\n\n\n> R 重玩\n> Esc 退出" self.display() time.sleep(.5) def fallDown(self): for y,x in self.cellsCoos: if y-1<0 or self.matrix[y-1][x]==2: if self.iCY>=gridHeight-1: self._gameOver() return self._cellsFill(2) self._the911() self.iCX,self.iCY=self.iCX0,self.iCY0 self.focusFig,self.focusPos=self.nextFig,self.nextPos self.cellsCoos=self._cellsCCalc(self.focusPos,self.iCX) self.nextFig,self.nextPos=self._minoRandPick() return self._cellsFill(0) self.iCY-=1 self.cellsCoos=self._cellsCCalc(self.focusPos,self.iCX) self._cellsFill() def speedUp(self): for i in range(3): self.fallDown() def move(self,value): for x in [x+self.iCX for y,x in self.focusPos]: if x+value<0 or x+value>=gridWidth: return for y,x in self.cellsCoos: if (value==-1 and self.matrix[y][x-1]==2) or (value==1 and self.matrix[y][x+1]==2): return self._cellsFill(0) self.iCX+=value self.cellsCoos=self._cellsCCalc(self.focusPos,self.iCX) self._cellsFill() def rotate(self): ##重点是方块靠旁边能正常旋转 ori=1 if gridWidth//2-1>self.iCX else -1 for dev in range(3): nx=self.iCX+dev*ori idx=self.focusFig.index(self.focusPos) fnp=self.focusFig[0] if idx==len(self.focusFig)-1 else self.focusFig[idx+1] nc=self._cellsCCalc(fnp,nx) for y,x in nc: if self.matrix[y][x]==2: return if len(nc)==4 or not [True for c in ((x+nx) for y,x in fnp) if c<0 or c>=gridWidth]: #后面那部分为了刚开始的时候能旋转 break else: return self._cellsFill(0) self.focusPos=fnp self.iCX=nx self.cellsCoos=nc self._cellsFill() def display(self): msgL=self.message.splitlines() blank=u" " brightCell=cellPattern gridBoard=reversed(["".join((brightCell if c else blank) for c in r) for r in self.matrix]) nanoGrid=[[blank for c in range(4)] for r in range(4)] for y,x in self.nextPos: nanoGrid[y][x+1]=brightCell nanoGrid.insert(0,nanoGrid.pop()) nanoBoard=reversed(["".join(c for c in r) for r in nanoGrid]) infoBoard=[u"SCORE: %s"%self.score, "", u"NEXT :"] infoBoard.extend(nanoBoard) infoBoard.extend((u"SPEED: %s"%gameSpeed,"")) infoBoard.extend(list(" "*(gridHeight-9-len(msgL)))) infoBoard.extend(msgL) text="\n".join("".join(x) for x in zip([u"│"]*gridHeight,gridBoard,[u"│ "]*gridHeight,infoBoard)) os.system("cls") print("%s%s%s\n%s\n%s%s%s"%(u"┌",u"─"*gridWidth,u"┐",text,u"└",u"─"*gridWidth,u"┘")) # print("{0}{1}{2}\n{3}\n{4}{1}{5}".format("┌","─"*gridWidth,"┐",text,"└","┘")) def keyPress(tetris): ##方向键会与大写的 H P K M 键重合 global gameSpeed,cellPattern,gridWidth,gridHeight key=msvcrt.getch() if key in ('a','A','K'): tetris.move(-1) elif key in (b'd',b'D',b'M'): tetris.move(1) elif key in (b'w',b'W',b'\r',b'H'): tetris.rotate() elif key in (b's',b'S',b'P'): tetris.speedUp() elif key in (b' ',b'0'): tetris.message=u"§\n■D 已暂停\n\n\n\n> 任意键继续" tetris.display() msvcrt.getch() tetris.message=helpInfo elif key in (b'r',b'R'): if tetris.score!=0: tetris.message=u"重玩会清零得分,是否继续?\n\n(╬▔▽▔)↑ \n\n\n> 按 R 或回车确认\n> 其他任意键返回" tetris.display() if msvcrt.getch() not in (b'r',b'R',b'\r'): tetris.message=helpInfo return tetris.__init__() elif key in (b'1',b'2',b'3',b'4'): gameSpeed=int(key.decode()) elif key in (b'q',b'Q'): cellPattern=next(nPattern) elif key==b'\x1b': exit() elif key in (b'g',b'G'): tetris.message=u"更改尺寸会重置游戏,是否继续?\n\n(╬▔▽▔)↑\n\n\n> 按 G 或回车确认\n> 其他任意键返回" tetris.display() if msvcrt.getch() not in (b'g',b'G',b'\r'): tetris.message=helpInfo return tetris.message=u"> 高度若小于16,部分提示会无法显示!\n\n> 如果界面异常请将窗口最大化!\n\nㄟ(▔▽▔)ㄏ\n\n" tetris.display() gridWidth=_intInp(raw_input("\n屏幕宽度 当前值:%s\n(取值范围5-28)\n> "%gridWidth)) while gridWidth not in range(5,29): gridWidth=_intInp(raw_input("宽度必须是介于5-28之间的整数,请重新输入> ")) gridHeight=_intInp(raw_input("\n\n屏幕高度 当前值:%s\n(取值范围11-39)\n> "%gridHeight)) while gridHeight not in range(11,40): gridHeight=_intInp(raw_input("高度必须是介于11-39之间的整数,请重新输入> ")) tetris.__init__() tetris.display() _intInp=lambda inp:int(inp) if inp.isdigit() else 0 def run(): time.clock() while True: tetris=Tetris() t0=0 while not msvcrt.kbhit() or not keyPress(tetris): t1=time.clock() if t1-t0>gears[gameSpeed]: t0=t1 tetris.fallDown() tetris.display() time.sleep(.001) #少了这一行CPU占用率会飙升 if __name__=="__main__": run() ```
python函数 open和os.path.join,pickle.load冲突,不知道怎么解决,求帮忙
我准备加载cifar集里面的数据,用的是CS231n,里面的代码,但是实际上代码中存在一个很严重的错误,程序如下 ``` import pickle import numpy as np import os datadir='/home/qwe2508/study/cifar-10-batches-bin' def load_cifar_batch(filename): with open(filename,'rb') as f : datadict=pickle.load(f,encoding='bytes') x=datadict[b'data'] y=datadict[b'labels'] x=x.reshape(10000,3,32,32).transpose(0,2,3,1).astype('float') y=np.array(y) return x,y def load_cifar10(root): xs=[] ys=[] for b in range(1,6): f=os.path.join(root,'data_batch_%d' % (b,)) x,y=load_cifar_batch(f) xs.append(x) ys.append(y) Xtrain=np.concatenate(xs) #1 Ytrain=np.concatenate(ys) del x ,y Xtest,Ytest=load_cifar_batch(os.path.join(root,'test_batch')) #2 return Xtrain,Ytrain,Xtest,Ytest x_train,y_train,x_test,y_test=load_cifar10(datadir) ``` 如果我的os.path.join,文件不加。bin,那么open函数会报错,没有此文件,如果加了,pickle.load会报错,综合错误。 实在知道怎么解决,求大牛拯救。
python win32com对EXCEL操作中的问题
定义了一个类 class easyExcel: def __init__(self, filename=None): self.xlApp = win32com.client.Dispatch('Excel.Application') if filename: self.filename = filename self.xlBook = self.xlApp.Workbooks.Open(filename) else: self.xlBook = self.xlApp.Workbooks.Add() self.filename = '' def save(self, newfilename=None): if newfilename: self.filename = newfilename self.xlBook.SaveAs(newfilename) else: self.xlBook.Save() def close(self): self.xlBook.Close(SaveChanges=0) del self.xlApp def getCell(self, sheet, row, col): sht = self.xlBook.Worksheets(sheet) return sht.Cells(row, col).Value def setCell(self, sheet, row, col, value): sht = self.xlBook.Worksheets(sheet) sht.Cells(row, col).Value= value def getRange(self, sheet, row1, col1, row2, col2): sht = self.xlBook.Worksheets(sheet) return sht.Range(sht.Cells(row1, col1), sht.Cells(row2, col2)).Value def addPicture(self, sheet, pictureName, Left, Top, Width, Height): sht = self.xlBook.Worksheets(sheet) sht.Shapes.AddPicture(pictureName, 1, 1, Left, Top, Width, Height) def cpSheet(self, before): shts = self.xlBook.Worksheets shts(1).Copy(None,shts(1)) 使用其中的setCell函数 lhwexcele.setCell('sheet1',0,0,'xkmc') 总是会提示 AttributeError: 'NoneType' object has no attribute 'Value'
在sort函数中的使用lambda进行条件排序导致list被置0
本来写了一个def,想着dug一下,然后就发现问题了。 def DeleteArraylementsAccordingToPercentage(lorddata,percentage,name): #按照百分比删除数组元素,并返回第二个数据 array = [] openpklfile = open(lorddata + '.pkl','rb') start = pickle.load(openpklfile) start.sort(start,key = lambda x:x[1]) lenth = len(start) * float(percentage) for i in range(lenth): del start[i] savefile = open(name + '.pkl', 'wb') pickle.dump(start, savefile) savefile.close() openpklfile.close()![图片说明](https://img-ask.csdn.net/upload/201806/04/1528093017_695621.png)
python单链表问题,有个问题怎么改?
代码如下 class Node(object): #首先创建一个单链表,需要value域,和一个next指针域 def __init__(self,value=None,next=None): self.value,self.next = value,next class LinkList(object): #创建链表 def __init__(self,maxsize=None): #,该函数是初始化这个链表,让maxsize=None,意思是这个链表可以无限长 self.maxsize=maxsize self.root=Node() #根结点只是起到入口的作用,不能存放东西,所以让它为空结点 self.length=0 self.tailnode=None def __len__(self): #返回长度 return self.length def append(self,value): #添加结点(尾插法) if self.maxsize is not None and len(self)>self.maxsize: #判断是否超限,如果超限则抛出一个异常 raise Exception('Full') node = Node(value) tailnode= self.tailnode if tailnode is None: self.root.next=node else: tailnode.next=node self.tailnode=node self.length+=1 def appendleft(self,value): #添加结点(头插法) headnode=self.root.next node=Node(value) self.root.next=node node.next=headnode self.length+=1 def iter_node(self): #遍历整个链表 curnode = self.root.next while curnode is not self.tailnode: yield curnode curnode = curnode.next yield curnode def __iter__(self): #遍历并输出 for node in self.iter_node(): yield node.value def remove(self,value): #O(n) 因为不能像顺序结构直接通过下标来访问结点,所以时间复杂度是n prevnode =self.root #负责记住前一个结点 curnode=self.root.next for curnode in self.iter_node(): if curnode.value==value: prevnode.next=curnode.next del curnode self.length-=1 return 1 else: prevnode=curnode return -1 def find(self,value): #O(n) 寻找链表中某一个元素的位置,若没有该元素,则返回-1 index=0 for node in self.iter_node(): if node.value==value: return index index+=1 return -1 def popleft(self): #O(1),弹出第一个元素 if self.root.next is None: raise Exception('pop from empty Linklist') headnode = self.root.next value=headnode.value self.length-=1 del headnode return value def clear(self):#清除整个链表 for node in self.iter_node(): del node self.root.next=None self.length=0 if __name__ == '__main__': ll=LinkList() ll.append(0) ll.append(1) ll.append(2) assert len(ll)==3 assert ll.find(2)==2 assert ll.find(3)==-1 ll.remove(0) assert len(ll)==2 assert ll.find(0)==-1 assert list(ll)==[1,2] ll.appendleft(0) assert list(ll)==[0,1,2] assert len(ll)==3 handvalue=ll.popleft() assert handvalue==0 assert len(ll)==2 print(list(ll)) ll.clear() assert len(ll)==0 我想用popleft删除第一个元素,代码执行到print(list(ll)),却输出[0,1,2],有没有大神帮忙看一下
我的mnist运行报错,请问是那出现问题了?
from __future__ import absolute_import from __future__ import division from __future__ import print_function import argparse #解析训练和检测数据模块 import sys from tensorflow.examples.tutorials.mnist import input_data import tensorflow as tf FLAGS = None def main(_): # Import data mnist = input_data.read_data_sets(FLAGS.data_dir, one_hot=True) # Create the model x = tf.placeholder(tf.float32, [None, 784]) #此函数可以理解为形参,用于定义过程,在执行的时候再赋具体的值 W = tf.Variable(tf.zeros([784, 10])) # tf.zeros表示所有的维度都为0 b = tf.Variable(tf.zeros([10])) y = tf.matmul(x, W) + b #对应每个分类概率值。 # Define loss and optimizer y_ = tf.placeholder(tf.float32, [None, 10]) # The raw formulation of cross-entropy, # # tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(tf.nn.softmax(y)), # reduction_indices=[1])) # # can be numerically unstable. # # So here we use tf.nn.softmax_cross_entropy_with_logits on the raw # outputs of 'y', and then average across the batch. cross_entropy = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y)) train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy) sess = tf.InteractiveSession() tf.global_variables_initializer().run() # Train for _ in range(1000): batch_xs, batch_ys = mnist.train.next_batch(100) sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys}) # Test trained model correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--data_dir', type=str, default='/tmp/tensorflow/mnist/input_data', help='Directory for storing input data') FLAGS, unparsed = parser.parse_known_args() tf.app.run(main=main, argv=[sys.argv[0]] + unparsed) ``` ```下面是报错: TimeoutError Traceback (most recent call last) ~\Anaconda3\envs\tensorflow\lib\urllib\request.py in do_open(self, http_class, req, **http_conn_args) 1317 h.request(req.get_method(), req.selector, req.data, headers, -> 1318 encode_chunked=req.has_header('Transfer-encoding')) 1319 except OSError as err: # timeout error ~\Anaconda3\envs\tensorflow\lib\http\client.py in request(self, method, url, body, headers, encode_chunked) 1238 """Send a complete request to the server.""" -> 1239 self._send_request(method, url, body, headers, encode_chunked) 1240 ~\Anaconda3\envs\tensorflow\lib\http\client.py in _send_request(self, method, url, body, headers, encode_chunked) 1284 body = _encode(body, 'body') -> 1285 self.endheaders(body, encode_chunked=encode_chunked) 1286 ~\Anaconda3\envs\tensorflow\lib\http\client.py in endheaders(self, message_body, encode_chunked) 1233 raise CannotSendHeader() -> 1234 self._send_output(message_body, encode_chunked=encode_chunked) 1235 ~\Anaconda3\envs\tensorflow\lib\http\client.py in _send_output(self, message_body, encode_chunked) 1025 del self._buffer[:] -> 1026 self.send(msg) 1027 ~\Anaconda3\envs\tensorflow\lib\http\client.py in send(self, data) 963 if self.auto_open: --> 964 self.connect() 965 else: ~\Anaconda3\envs\tensorflow\lib\http\client.py in connect(self) 1399 self.sock = self._context.wrap_socket(self.sock, -> 1400 server_hostname=server_hostname) 1401 if not self._context.check_hostname and self._check_hostname: ~\Anaconda3\envs\tensorflow\lib\ssl.py in wrap_socket(self, sock, server_side, do_handshake_on_connect, suppress_ragged_eofs, server_hostname, session) 400 server_hostname=server_hostname, --> 401 _context=self, _session=session) 402 ~\Anaconda3\envs\tensorflow\lib\ssl.py in __init__(self, sock, keyfile, certfile, server_side, cert_reqs, ssl_version, ca_certs, do_handshake_on_connect, family, type, proto, fileno, suppress_ragged_eofs, npn_protocols, ciphers, server_hostname, _context, _session) 807 raise ValueError("do_handshake_on_connect should not be specified for non-blocking sockets") --> 808 self.do_handshake() 809 ~\Anaconda3\envs\tensorflow\lib\ssl.py in do_handshake(self, block) 1060 self.settimeout(None) -> 1061 self._sslobj.do_handshake() 1062 finally: ~\Anaconda3\envs\tensorflow\lib\ssl.py in do_handshake(self) 682 """Start the SSL/TLS handshake.""" --> 683 self._sslobj.do_handshake() 684 if self.context.check_hostname: TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 During handling of the above exception, another exception occurred: URLError Traceback (most recent call last) <ipython-input-1-eaf9732201f9> in <module>() 57 help='Directory for storing input data') 58 FLAGS, unparsed = parser.parse_known_args() ---> 59 tf.app.run(main=main, argv=[sys.argv[0]] + unparsed) ~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\platform\app.py in run(main, argv) 46 # Call the main function, passing through any arguments 47 # to the final program. ---> 48 _sys.exit(main(_sys.argv[:1] + flags_passthrough)) 49 50 <ipython-input-1-eaf9732201f9> in main(_) 15 def main(_): 16 # Import data ---> 17 mnist = input_data.read_data_sets(FLAGS.data_dir, one_hot=True) 18 19 # Create the model ~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\contrib\learn\python\learn\datasets\mnist.py in read_data_sets(train_dir, fake_data, one_hot, dtype, reshape, validation_size, seed) 238 239 local_file = base.maybe_download(TRAIN_LABELS, train_dir, --> 240 SOURCE_URL + TRAIN_LABELS) 241 with open(local_file, 'rb') as f: 242 train_labels = extract_labels(f, one_hot=one_hot) ~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\contrib\learn\python\learn\datasets\base.py in maybe_download(filename, work_directory, source_url) 206 filepath = os.path.join(work_directory, filename) 207 if not gfile.Exists(filepath): --> 208 temp_file_name, _ = urlretrieve_with_retry(source_url) 209 gfile.Copy(temp_file_name, filepath) 210 with gfile.GFile(filepath) as f: ~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\contrib\learn\python\learn\datasets\base.py in wrapped_fn(*args, **kwargs) 163 for delay in delays(): 164 try: --> 165 return fn(*args, **kwargs) 166 except Exception as e: # pylint: disable=broad-except) 167 if is_retriable is None: ~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\contrib\learn\python\learn\datasets\base.py in urlretrieve_with_retry(url, filename) 188 @retry(initial_delay=1.0, max_delay=16.0, is_retriable=_is_retriable) 189 def urlretrieve_with_retry(url, filename=None): --> 190 return urllib.request.urlretrieve(url, filename) 191 192 ~\Anaconda3\envs\tensorflow\lib\urllib\request.py in urlretrieve(url, filename, reporthook, data) 246 url_type, path = splittype(url) 247 --> 248 with contextlib.closing(urlopen(url, data)) as fp: 249 headers = fp.info() 250 ~\Anaconda3\envs\tensorflow\lib\urllib\request.py in urlopen(url, data, timeout, cafile, capath, cadefault, context) 221 else: 222 opener = _opener --> 223 return opener.open(url, data, timeout) 224 225 def install_opener(opener): ~\Anaconda3\envs\tensorflow\lib\urllib\request.py in open(self, fullurl, data, timeout) 524 req = meth(req) 525 --> 526 response = self._open(req, data) 527 528 # post-process response ~\Anaconda3\envs\tensorflow\lib\urllib\request.py in _open(self, req, data) 542 protocol = req.type 543 result = self._call_chain(self.handle_open, protocol, protocol + --> 544 '_open', req) 545 if result: 546 return result ~\Anaconda3\envs\tensorflow\lib\urllib\request.py in _call_chain(self, chain, kind, meth_name, *args) 502 for handler in handlers: 503 func = getattr(handler, meth_name) --> 504 result = func(*args) 505 if result is not None: 506 return result ~\Anaconda3\envs\tensorflow\lib\urllib\request.py in https_open(self, req) 1359 def https_open(self, req): 1360 return self.do_open(http.client.HTTPSConnection, req, -> 1361 context=self._context, check_hostname=self._check_hostname) 1362 1363 https_request = AbstractHTTPHandler.do_request_ ~\Anaconda3\envs\tensorflow\lib\urllib\request.py in do_open(self, http_class, req, **http_conn_args) 1318 encode_chunked=req.has_header('Transfer-encoding')) 1319 except OSError as err: # timeout error -> 1320 raise URLError(err) 1321 r = h.getresponse() 1322 except: URLError: <urlopen error [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。> In [ ]:
请教一下,为什么我修改名片还是修改不了,提示 if 下的声明无效?
请教一下,为什么我修改名片还是修改不了,提示声明无效 def search_cards(): if len(cards_list) == 0: print("当前没有记录") return name_del = input("请输入要搜索的姓名:") print("-" * 50) for name in cards_list: if name["name"] == name_del: # 打印表头 for biaotou in ["姓名", "电话", "QQ", "邮箱"]: print(biaotou, end="\t\t") # 打印分隔线 print("") print("-" * 50) # 输出名片 print("%s\t\t%s\t\t%s\t\t%s" % (name["name"], name["phone"], name["qq"], name["email"])) print("-" * 50) # 对名片进行删除和修改功能 del_cards(name) break else: print("没有找到%s" % name_del) def del_cards(cards): caozuo = input("请输入对名片进行的操作:1.修改 2.删除 0.返回") if caozuo == "1": cards["name"] == info(cards["name"], "姓名[回车不修改]:") cards["phone"] == info(cards["phone"], "电话[回车不修改]:") cards["qq"] == info(cards["qq"], "QQ[回车不修改]:") cards["email"] == info(cards["email"], "邮箱[回车不修改]:") print("修改成功") else: print("输入错误,请重新输入") if caozuo == "2": cards_list.remove(cards) print("删除名片成功") # 再定义一个函数判断用户输入的内容,如果用户输入了内容,返回用户输入的值 # 如果没有输入内容,返回原有的值 def info(dict, user): shuru = input(user) if len(shuru) > 0: return shuru else: return dict ![图片说明](https://img-ask.csdn.net/upload/201904/07/1554651856_973232.jpg)
python数学计算中内存释放问题,劳烦各位大牛赐教
本人刚开始学python,主要是想做数据计算、分析和处理。在计算过程中,遇到了Memory error 网上也查了不少资料,主要是内存耗尽,每次计算时计算到固定次数就提示Memory error.下面 是我的代码,麻烦各位大牛帮忙看看: import numpy as np import matplotlib.pyplot as plt from scipy.integrate import quad import time from scipy import special import xlwt from itertools import product def R(t): confidence = 0 for num in range(0, 5): confidence = confidence + np.power(t / 400, num) * np.exp(-t / 400) / special.factorial(num) return confidence def g(a, t): return 1 - a * R(t) def q(β, t): return 1 - β * R(4000 - t) def A(a, β, t): if t < 500: return quad(lambda t: R(t), 0, t)[0] / 3500 elif (t > 499 and t < 2907): return quad(lambda t: a * R(t) ** 2, 0, t)[0] / 3500 elif t == 2907: return quad(lambda t: a * R(t) ** 2, 0, 2907)[0] / 3500 elif (t > 2907 and t < 3460): return (quad(lambda t: a * R(t) ** 2, 0, 2907)[0] + quad(lambda t: β * R(4000 - t) * R(t), 2907, t)[0]) / 3500 elif t == 3460: return (quad(lambda t: a * R(t) ** 2, 0, 2907)[0] + quad(lambda t: β * R(4000 - t) * R(t), 2907, 3460)[0]) / 3500 else: print("超出寿命周期边界") def MAX(l): first = [0] t = list(range(1, 3461)) for i in range(0, len(l)): if l[i] > first[0]: first[0] = l[i] else: continue for i in range(0, len(l)): if l[i] == first[0]: print("可靠度最大值是%0.3f" % (l[i])) print("可靠度最大值是对应的时间等于:%0.2f" % (t[i])) tmax = t[i] return first[0], tmax start = time.clock() # 初始化抽样参数 N1 = int(input("你想对a和β抽样多少次")) n1 = 1 xishus = [] At = [] Atjifen = 0 book = xlwt.Workbook(encoding='utf-8', style_compression=0) sheet1 = book.add_sheet("可用度", cell_overwrite_ok=False) sheet2 = book.add_sheet("可用度积分", cell_overwrite_ok=False) sheet1.write(0, 0, '抽样次数') sheet1.write(0, 1, "可用度最大值") sheet1.write(0, 2, "对应时间") sheet1.write(0, 3, "过评估系数a") sheet1.write(0, 4, "过评估系数β") sheet2.write(0, 0, '抽样次数') sheet2.write(0, 1, "可用度积分") sheet2.write(0, 2, "过评估系数a") sheet2.write(0, 3, "欠评估系数β") amiddle = np.arange(1, 100, 25) βmiddle = np.arange(1, 100, 25) aβ = list(product(amiddle, βmiddle)) for i in aβ: a = i[0] / 100 β = i[1] / 100 ts = list(range(1, 3461)) for t in ts: y = A(a, β, t) At.append(y) AT = MAX(At) sheet1.write(n1, 0, n1) sheet1.write(n1, 1, AT[0]) sheet1.write(n1, 2, AT[1]) sheet1.write(n1, 3, a) sheet1.write(n1, 4, β) for middleA in At: Atjifen = Atjifen + middleA sheet2.write(n1, 0, n1) sheet2.write(n1, 1, Atjifen) sheet2.write(n1, 2, a) sheet2.write(n1, 3, β) At = [] print("计算次数:" + str(n1)) n1 = n1 + 1 Atjifen = 0 print(time.clock() - start) book.save("E:/1.xls") 以上就是我的代码,期间尝试用过del删除变量,用过gc.collect(),发现都没起作用。 也想使用numpy.array,但是条件函数A出错,实在无计可施了。
pyqt5 使用多线程进行socket通信,界面未响应后程序退出
本来准备开好几个线程通信,写了两个正常运行,加了第三个后界面未响应,pycharm报错Process finished with exit code -1073740791 (0xC0000409) 现在一个线程也这样,不知是哪里出了问题。 这是UI类函数 class TabDemo(QTabWidget,QMainWindow): def __init__(self,parent=None): super(TabDemo,self).__init__(parent) self.resize(1200,900) self.tab1 = QWidget() self.tab2 = QWidget() self.tab3 = QWidget() self.tab4 = QWidget() self.tab5 = QWidget() self.addTab(self.tab1,'Voltage Curent') self.addTab(self.tab2,'Parameters') self.addTab(self.tab3,'Waveforms') self.addTab(self.tab4,'Charts') self.addTab(self.tab5,'Save Load') self.tab1UI() self.tab2UI() self.tab3UI() self.tab4UI() self.tab5UI() # self.Tcptrans = TcpThread() # self.Tcptrans1 = TcpThread1() # self.Tcptrans2 = TcpThread2() self.Tcptrans3 = TcpThread3() # self.Tcptrans.start() # self.Tcptrans1.start() # self.Tcptrans2.start() self.Tcptrans3.start() # self.Tcptrans.sinOut.connect(self.display) # self.Tcptrans1.sinOut1.connect(self.display1) # self.Tcptrans2.sinOut2.connect(self.display2) self.Tcptrans3.sinOut3.connect(self.display3) self.setWindowTitle('电能质量监测系统') 这是tab2UI def tab2UI(self): grid = QGridLayout() grid.setSpacing(10) l1=QLabel('Parameters') l2=QLabel('24V Supply') l3=QLabel('Volts') l4=QLabel('DSP Temp') l5=QLabel('Dg.c') self.t1=QTextBrowser() self.t2=QTextBrowser() self.table=QTableWidget(9,20) self.g1=QGraphicsView() self.table.setVerticalHeaderLabels(['ReactivePowerA', 'ReactivePowerC', 'ActivePowerA', 'ActivePowerC','CurrentA','CurrentC','THD IA', 'THD IC','Meter ID']) ''' self.l1.setGeometry(QtCore.QRect(190, 10, 101, 16)) self.l2.setGeometry(QtCore.QRect(50, 30, 91, 16)) self.l3.setGeometry(QtCore.QRect(170, 60, 72, 15)) self.l4.setGeometry(QtCore.QRect(50, 130, 72, 15)) self.l5.setGeometry(QtCore.QRect(170, 170, 72, 15)) self.t1.setGeometry(QtCore.QRect(30, 50, 111, 31)) self.t2.setGeometry(QtCore.QRect(30, 160, 111, 31)) self.table.setGeometry(QtCore.QRect(100, 20, 871, 291)) ''' grid.addWidget(l1,1,3) grid.addWidget(self.g1,2,0,5,16) grid.addWidget(l2,2,17) grid.addWidget(self.t1,3,17) grid.addWidget(l3,3,18) grid.addWidget(l4,4,17) grid.addWidget(self.t2,5,17) grid.addWidget(l5,5,18) grid.addWidget(self.table,6,0,20,21) self.tab2.setLayout(grid) 这是槽函数 def display3(self,Meterreading): for i in range(9): for j in range(20): self.Item=QTableWidgetItem('%s' % Meterreading[i,j]) self.table.setItem(i,j,self.Item) 这是定义的子线程类class TcpThread3(QThread): sinOut3 = pyqtSignal(np.ndarray) def __init__(self, parent=None): super(TcpThread3, self).__init__(parent) self.working = True def __del__(self): # 线程状态改变与线程终止 self.working = False self.wait() def run(self): if self.working == True: self.tcp_client_socket2 = socket(AF_INET, SOCK_STREAM) self.tcp_client_socket2.connect(("127.0.0.1", 6666)) while self.working == True: self.meg3 = b'\x01\x09\x00\x00\x01\x68\xDD\xB5' self.tcp_client_socket3.send(self.meg3) self.recv_data3 = self.tcp_client_socket3.recv(1024) l3 = list() l4 = list() CT = 1 PT = 1 for i in range(3, 723, 2): temp = self.recv_data3[i:i + 2] result = struct.unpack('!h', temp)[0] l3.append(result) list4 = l3[0:320] a = np.array(list4).reshape(20, 16) for i in range(10): l4.append(a[..., i]) ReactivePowerA = l4[0] * 0.0001 * CT * PT ReactivePowerC = l4[1] * 0.0001 * CT * PT ActivePowerA = l4[2] * 0.0001 * CT * PT ActivePowerC = l4[3] * 0.0001 * CT * PT CurrentA = l4[4] * 0.01 * CT CurrentC = l4[5] * 0.01 * CT THDIA = l4[6] * 0.1 THDIC = l4[7] * 0.1 lastone = (a[..., 8] * 65536 + a[..., 9]) * 0.01 Meterreading = np.vstack((ReactivePowerA, ReactivePowerC, ActivePowerA, ActivePowerC, CurrentA, CurrentC, THDIA, THDIC, lastone)) self.sinOut3.emit(Meterreading) QApplication.processEvents() self.sleep(1)
求问,如何做一个二级联动的下拉表单(select),每点击一下按钮,表单增加一行。
求问,如何做一个二级联动的下拉表单(select),每点击一下按钮,表单增加一行。我现在的问题是,表单增加后,二级联动就没有效果了。 这是html和表单元素代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/tab.js"></script> <script type="text/javascript" src="js/select2.js"></script> <link href="css/select2.css" rel="stylesheet"/> </style> </head> <body> <br> <table class="table" > <thead> <tr> <th>厚度</th> <th>光度</th> <th>外观</th> </tr> </thead> <tbody> <tr id="a"> <td> <div class="demo"> <div id="city_5"> <select class="prov"></select> <select class="city" disabled="disabled"></select> <select class="dist" disabled="disabled"></select> </div> </div> </td> <td><input type="" name=""></td> <td><input type="" name=""></td> </tr> </tbody> </table> <button onclick="fun()">增加一行</button> <button onclick="del()">删除一行</button> <script type="text/javascript" src="jquery.cityselect.js"></script> <script type="text/javascript"> $(function() { $("#city_5").citySelect({ url: {"citylist": [ {"p": "前端课程", "c": [{"n": "HTML5"}, {"n": "CSS3", "a": [{"s": "HTML"}, {"s": "AJAX"}]}, {"n": "JSON"}]}, {"p": "编程语言", "c": [{"n": "C"}, {"n": "C++"}, {"n": "Python"}, {"n": "PHP"}, {"n": "JAVA"}]}, {"p": "数据库", "c": [{"n": "Mysql"}, {"n": "SqlServer"}, {"n": "Oracle"}, {"n": "Mssql"}]}, ]}, prov: "", city: "", dist: "", nodata: "none" }); }); </script> </body> </html> 这是增加一行的代码 var i = 1; $(".td").each(function(){ $(this).html(i++); }) function fun(){ var $td = $("#a").clone(); //增加一行,克隆第一个对象 $(".table").append($td); var i = 1; $(".td").each(function(){ //增加一行后重新更新序号1,2,3...... $(this).html(i++); }) $("table tr:last").find(":input").val(''); //将尾行元素克隆来的保存的值清空 } function del(){ $("table tr:not(:first):not(:first):last").remove(); //移除最后一行,并且保留前两行 } 这是二级联动代码 /* Ajax 三级省市联动 http://code.ciaoca.cn/ 日期:2012-7-18 settings 参数说明 ----- url:省市数据josn文件路径 prov:默认省份 city:默认城市 dist:默认地区(县) nodata:无数据状态 required:必选项 ------------------------------ */ (function($) { $.fn.citySelect = function(settings) { if (this.length < 1) { return; } ; // 默认值 settings = $.extend({ url: "city.min.js", prov: null, city: null, dist: null, nodata: null, required: true }, settings); var box_obj = this; var prov_obj = box_obj.find(".prov"); var city_obj = box_obj.find(".city"); var dist_obj = box_obj.find(".dist"); var prov_val = settings.prov; var city_val = settings.city; var dist_val = settings.dist; var select_prehtml = (settings.required) ? "" : "<option value=''>请选择</option>"; var city_json; // 赋值市级函数 var cityStart = function() { var prov_id = prov_obj.get(0).selectedIndex; if (!settings.required) { prov_id--; } ; city_obj.empty().attr("disabled", true); dist_obj.empty().attr("disabled", true); if (prov_id < 0 || typeof (city_json.citylist[prov_id].c) == "undefined") { if (settings.nodata == "none") { city_obj.css("display", "none"); dist_obj.css("display", "none"); } else if (settings.nodata == "hidden") { city_obj.css("visibility", "hidden"); dist_obj.css("visibility", "hidden"); } ; return; } ; // 遍历赋值市级下拉列表 temp_html = select_prehtml; $.each(city_json.citylist[prov_id].c, function(i, city) { temp_html += "<option value='" + city.n + "'>" + city.n + "</option>"; }); city_obj.html(temp_html).attr("disabled", false).css({"display": "", "visibility": ""}); distStart(); }; // 赋值地区(县)函数 var distStart = function() { var prov_id = prov_obj.get(0).selectedIndex; var city_id = city_obj.get(0).selectedIndex; if (!settings.required) { prov_id--; city_id--; } ; dist_obj.empty().attr("disabled", true); if (prov_id < 0 || city_id < 0 || typeof (city_json.citylist[prov_id].c[city_id].a) == "undefined") { if (settings.nodata == "none") { dist_obj.css("display", "none"); } else if (settings.nodata == "hidden") { dist_obj.css("visibility", "hidden"); } ; return; } ; // 遍历赋值市级下拉列表 temp_html = select_prehtml; $.each(city_json.citylist[prov_id].c[city_id].a, function(i, dist) { temp_html += "<option value='" + dist.s + "'>" + dist.s + "</option>"; }); dist_obj.html(temp_html).attr("disabled", false).css({"display": "", "visibility": ""}); }; var init = function() { // 遍历赋值省份下拉列表 temp_html = select_prehtml; $.each(city_json.citylist, function(i, prov) { temp_html += "<option value='" + prov.p + "'>" + prov.p + "</option>"; }); prov_obj.html(temp_html); // 若有传入省份与市级的值,则选中。(setTimeout为兼容IE6而设置) setTimeout(function() { if (settings.prov != null) { prov_obj.val(settings.prov); cityStart(); setTimeout(function() { if (settings.city != null) { city_obj.val(settings.city); distStart(); setTimeout(function() { if (settings.dist != null) { dist_obj.val(settings.dist); } ; }, 1); } ; }, 1); } ; }, 1); // 选择省份时发生事件 prov_obj.bind("change", function() { cityStart(); }); // 选择市级时发生事件 city_obj.bind("change", function() { distStart(); }); }; // 设置省市json数据 if (typeof (settings.url) == "string") { $.getJSON(settings.url, function(json) { city_json = json; init(); }); } else { city_json = settings.url; init(); } ; }; })(jQuery);
动态规划入门到熟悉,看不懂来打我啊
持续更新。。。。。。 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n&gt;=2,n∈N*)根据定义,前十项为1, 1, 2, 3...
程序员,职场上请远离这种人!
对有些职场人来讲,甩锅就是一种生存手段。01.从大学打篮球说起上大学的时候喜欢打篮球,然后我又特别喜欢抢篮板,经常是跳起来的时候没事,落下来的时候偶尔会踩到别人的脚上,于...
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, ...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
一个读研让我损失了一百万的真实故事
关注我!只要10分钟,包你学会数据分析 毕业后,应该就业还是考研? 我刚出国留学那会儿,就惊讶的发现,外国local95%都不会选择读研 他们说,硕士学费很贵,时间宝贵,老板不认,所以很费 当几乎所有人都是本科学历时,硕士学历反而像个异类 在老板眼里,三年硕士远远不如3年的工作经验实用 他们甚至专门为拒绝高学历者发明了一个词,叫overoccupie...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给袈...
shell脚本:备份数据库、代码上线
备份MySQL数据库 场景: 一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份 需求: 1)每天备份一次,需要备份所有的库 2)把备份数据存放到/data/backup/下 3)备份文件名称格式示例:dbname-2019-11-23.sql 4)需要对1天以前的所有sql文件压缩,格式为gzip 5)本地数据保留1周 6)需要把备份的数据同步到远程备份中心,假如...
聊聊C语言和指针的本质
坐着绿皮车上海到杭州,24块钱,很宽敞,在火车上非正式地聊几句。 很多编程语言都以 “没有指针” 作为自己的优势来宣传,然而,对于C语言,指针却是与生俱来的。 那么,什么是指针,为什么大家都想避开指针。 很简单, 指针就是地址,当一个地址作为一个变量存在时,它就被叫做指针,该变量的类型,自然就是指针类型。 指针的作用就是,给出一个指针,取出该指针指向地址处的值。为了理解本质,我们从计算机模型说起...
为什么你学不过动态规划?告别动态规划,谈谈我的经验
动态规划难吗?说实话,我觉得很难,特别是对于初学者来说,我当时入门动态规划的时候,是看 0-1 背包问题,当时真的是一脸懵逼。后来,我遇到动态规划的题,看的懂答案,但就是自己不会做,不知道怎么下手。就像做递归的题,看的懂答案,但下不了手,关于递归的,我之前也写过一篇套路的文章,如果对递归不大懂的,强烈建议看一看:为什么你学不会递归,告别递归,谈谈我的经验 对于动态规划,春招秋招时好多题都会用到动态...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
如何安装 IntelliJ IDEA 最新版本——详细教程
IntelliJ IDEA 简称 IDEA,被业界公认为最好的 Java 集成开发工具,尤其在智能代码助手、代码自动提示、代码重构、代码版本管理(Git、SVN、Maven)、单元测试、代码分析等方面有着亮眼的发挥。IDEA 产于捷克,开发人员以严谨著称的东欧程序员为主。IDEA 分为社区版和付费版两个版本。 我呢,一直是 Eclipse 的忠实粉丝,差不多十年的老用户了。很早就接触到了 IDEA...
面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)
Redis 面试题 1、什么是 Redis?. 2、Redis 的数据类型? 3、使用 Redis 有哪些好处? 4、Redis 相比 Memcached 有哪些优势? 5、Memcache 与 Redis 的区别都有哪些? 6、Redis 是单进程单线程的? 7、一个字符串类型的值能存储最大容量是多少? 8、Redis 的持久化机制是什么?各自的优缺点? 9、Redis 常见性...
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
为什么要推荐大家学习字节码?
配套视频: 为什么推荐大家学习Java字节码 https://www.bilibili.com/video/av77600176/ 一、背景 本文主要探讨:为什么要学习 JVM 字节码? 可能很多人会觉得没必要,因为平时开发用不到,而且不学这个也没耽误学习。 但是这里分享一点感悟,即人总是根据自己已经掌握的知识和技能来解决问题的。 这里有个悖论,有时候你觉得有些技术没用恰恰是...
【超详细分析】关于三次握手与四次挥手面试官想考我们什么?
在面试中,三次握手和四次挥手可以说是问的最频繁的一个知识点了,我相信大家也都看过很多关于三次握手与四次挥手的文章,今天的这篇文章,重点是围绕着面试,我们应该掌握哪些比较重要的点,哪些是比较被面试官给问到的,我觉得如果你能把我下面列举的一些点都记住、理解,我想就差不多了。 三次握手 当面试官问你为什么需要有三次握手、三次握手的作用、讲讲三次三次握手的时候,我想很多人会这样回答: 首先很多人会先讲下握...
压测学习总结(1)——高并发性能指标:QPS、TPS、RT、吞吐量详解
一、QPS,每秒查询 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。 二、TPS,每秒事务 TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一...
新程序员七宗罪
当我发表这篇文章《为什么每个工程师都应该开始考虑开发中的分析和编程技能呢?》时,我从未想到它会对读者产生如此积极的影响。那些想要开始探索编程和数据科学领域的人向我寻求建议;还有一些人问我下一篇文章的发布日期;还有许多人询问如何顺利过渡到这个职业。我非常鼓励大家继续分享我在这个旅程的经验,学习,成功和失败,以帮助尽可能多的人过渡到一个充满无数好处和机会的职业生涯。亲爱的读者,谢谢你。 -罗伯特。 ...
2019年Spring Boot面试都问了什么?快看看这22道面试题!
Spring Boot 面试题 1、什么是 Spring Boot? 2、Spring Boot 有哪些优点? 3、什么是 JavaConfig? 4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器? 5、Spring Boot 中的监视器是什么? 6、如何在 Spring Boot 中禁用 Actuator 端点安全性? 7、如何在自定义端口上运行 Sprin...
【图解】记一次手撕算法面试:字节跳动的面试官把我四连击了
字节跳动这家公司,应该是所有秋招的公司中,对算法最重视的一个了,每次面试基本都会让你手撕算法,今天这篇文章就记录下当时被问到的几个算法题,并且每个算法题我都详细着给出了最优解,下面再现当时的面试场景。看完一定让你有所收获 一、小牛试刀:有效括号 大部分情况下,面试官都会问一个不怎么难的问题,不过你千万别太开心,因为这道题往往可以拓展出更多有难度的问题,或者一道题看起来很简单,但是给出最优解,确实很...
面试官:关于Java性能优化,你有什么技巧
通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化。 一般有两种方案:即优化代码或更改设计方法。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能。而一个设计良好的程序能够精简代码,从而提高性能。 下面将提供一些在JAVA程序的设计和编码中,为了能够提高JAVA程序的性能,而经常采用的一些方法和技巧。 1.对象的生成和大小的调整。 J...
【图解算法面试】记一次面试:说说游戏中的敏感词过滤是如何实现的?
版权声明:本文为苦逼的码农原创。未经同意禁止任何形式转载,特别是那些复制粘贴到别的平台的,否则,必定追究。欢迎大家多多转发,谢谢。 小秋今天去面试了,面试官问了一个与敏感词过滤算法相关的问题,然而小秋对敏感词过滤算法一点也没听说过。于是,有了下下事情的发生… 面试官开怼 面试官:玩过王者荣耀吧?了解过敏感词过滤吗?,例如在游戏里,如果我们发送“你在干嘛?麻痹演员啊你?”,由于“麻痹”是一个敏感词,...
GitHub 标星 1.6w+,我发现了一个宝藏项目,作为编程新手有福了!
大家好,我是 Rocky0429,一个最近老在 GitHub 上闲逛的蒟蒻… 特别惭愧的是,虽然我很早就知道 GitHub,但是学会逛 GitHub 的时间特别晚。当时一方面是因为菜,看着这种全是英文的东西难受,不知道该怎么去玩,另一方面是一直在搞 ACM,没有做一些工程类的项目,所以想当然的以为和 GitHub 也没什么关系(当然这种想法是错误的)。 后来自己花了一个星期看完了 Pyt...
杭漂程序员2019的心路历程,还不起助学贷款,交不起房租,披荆斩棘终雨过天晴
一个杭漂2019的心酸历程,一路披荆斩棘终于还是雨过天晴。
我采访了同事,让他掏出了每天都会浏览的干货网站
前言只有光头才能变强。文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y在周六的晚上,我日常去到公司写文章。想写...
Java知识体系最强总结(2020版)
更新于2019-12-15 10:38:00 本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新。也算是记录自己在从事编程工作的成长足迹,通过博客可以促进博主与阅读者的共同进步,结交更多志同道合的朋友。特此分享给大家,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。 文章目录...
计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
介绍几个可以下载编程电子书籍的网站。 1.Github Github上编程书资源很多,你可以根据类型和语言去搜索。推荐几个热门的: free-programming-books-zh_CN:58K 星的GitHub,编程语言、WEB、函数、大数据、操作系统、在线课程、数据库相关书籍应有尽有,共有几百本。 Go语言高级编程:涵盖CGO,Go汇编语言,RPC实现,Protobuf插件实现,Web框架实...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
相关热词 c# 数组类型 泛型约束 c#的赛狗日程序 c# 传递数组 可变参数 c# 生成存储过程 c# list 补集 c#获得所有窗体 c# 当前秒数转成年月日 c#中的枚举 c# 计算校验和 连续随机数不重复c#
立即提问