Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.74/19: Рейтинг темы: голосов - 19, средняя оценка - 4.74
-16 / 1 / 0
Регистрация: 23.06.2019
Сообщений: 24

Исправить баг

03.11.2019, 15:54. Показов 4307. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо исправить баг в коде ниже, я пыталась это сделать разными способами, ничего не получается( Если я правильно поняла суть бага в том, что там сохраняется цифра, каждый раз новая. А если нам нужна старое значение, то его уже нет, желательно с пояснением, заранее спасибо)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def hash(key):
 
    return len(key)
 
storage = [0] * 13
 
def set_value(key):
 
    index = hash(key)
 
    return storage[index]
 
def get_value(key,value):
 
    index = hash(key)
 
    storage[index] = value
 
get_value("XYZ", 7)
 
get_value("ABC", 42)
 
print(set_value("XYZ"))
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.11.2019, 15:54
Ответы с готовыми решениями:

Исправить баг
import random #***************************** digit = 0 dig1 = 0 dig2 = 0 dig3 = 0 #**************************** x = 0 x1 =...

Как исправить ошибку: формат теста исправить нельзя, только текст программы
class AmericanDate: def __init__(self, y, m, d): self.get_year = str(y) self.get_month = str(m//10)+str(m%10) ...

Исправить баг
сайт mixdoors.ru, плагин mavik Thumbnails (увеличение изображения ) работает в материалах, но не работает на страницах virtuemart, на...

32
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.11.2019, 16:45
Имена функций set_value и get_value перепутаны. Они делают противоположные действия.

А баг в том, что у вас хеш совпадает: hash("XYZ") == hash("ABC")
1
-16 / 1 / 0
Регистрация: 23.06.2019
Сообщений: 24
03.11.2019, 16:48  [ТС]
Рыжий Лис, Помогите пожалуйста исправить это, понимаю, что я вас фактически прошу сделать за меня, но я видимо очень тупая, требуется ваша помощь)
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.11.2019, 17:03
Python
1
2
3
4
5
>>> hash = lambda x: sum(ord(i) for i in x) % 13
>>> hash('XYZ')
7
>>> hash('ABC')
3
Python
1
2
3
4
5
def hash(key):
    result = 0
    for i in key:
        result += ord(i)
    return result % 13
Добавлено через 2 минуты
Думаю, следующим заданием у вас будет "написание программы по вычислению коллизий хеша"
1
-16 / 1 / 0
Регистрация: 23.06.2019
Сообщений: 24
03.11.2019, 17:05  [ТС]
Рыжий Лис, я уже сделала вот так, подскажите это правильно?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
def hash(key):
 
    return len(key)
 
storage = [0] * 13
 
q = 1
 
def deleted_f(index, key):
 
    j = index + q
 
    while storage[j] == 0 or storage[j].key != storage[index].key:
 
        if storage[j] == 0:
 
            storage[j] = key
 
            index = j
 
            return index
 
            break
 
        j += q
 
    storage[index] = storage[j]  
 
def set_value(key):
 
    index = hash(key)
 
    return storage[index]
 
def get_value(key,value):
 
    index = hash(key)
 
    if storage[index] != 0:
 
        deleted_f(index, key)
 
    else:
 
        storage[index] = value
 
get_value("XYZ", 7)
 
get_value("ABC", 42)
 
print(set_value("XYZ"))
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.11.2019, 17:13
Нет, неправильно. Проверьте сами:
Python
1
2
3
4
5
6
7
print(storage)
get_value("XYZ", 7)
print(storage) 
get_value("ABC", 42)
print(storage)
print(set_value("XYZ"))
print(storage)
Должно выдаваться как-то так:
Code
1
2
3
4
5
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0]
[0, 0, 0, 42, 0, 0, 0, 7, 0, 0, 0, 0, 0]
7
[0, 0, 0, 42, 0, 0, 0, 7, 0, 0, 0, 0, 0]
(местоположение значений значения не имеет)
1
-16 / 1 / 0
Регистрация: 23.06.2019
Сообщений: 24
03.11.2019, 17:13  [ТС]
Рыжий Лис, преподавателю по любому не понравится =!, но писать с not я не умею(
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.11.2019, 17:14
То есть ключ преобразуем в хеш и храним в памяти. По этому же ключу мы можем получить сохранённое значение обратно.
1
-16 / 1 / 0
Регистрация: 23.06.2019
Сообщений: 24
03.11.2019, 17:15  [ТС]
Рыжий Лис, а не могли бы вы, написать, опять же, как правильно полностью) а то я весь вечер бьюсь)
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.11.2019, 17:16
Цитата Сообщение от harlyk Посмотреть сообщение
преподавателю по любому не понравится =!
уточните, где вы увидели в коде !=? Ваш второй вариант работает совсем неправильно.

Добавлено через 35 секунд
берёте первую версию кода и заменяете в ней функцию hash
1
-16 / 1 / 0
Регистрация: 23.06.2019
Сообщений: 24
03.11.2019, 17:18  [ТС]
Рыжий Лис, как именно заменить) тууупая(
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.11.2019, 17:26
Лучший ответ Сообщение было отмечено harlyk как решение

Решение

Храни меня Селестия. Вместо своей функции вставляете эту:
Python
1
2
3
4
5
def hash(key):
    result = 0
    for i in key:
        result += ord(i)
    return result % 13
1
-16 / 1 / 0
Регистрация: 23.06.2019
Сообщений: 24
03.11.2019, 17:29  [ТС]
Рыжий Лис, я дико извиняюсь) а с этим что делать ? "Имена функций set_value и get_value перепутаны. Они делают противоположные действия. "

Добавлено через 1 минуту
Рыжий Лис, зачем мне ord?) не понимаю
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.11.2019, 17:31
Оставьте как есть. Этот вопрос вам задаст преподаватель.

ord используется, чтобы преобразовать символ строки в число. Вы же считаете хеш...
1
-16 / 1 / 0
Регистрация: 23.06.2019
Сообщений: 24
03.11.2019, 17:43  [ТС]
Рыжий Лис, объясните пожалуйста, почему мой код неправильный, максимально кратко, я просто скинула ему свой вариант, потом скинула правильный ваш и мне необходимо объяснить почему мой код не работает?(
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.11.2019, 17:46
Объяснял же:
Python
1
2
3
4
5
6
7
>>> def hash(key):
...     return len(key)
... 
>>> hash("XYZ")
3
>>> hash("ABC")
3
Для этих ключей идёт коллизия хеша (хеши совпадают), поэтому старое значение перезатирается новым. Чтобы этого не происходило, нужно чтобы хеши отличались.
1
-16 / 1 / 0
Регистрация: 23.06.2019
Сообщений: 24
03.11.2019, 17:50  [ТС]
Рыжий Лис, вы говорите именно про мой код в 51 строчку или про код с багом?))
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.11.2019, 17:51
Про код с багом, первый вариант.
1
-16 / 1 / 0
Регистрация: 23.06.2019
Сообщений: 24
03.11.2019, 17:56  [ТС]
Рыжий Лис, меня интересует, что именно было неправильно в моем коде на 51 строчку))
скажите пожалуйста

Добавлено через 2 минуты
Рыжий Лис, У меня похожи хэши, да. Но записываются они в разные места, так решается вопрос с тем, что они одинаковые) или я поняла, что-то не так?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.11.2019, 18:00
Краткий ответ "всё" не принимается?

Какой смысл вашей программы: есть хранилище на 13 элементов. Нужно в нём сохранить по ключу два значения. Так, чтобы по этому же ключу можно было прочитать сохранённое ранее значение.

А у вас в коде происходит неизвестно что, так ещё и хранилище портится (добавьте строчку print(storage) в самый конец и убедитесь сами).

Добавлено через 44 секунды
С одинаковыми хешами должно записываться в одинаковые места.

Добавлено через 39 секунд
Иначе вы не сможете прочитать записанные данные.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.11.2019, 18:00
Помогаю со студенческими работами здесь

Как исправить баг?
Проблема следующая, при вводе play game или analyaze document меня должно перебросить в игру("угадай число") или проанализировать...

Баг ,как исправить?
Добрый день хотел бы обратиться к вам за помощью есть код : using System.Collections; using System.Collections.Generic; ...

Исправить баг (не фичу)
В моей игре не всегда работает начало новой игры при нажатии на "начать игру", просто пустой экран. Но не всегда, бывает работает бывает...

Как исправить баг
Ребята помогите исправить баг Win8x64

Исправить баг в программе
Здравствуйте уважаемые форумчане. На скорую руку набросал программу, в которой показываются картинки с животными и нужно выбрать первую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru