Как правильно распределять код по функциям?

Vlad_SD

Активный пользователь
Пользователь
Апр 7, 2020
91
45
18
Изучаю Python по учебникам, прошёл тему функций и классов, перешёл к чтению из файла.
Задача была следующая - встречается ли введённое число в чиле Пи(первый миллион знаков после запятой). Собственно решение есть, но постарался распредлеить каждую часть программы по функциям, чтобы упростить читабельность кода. Я правильно понял логику работы с функциями или нет? если нет, какую литературу посоветуете?

Python:
def make_dict(lines):
    """pi dictionaries - one million decimal places"""
    keys = []
    digits = []
    for value, line in enumerate(lines):
        keys.append(value)
        digits.append(line)
    p_dict = dict(zip(keys, digits))
    find_key_value(p_dict)


def find_key_value(dictionary):
    """find value in dictionary"""
    keys = []
    digits = []
    digit = input('pleas, enter value')
    for key, value in dictionary.items():
        if digit in value:
            keys.append(key)
            digits.append(value)
    if len(keys) != 0:
        make__new_dictionary(keys, digits)
    else:
        print('value:', digit, 'was not found in the dictionary')


def make__new_dictionary(key, digit):
    """make and print a new dictionary"""
    found_values = dict(zip(key, digit))
    for key, value in found_values.items():
        print(key, '-->', value)


pi_digits_link = 'C:\python\pi_digits.txt'
with open(pi_digits_link) as pi_digits:
    my_lines = pi_digits.readlines()
    make_dict(my_lines)
 

Вложения

  • pi_digits.txt
    1 012,1 КБ · Просмотры: 1
  • Мне нравится
Реакции: Student

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Функции обычно используются для совершения каких-нибудь действий над передаваемыми аргументами и возврата результата. Это позволяет разбивать код на небольшие узкоспециализированные части, которые можно многократно использовать. В вашем коде функции взаимосвязаны и это делает их применение не оправданным. То есть если ваш код переписать без функций получится тоже самое. Нужно сделать их более независимыми друг от друга. Например:

Python:
def make_dict(lines):
    """pi dictionaries - one million decimal places"""
    keys = []
    digits = []
    for value, line in enumerate(lines):
        keys.append(value)
        digits.append(line)
    p_dict = dict(zip(keys, digits))
    return p_dict
Функция принимает список - возвращает словарь. Далее это словарь можно передать в следующую функцию, которая тоже что-то вернет и т. д.
Хотя для вашей задачи можно обойтись без функций, вот пример:
Python:
lines = []
x = input('Введите число: ')
with open('pi_digits.txt', 'r') as pi_digits:
    for i, s in enumerate(pi_digits):
        if str(x) in s:
            lines.append(i)

if not lines:
    print('Совпадений не найдено')
else:
    for s in lines:
        print('Совпадения найдено в строке: ', s)
 
  • Мне нравится
Реакции: Student и Vlad_SD

Форум IT Специалистов