Найти - Пользователи
Полная версия: Избежать частых повторений одного и того же кода
Начало » Python для новичков » Избежать частых повторений одного и того же кода
1 2 3
Palrom
py.user.next
Используй
sudo -s
Ок.
py.user.next
Если же тебе постоянно нужно в root'е находиться, значит ты делаешь что-то не то.
Я думаю это просто первый опыт такой в работе с линуксовой консолькой у меня был вчера, который не повторится. Я просто при установке, перебдел, и чтобы не затереть ненароком виндовый загрузчик создал ещё один efi раздел. И выбора операционки при загрузке логично не появилось, по умолчанию стартовал теперь только Линукс, и вот я вчера полдня ковырял GRUB, чтобы сделать выбор при загрузке, а для этого мне раз 50 пришлось переписывать конфиг, а редактировать и сохранять такие вещи, ожидаемо, можно только через root..
Palrom
Слегка дополненный рабочий прототип:
  
from timeit import default_timer as timer
from datetime import timedelta
import random as rd
 
def get_user_answer():
    while True:
        try:
            return int(input())
        except:
            print('В ответе должно быть только целое число.\n'
                  'Пропустить пример нельзя.')
 
def get_rand_addition():
    a, b = rd.choices(range(1, 99), k=2)
    return '+', a, b, a + b
 
def get_rand_subtraction():
    a, b = rd.choices(range(1, 99), k=2)
    while b >= a:
        b = rd.randint(1, 99)
    return '-', a, b, a - b
 
def get_rand_division():
    b = rd.randint(2, 10)
    a = b * rd.randint(1, 10)
    return '/', a, b, a // b
 
def get_rand_multiplication():
    a, b = rd.choices(range(2, 10), k=2)
    return '*', a, b, a * b
 
def shuffle():
    chance = rd.choices([1, 2, 3, 4])
    if 1 in chance:
        return get_rand_addition()
    elif 2 in chance:
        return get_rand_subtraction()
    elif 3 in chance:
        return get_rand_division()
    else:
        return get_rand_multiplication()
 
def solve_exercise(count, exercise_type):
    num_right_answer = 0
    exercises = {'+': get_rand_addition,
                 '-': get_rand_subtraction,
                 '/': get_rand_division,
                 '*': get_rand_multiplication,
                 's': shuffle}
    time_start = timer()
    for _ in range(count):
        data = exercises[exercise_type]() # Вот до этого я бы сам не допёр наверно.
        print(f'{data[1]} {data[0]} {data[2]} = ', end='')
        if get_user_answer() == data[3]:
            print('Верно!')
            num_right_answer += 1
        else:
            print(f'Неверно, будет {data[3]}')
    time_end = timer()
    return num_right_answer, str(timedelta(seconds=time_end-time_start))
 
def get_exercise_count():
    while True:
        try:
            n = int(input('Сколько примеров решить?\n>>> '))
            if n > 0:
                return n
            else:
                print('Минимум 1.')
        except:
            print('Должно быть целое число больше нуля.')
 
def get_exercise_type():
    while True:
        s = input('Выберите тип примеров: + | - | / | * | s (всё подряд)\n>>> ')
        if s in ['+', '-', '/', '*', 's']:
            return s
        else:
            print('Нужно ввести один из следующих знаков: + - / * или s')
 
def ask_continue():
    while True:
        s = input('Решать еще раз? y|n\n>>> ').lower()
        if s == 'y':
            return True
        elif s == 'n':
            return False
 
def main():
    print('Калькуляция на время.')
    run = True
    while run:
        count_ex = get_exercise_count()
        type_ex = get_exercise_type()
        num_right_answer, time = solve_exercise(count_ex, type_ex)
        print(f'Правильных ответов {num_right_answer} из {count_ex}, время выполнения {time[2:10]}')
        run = ask_continue()
    print('Завершение программы..')
 
if __name__ == '__main__':
    main()
Изменил формат времени на более удобоваримый, приторочил умножение и деление и возможность решать примеры со случайным знаком.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB