内容:这几天我写的bug总结
1 :当时看川川的资料,然后写了一个好像是排序什么的我想用集合的不重复性来着(虽然这做不出来那个答案,但我逻辑上认为可以的)然后就直接定义了一个’A={}‘我一直以为他是集合,直到一直报错,然后看了一下type(类型)才发现dict型,然后查阅一些资料才知道集合定义是’set()‘,而’A={}‘是字典型,所以报错.
2:看其他资料学二分法的时候,逻辑清楚了,但是二分法用错了,我用的是‘(max-min)/2’这会导致求的值的范围缩小到正常值之外,陷入死循环,并值保持不变。
3:用for循环打印列表数值的时候,比如
x=[2,2,2,2,2,1]
for i in x:
x.remove(2)
print(x)
打印出来会发现结果[2,2,1]这是由于在循环过程中x列表长度发生了变化,从而使迭代次数发生变化,这边就需要定义另一个变量y
x=[2,2,2,2,2,1]
y=x
for i in y:
x.remove(2)
print(x)
结果:
[2, 2, 1]
按逻辑上来说这样定义没什么毛病,可是这就是毛病,我当时问我师父来着,他就嫌弃了我一下午,说‘c语言的指针没学过吗???赋值的时候是俩个变量进同一个地址!!!’然后我验证了一下:
x=[2,2,2,2,2,1]
y=x
print(id(x))
print(id(y))
for i in y:
x.remove(2)
print(x)
结果:
2275877563840
2275877563840
[2, 2, 1]
果然共用了地址,然后我就查了一下,发现了赋值方法:
x=[2,2,2,2,2,1]
y=x[:]
print(id(x))
print(id(y))
print(type(x))
for i in x:
y.remove(2)
print(y)
结果:
1791685209536
1791685178560
<class 'list'>
Traceback (most recent call last):
File "C:\Users\昊123\PycharmProjects\pythonProject\main.py", line 251, in <module>
y.remove(2)
ValueError: list.remove(x): x not in list
就很离谱的报错了,为啥呢 ,因为循环到第六次的时候,y里面只剩下1了已经remove不了2了所以就报错了。
ps:他报错的时候我也心慌慌来着,不过看了看就知道为啥了,因为remove会有限制不过集合里面的discard就比较牛逼了,这边换成集合然后用这个函数他不会报错。
x={2,2,2,2,2,1}
y=set(x)
print(id(x))
print(id(y))
print(type(x))
for i in x:
y.discard(2)
print(y)
结果:
1599125596064
1599128691520
<class 'set'>
{1}
这边其实只迭代俩次,集合是无重复的无序的数列嘛。
好了,说这么多有的没的,反正写给自己看的,也没啥人会看,问题不是很大,自己能没事干的时候看看自己写的东西就行了,好好重温一下自己的傻逼时光!!!
前几天的日记写的真的有点稀巴烂的感觉,幸亏不是自己发,可能会尬死吧。问题不是很大,慢慢来吧,毕竟确实是第一次俩次三次写。明天的话我准备写一下自己爬虫第一课来着,可是其实基础没学的特别好,可能还会写一点c#或者halcon的东西,毕竟我是做这方面的,太难了。不过我还是蛮想着学好python的!!!
每天一遍 防止早恋!!!
跟我一起读“我爱学习,学习使我快乐,学习是我进步的阶梯!!!”