Katawara
@Katawara

Что бы вы сказали об этом коде?

В качестве практики решила написать программу, которая шифрует и дешифрует пароли. В итоге все получилось (вот пара скринов работы),
Фото
Это шифрование 5c2e4e220e8c9265382157.jpegА это дешифрование5c2e4e19f3282032971901.jpegДа, выглядят фото так себе, но главное что видно, что все работает.
но мне хотелось бы узнать мнение о моём коде у более опытных питонистов. Помимо мнений, было бы интересно послушать и рекомендации по улучшению кода.
Собственно, сам код:
Тут код
def Mode(letter):		#функция обработки числа
	global mode
	if mode is True:
		j = letter * 2 - 9
	elif mode is False:
		j = (letter + 9) / 2
	return int(abs(j))

def rebuild_code(password):		#функция шифрования
	re_pass, pass_2_list = list(), list()
	for i in password:	#проход по чилам, обработка и добавление в re_pass
		letter = ord(i)
		j = Mode(letter)
		re_pass.append(j)
	for i in re_pass:
		pass_2_list.append(chr(i)) #перевод чисел в символы
	return "".join(pass_2_list)		#получение нового пороля

password = input('Введите пороль: ')
CorD = input("Выберите режим (Code/Decode): ")
if CorD.capitalize().startswith('Code'):
	mode = True
	print(rebuild_code(password))
elif CorD.capitalize().startswith('Decode'):
mode = False
	print(rebuild_code(password))
else:
	print('Вы ввели {}. Данного режима не существует.'.format(CorD))
Если так неудобно читать, можете посмотреть код и в виде фото.
5c2e52751efd5399822091.jpeg
  • Вопрос задан
  • 228 просмотров
Решения вопроса 2
@Andy_U
"if mode is True" - не надо так. Так же не надо называть целое число, как letter и очередной символ строки, как i,

Ну и алгоритм можно гораздо проще имплементировать:

from typing import Callable


def encode(code: int) -> int:
    """ Encode unicode code point of the character. """
    return code * 2 - 9


def decode(code: int) -> int:
    """ Decode unicode code point of the character. """
    return (code + 9) // 2


def process(password: str, func: Callable[[int], int]) -> str:
    """ Encode/decode password. """
    return ''.join([chr(abs(func(ord(c)))) for c in password])


if __name__ == '__main__':

    password = input('Введите пароль: ')
    mode = input("Выберите режим (Code/Decode): ").capitalize()

    if mode.startswith('Code'):
        print(process(password, encode))
    elif mode.startswith('Decode'):
        print(process(password, decode))
    else:
        print('Вы ввели {}. Данного режима не существует.'.format(mode))


Ну и наконец, одно большое "но". Маленькая буква "z" кодируется в "ё", а русские буквы вообще черт знает во что. Т.е. вместо правильного utf-символа Windows может напечатать знак вопроса в квадратике - т.е. признак непечатного символа.
Ответ написан
Zarom
@Zarom
Мастер на все руки из жопы
Рекомендую ознакомиться с данным документом https://pep8.ru/doc/pep8/
Рекомендую использовать какой-либо плагин linter для вашей ide - так будете уверены, что код соответствует определенным стандартам. Хотябы, тому же pep8. Мне сильно помогло улучшить культуру кода.

В частности, рекомендации по именованию переменных и функций.
По коду - rebuild_code работает двойным проходом - зачем? Можно сразу же преобразовывать и join-ить строку.

P. S. Не Питонист. Заметил то, в чем сам изначально ошибался.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
ZClick Москва
от 50 000 до 200 000 руб.
Protoplan Краснодар
от 80 000 до 150 000 руб.
22 июл. 2019, в 08:24
100000 руб./за проект
22 июл. 2019, в 07:20
3000 руб./за проект
22 июл. 2019, в 07:13
150000 руб./за проект