会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132602个问题
Python 全系列/第二阶段:Python 深入与提高/游戏开发-坦克大战 24678楼

老师,你写的find_key方法还有bug。

  1. 在获取一个未设置的key时,运行结果可能显示None类型没有属性key

  2. 在获取一个未设置的key时,可能陷入死循环

我修改后的代码如下:

class Array():
    def __init__(self,size=4):
        self.__size = size # 记录容器大小
        self.__item = [None]*size #分配空间
        self.__length = 0

    def __setitem__(self,key,value):
        self.__item[key] = value
        self.__length += 1

    def __getitem__(self,key):
        return self.__item[key]
    
    def __len__(self):
        return self.__length
    
    def __iter__(self):
        for value in self.__item:
            yield value


class Slot():
    def __init__(self,key=None,value=None):
        self.key = key
        self.value = value
    
    def __str__(self):
        return 'key:{},value:{}'.format(self.key,self.value)
    
class HashTable():
    def __init__(self,size=4):
        self.size = size # 用来记录空间大小
        self.item = Array(self.size)
        self.length = 0 # 用来记录元素的个数
    
    def get_index(self,key):
        return hash(key) % self.size
    
    def find_index_to_insert(self,key):
        index = self.get_index(key) # 获取key对应的索引
        if self.item[index] == None: # 索引没被占用
            return index
        else:
            while self.item[index] is not None:
                if key == self.item[index].key: # 获取到相同的key
                    return index
                else:
                    index = (index*5+1) % self.size
            return index

    def push(self,key,value): # 存放数据
        index = self.find_index_to_insert(key)  # 获取key对应的索引
        self.item[index] = Slot(key,value)
        self.length += 1

    def find_key(self,key):  
        index = self.get_index(key) # 获取key对应的索引
        if self.item[index] == None:
            return None
        else:
            count = 0
            while self.item is not None: # 这里不能写成self.item[index] is not None
                # 判断查找的Key是否与item里的key相同,注意防止self.item[index]为空,否则报None类型没有属性key的错误
                if self.item[index] is not None and key == self.item[index].key:
                    return index
                else:
                    index = (index*5+1) % self.size
                    count += 1
                while count > self.size**self.length: # 解决死循环的问题
                    return None
            return None
    
    def get(self,key): # 获取数据
        index = self.find_key(key) # 获取key对应的索引
        if index is not None:
            return self.item[index]
        return None
    
if __name__ == "__main__":
    h = HashTable()
    h.push('name','吕布')
    h.push('sex1','男')
    h.push('sex2','女')
    h.push('sex3','保密')

    print(h.get('name'))
    print(h.get('sex3'))
    print(h.get('sex2'))
    print(h.get('sex1'))
    print(h.get('age'))  # 这里要解决陷入死循环的问题


Python 全系列/第十六阶段:数据结构与算法/算法与数据结构(旧) 24681楼
JAVA 全系列/第六阶段:项目管理与SSM框架/Spring 24683楼

老师帮看一下 我的按钮   “是”跳转图片不成功

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title></title>

  

  <style>

   

   body{

    

    background-image: url(img/bjsky.jpg);

    

    background-repeat:no-repeat ;

    

    background-size: 1600px 800px;

     

   }

   a{

    

    font-size: 25px;

    

    color: #ffffff;

    

   }

   .div1{

    

    width: 300px;

    

    height: 200px;

    

    background-color: gray;

    

    text-align: center;

    

   }

   input{

    

    width: 40px;

    

    height: 30px;

    

   }

   

  </style>

  <script>

  

  var i=-1;

   function changebc(){

    

    var arr=['bjsky.jpg','mayun.jpg','simple.jpg','sxt.jpg','zgc.jpg'];

    

    

    if(i<arr.length-1){

     

     i++;

    }else{

     i=0;

     

    }

    

    document.body.style.backgroundImage="url(img/"+arr[i]+")"

    

   }

   function chengove(){

    //获得div对象

    

    var div = document.getElementById("div_1");

    

    div.style.marginTop=Math.random()*500+"px";

    

    div.style.marginLeft=Math.random()*800+"px";

    

    

    

   }

   function changeclk(){

    

    document.body.style.backgroundImage="url(img/1.jpg)";

    

    //设置当前div隐藏

    document.getElementById("div_1").style.display="none";

    

   }

   

   

  </script>

  

 </head>

 <body>

  

  < a href="javascript:changebc()">点击更换主题</ a>

  

  <div class="div1" id="div_1">

   

   <h3>我是不是你的小可爱</h3>

   

   <input type="button" value="是" onclick="changeclk" />

   

   <input type="button" value="否"   onmouseover="chengove()"/>

   

  </div>

  

  

 </body>

</html>


JAVA 全系列/第四阶段:网页编程和设计/Javascript 语言(旧) 24684楼
JAVA 全系列/第八阶段:Linux入门到实战/Linux(旧) 24685楼
JAVA 全系列/第十一阶段:消息中间件与高并发处理/RabbitMQ 24686楼
JAVA 全系列/第六阶段:项目管理与SSM框架/Mybatis 24688楼
JAVA 全系列/第三阶段:数据库编程/Oracle 数据库的使用 24689楼
JAVA 全系列/第四阶段:网页编程和设计/Javascript 语言(旧) 24690楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637