Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2019, 13:18   #1
pigeon890
Пользователь
 
Регистрация: 24.01.2019
Сообщений: 19
Вопрос Проверка кода

Привет сообществу!
Я - начинающий программист на питоне. Ниже вы видите кое-какой кусок кода, в котором я не до конца уверен. Он работает, но мне пригодились бы советы от более опытных людей по оптимизации. Также буду рад указаниям на ошибки.
Заранее спасибо за помощь.
Голубь.

Hi, Python community!
I am a beginner in Python. I've pinned my code sample down there. It works properly, but I'm not sure if it's all right in other ways. I'd be glad to receive tips of quality improvement from more experienced programmers. Will also count mistake reports.
Thanks beforehand.
Pigeon.

Код:
import os
import time
from msvcrt import getch


f_num = 0
f_let = 'non_specified'
pup_count = 0
tutor_name = 'non_specified'
profile = 'non_specified'
filename = 'non_specified'
i = 1


subj_array = ['0000', '0001', '0010', '0011', '0100', '0101',
              '0110', '0111', '1000', '1001', '1010', '1011',
              '1100', '1101', '1110', '1111']
subj_equal = ['null', 'Алгебра', 'Геометрия', 'Русский язык', 'Литература',
              'История', 'Обществознание', 'Биология', 'Химия', 'Физика',
              'География', 'Английский', 'Немецкий', 'Французский', 'Информатика', 'МХК']


def form_initial ():
    global f_num
    f_num = input ('Введите номер класса: ')
    f_num = int (f_num)
    if 0 < f_num < 12:
        f_num = str (f_num)
    else:
        print ('Неправильный номер. Попробуйте еще.')
        time.sleep (3)
        form_initial ()
    global f_let
    f_let = input ('Введите букву класса: ')
    try:
        check_file = open (f_num + '_' + f_let + '.txt', 'r', encoding = 'utf8')
        check_file.close ()
    except FileNotFoundError:
        print ('Используется уникальное имя файла')
    else:
        print ('Попытка создать дубликат. Предыдущий файл переименован в ' + f_num + '_' + f_let + ' old' + '.txt')
        try:
            duplicate_protection ()
        except FileExistsError:
            print ('Повторная попытка создать дубликат. Предыдущий файл ' + f_num + '_' + f_let + ' old' + '.txt удален.')
            os.remove (f_num + '_' + f_let + ' old' + '.txt')
            duplicate_protection ()
    global pup_count
    pup_count = input ('Введите количество человек в ' + f_num + ' ' + f_let + ': ')
    global tutor_name
    tutor_name = input ('Введите имя классного руководителя ' + f_num + ' ' + f_let + ': ')
    global profile
    profile = input ('В случае, если ' + f_num + ' ' + f_let + ' - профильный, введите название профиля: ')
    
    
def file_form ():
    form_file = open (f_num + '_' + f_let + '.txt', 'a+', encoding = 'utf8' )
    form_file.write ('На 1 сентября в классе ' + pup_count + ' человек' + '\n')
    form_file.write ('Классный руководитель - ' + tutor_name + '\n')
    form_file.write ('Профиль: '+ profile + '\n')
    form_file.close ()
    
    
def duplicate_protection ():
    os.rename (f_num + '_' + f_let + '.txt', f_num + '_' + f_let + ' old' + '.txt')
    add_file = open (f_num + '_' + f_let + ' old' + '.txt', 'a', encoding = 'utf8')
    time_edited = str (time.ctime())
    add_file.write (time_edited)
    add_file.close ()
    

def book_add ():
    global i
    i = str (i)
    print ('Просканируйте книгу на ' + i + ' позицию списка.')
    i = int (i)
    book_code = input ('Пока что введите код руками: ')
    subj_id = book_code [0:4]
    j = 0
    while subj_array [j] != subj_id:
        j += 1
    else:
        subj_name = subj_equal [j]
    auth_names = input ('Введите имя/имена авторов книги через запятую: ')
    year = book_code [4:8]
    form_file = open (f_num + '_' + f_let + '.txt', 'a+', encoding = 'utf8')
    i = str (i)
    form_file.write (i + '. ' + subj_name + ' ' + auth_names + ' ' + year + '\n')
    i = int (i)
    form_file.close ()
    i += 1
    

def file_read ():
    os.system ('CLS')
    print ('Для начала поиска нажмите Enter. Для окончания чтения и возврата к меню - Escape.')
    key_state = ord(getch())
    if key_state == 27:
        print ('Чтение окончено')
        time.sleep (3)
        write_variant ()
    elif key_state == 13:
        file_search ()
    else:
        print ('Не та клавиша, попробуйте еще.')
        time.sleep (3)
        file_read ()


def file_search ():
    os.system ('CLS')
    global filename
    filename = input ('Введите имя отчета, состоящее из номера класса и буквы класса, разделенных нижним подчеркиванием (Shift + -): ')
    try:
        comp_file = open (filename + '.txt', 'r', encoding = 'utf8')
        for line in comp_file:
            print (line)
    except FileNotFoundError:
        unex_file ()
    comp_file.close ()
    file_exit ()
    
    
def file_redact ():
    redact = input ('Введите название пункта и исправленное значение: ')
    red_file = open (filename + '.txt', 'a', encoding = 'utf8')
    red_file.write ('\n')
    red_file.write ('###ИСПРАВЛЕНИЕ###' + '\n')
    red_file.write (redact + '\n')
    red_file.write ('###КОНЕЦ_ИСПРАВЛЕНИЯ###' + '\n')
    red_file.close ()
    
    
def redact_exit ():
    print ('Чтобы вернуться к поисковику, нажмите Enter. Чтобы попасть в главное меню, нажмите Escape')
    key_state = ord(getch())
    if key_state == 27:
        write_variant ()
    elif key_state == 13:
        file_search ()
    else:
        print ('Не та клавиша, попробуйте еще.')
        time.sleep (3)
        redact_exit ()   

def file_exit ():
    print ('Чтобы вернуться к поисковику, нажмите Enter. Чтобы редактировать найденный файл, нажмите Ё/~. Чтобы попасть в главное меню, нажмите Escape')
    key_state = ord(getch())
    if key_state == 27 or key_state == 13 or key_state == 63 or key_state == 96:
        if key_state == 27:
            write_variant ()
        elif key_state == 13:
            file_search ()
        else:
            file_redact ()
            redact_exit ()
    else:
        print ('Не та клавиша, попробуйте еще.')
        time.sleep (3)
        file_exit ()   
    
    
def unex_file (): 
    print ('Файла не существует. Если вы хотите создать такой файл, нажмите Enter. Для корректировки имени файла нажмите Escape: ')
    key_state = ord(getch())
    if key_state == 27:
        print ('Скорректируйте имя файла. Проверьте раскладку, возможно вы ввели букву класса латиницей.')
        time.sleep (3)
        file_search ()
    elif key_state == 13:
        form_initial ()
        file_form ()
        book_add()
        file_search ()
    else:
        print ('Не та клавиша, попробуйте еще.')
        time.sleep (3)
        unex_file ()


def end_variant ():
    global i
    print ('Для продолжения записи нажмите Enter. Для окончания записи - Escape.')
    key_state = ord(getch())
    if key_state == 27:
        i -= 1
        i = str (i)
        print ('Записано ' + i + ' книг')
        time.sleep (3)
        i = int (i)
        i = 1
        write_variant ()
    elif key_state == 13:
        book_add ()
        end_variant ()
    else:
        print ('Не та клавиша, попробуйте еще.')
        time.sleep (3)
        end_variant ()
    
    
def write_variant ():
    os.system ('CLS')
    print ('Для создания записи нажмите Enter. Для поиска файла нажмите Ё/~. Для окончания работы - Escape.')
    key_state = ord(getch())
    if key_state == 27 or key_state == 13 or key_state == 63 or key_state == 96:
        if key_state == 27:
            print ('Удачного дня')
            time.sleep (3)
        elif key_state == 13:
            form_initial ()
            file_form ()
            book_add()
            end_variant ()
        else:
            file_read ()
    else:
        print ('Не та клавиша, попробуйте еще.')
        time.sleep (3)
        write_variant ()
    
    
write_variant ()
Вялые питоны: лень, смекалка, пофигизм!
pigeon890 вне форума Ответить с цитированием
Старый 24.01.2019, 13:35   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

In most cases you should use verbs for function names (and nouns for variables), such as check_duplicates(), close_file(), init_form()
https://ru.hexlet.io/blog/posts/naming-in-programming
https://ru.hexlet.io/blog/posts/naming-errors-1

Also the word order is weird in some places. Why file_read instead of read_file?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 24.01.2019 в 13:40.
Alex11223 вне форума Ответить с цитированием
Старый 24.01.2019, 13:39   #3
pigeon890
Пользователь
 
Регистрация: 24.01.2019
Сообщений: 19
По умолчанию

You know, it was written in the middle of the night and I did not care at all. Thank you a lot for this notification, I'll fix it and I got your words about naming.
Вялые питоны: лень, смекалка, пофигизм!
pigeon890 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка кода на ошибки в С++ Cyber321 Помощь студентам 19 26.11.2018 10:17
Проверка кода Сайхан JavaScript, Ajax 5 15.06.2016 00:45
Проверка кода программы. East Undia Trading Помощь студентам 11 25.11.2013 22:08
Проверка кода Ёжик в тумане Паскаль, Turbo Pascal, PascalABC.NET 5 14.01.2013 18:56
Проверка кода С++ AlekCaHdpyLLlka Visual C++ 4 11.05.2012 22:35