在python中将字符串哈希返回错误的结果?

时间:2019-03-29 03:39:21

标签: python

我已经由一位导师设置了一项家庭作业,以创建一个对字符串进行哈希处理的过程,或者在某种意义上给出了哈希表中字符串的索引(如果已对其进行哈希处理)。

应该返回11,但是返回0,有人可以帮我找出原因吗?

def hash_string(keyword, buckets):
    ords = []
    for e in string_to_list(keyword):
        ords.append(ord(e))

    sum_of_ords = ords.pop()

    for e in ords:
        sum_of_ords = sum_of_ords * e

    return sum_of_ords % buckets

print(hash_string('udacity', 12)) # should return 11 but returns 0?

这里是string_to_list,我知道可能有更好的方法,但这是我唯一知道的方法,无需使用Google来搜索此类事物的内置方法

def string_to_list(str):
    result_list = []
    i = 0

    while i < len(str):
        result_list.append(str[i:i + 1])
        i += 1


    return result_list

这是我的导师描述答案的方式,但是我不理解他对h所做的事情吗?这只是我要做的事情的简化版本吗?

def hash_string(keyword, buckets):
    h = 0
    for c in keyword:
        h = (h + ord(c)) % buckets
    return h

2 个答案:

答案 0 :(得分:3)

您似乎想在这里添加但无意间相乘:

sum_of_ords = sum_of_ords * e

将此更改为:

sum_of_ords = sum_of_ords + e

或者,通过复合分配:

sum_of_ords += e

顺便提一句,您可以将功能简化为以下简单操作:

def hash_string(keyword, buckets):
    return sum(ord(c) for c in keyword) % buckets

答案 1 :(得分:1)

问题是您使用了一些不必要的功能,例如使用.pop()for循环,并且可以使用hash_string来替换list(<string>)函数。 / p>

示例:

def hash_string(keyword, buckets):
    ords = []
    for e in list(keyword):
        ords.append(ord(e))

    return sum(ords) % buckets

这甚至可以进一步简化为:

def hash_string(keyword, buckets):
    return sum([ord(char) for char in list(keyword)]) % buckets