нужно подробное описание программы для сдачи на зачет

Tom Nethan

Новичок
Пользователь
Апр 21, 2020
12
0
1
сть программа - калькулятор на питоне, преподаватель на сдаче спрашивает значение и смысл всех функций. так же нужны пояснения почему в начале ls_digit используется в связке с flout, для чего это.
очень нужна ваша помощь.
Код:
def is_digit(string):
    if string.isdigit():
        return True
    else:
        try:
            float(string)
            return True
        except ValueError:
            return False


flag = True
while flag:
    flag_internal = True
    while flag_internal:
        num1 = input("Введите первое число: ")
        if is_digit(num1) == False:
            print("Некорректное значение")
            continue
        break

    while flag_internal:
        num2 = input("Введите второе число: ")
        if is_digit(num2) == False:
            print("Некорректное выражение")
            continue
        break

    while flag_internal:
        op = input("Введите операцию: ")
        if not (op == '+' or op == '-' or op == '*' or op == '/'):
            print("Некорректное значение")
            continue
        break

    if op == '+':
        print("Ответ: ", float(num1) + float(num2))

    if op == '-':
        print("Ответ: ", float(num1) - float(num2))

    if op == '*':
        print("Ответ: ", float(num1) * float(num2))

    if op == '/':
        print("Ответ: ", float(num1) / float(num2))

    input_errors = 0
    res = ''
    while flag_internal:
        res = input("Хотите начать сначала? (да/нет)")
        if res.lower() == 'да':
            break
        if input_errors >=2:
            res = 'нет'
            break
        if not (res.lower() == 'да' or res.lower() == 'нет'):
            input_errors += 1
            print("Incorrect input")
            continue
        break

    if res.lower() == 'да':
        continue
    if res.lower() == 'нет':
        break
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Вот прокомментировал ваш код:
Python:
# функция принимает на вход строку
def is_digit(string):
    # проверяет что строка является числом (состоит из цифр)
    if string.isdigit():
        # если является - возвращает True
        return True
    else:
        # если нет - пытается преобразовать строку во float
        # float - это дробное число (например, 2.7)
        try:
            float(string)
            # если получается возвращает True
            return True
        except ValueError:
            # если нет - False
            return False


# флаг, который используется только для задания условия окончания главного цикла
# можно его убрать и просто написать while True:
flag = True
# главный цикл программы (будет выполняться пока не сработает break)
while flag:
    # еще один флаг, который тоже можно убрать и заменить все внутренние
    # циклы на while True:
    flag_internal = True
    # цикл запрашивающий у пользователя первое число и
    # проверяющий его через функцию is_digit()
    # будет выполняться пока is_digit() не вернет True, то есть пользователь
    # не введет число
    while flag_internal:
        num1 = input("Введите первое число: ")
        if is_digit(num1) == False:
            print("Некорректное значение")
            continue
        break
    # цикл делающий тоже что и предыдущий только для второго числа
    while flag_internal:
        num2 = input("Введите второе число: ")
        if is_digit(num2) == False:
            print("Некорректное выражение")
            continue
        break
    # цикл запрашивающий операцию, будет выполняться пока не будет
    # введен один из символов +, -, *, /
    while flag_internal:
        op = input("Введите операцию: ")
        if not (op == '+' or op == '-' or op == '*' or op == '/'):
            print("Некорректное значение")
            continue
        break
    # группа условных операторов, которые в зависимости от
    # выбранной операции выводят ответ, float() тут используется
    # чтобы можно было работать с введенными дробными числами
    if op == '+':
        print("Ответ: ", float(num1) + float(num2))

    if op == '-':
        print("Ответ: ", float(num1) - float(num2))

    if op == '*':
        print("Ответ: ", float(num1) * float(num2))

    if op == '/':
        print("Ответ: ", float(num1) / float(num2))

    input_errors = 0  # переменная для учета количества ошибок ввода
    res = ''  # переменная для ответа пользователя
    # цикл, который спрашивает пользователя начать заново или нет
    while flag_internal:
        res = input("Хотите начать сначала? (да/нет)")
        # если ответ да, то цикл завершается
        if res.lower() == 'да':
            break
        # если более двух неправильных ответов - тоже завершается
        if input_errors >=2:
            res = 'нет'
            break
        # если ответ не правильный (не да или нет)
        # счетчик ошибок увеличивается на 1
        if not (res.lower() == 'да' or res.lower() == 'нет'):
            input_errors += 1
            print("Incorrect input")
            continue
        break
    # условные операторы, которые в зависимости от ответа пользователя
    # либо продолжают главный цикл
    if res.lower() == 'да':
        continue
    # либо завершают его
    if res.lower() == 'нет':
        break
 

Tom Nethan

Новичок
Пользователь
Апр 21, 2020
12
0
1
огромное спасибо!
 

Tom Nethan

Новичок
Пользователь
Апр 21, 2020
12
0
1
Вот прокомментировал ваш код:
Python:
# функция принимает на вход строку
def is_digit(string):
    # проверяет что строка является числом (состоит из цифр)
    if string.isdigit():
        # если является - возвращает True
        return True
    else:
        # если нет - пытается преобразовать строку во float
        # float - это дробное число (например, 2.7)
        try:
            float(string)
            # если получается возвращает True
            return True
        except ValueError:
            # если нет - False
            return False


# флаг, который используется только для задания условия окончания главного цикла
# можно его убрать и просто написать while True:
flag = True
# главный цикл программы (будет выполняться пока не сработает break)
while flag:
    # еще один флаг, который тоже можно убрать и заменить все внутренние
    # циклы на while True:
    flag_internal = True
    # цикл запрашивающий у пользователя первое число и
    # проверяющий его через функцию is_digit()
    # будет выполняться пока is_digit() не вернет True, то есть пользователь
    # не введет число
    while flag_internal:
        num1 = input("Введите первое число: ")
        if is_digit(num1) == False:
            print("Некорректное значение")
            continue
        break
    # цикл делающий тоже что и предыдущий только для второго числа
    while flag_internal:
        num2 = input("Введите второе число: ")
        if is_digit(num2) == False:
            print("Некорректное выражение")
            continue
        break
    # цикл запрашивающий операцию, будет выполняться пока не будет
    # введен один из символов +, -, *, /
    while flag_internal:
        op = input("Введите операцию: ")
        if not (op == '+' or op == '-' or op == '*' or op == '/'):
            print("Некорректное значение")
            continue
        break
    # группа условных операторов, которые в зависимости от
    # выбранной операции выводят ответ, float() тут используется
    # чтобы можно было работать с введенными дробными числами
    if op == '+':
        print("Ответ: ", float(num1) + float(num2))

    if op == '-':
        print("Ответ: ", float(num1) - float(num2))

    if op == '*':
        print("Ответ: ", float(num1) * float(num2))

    if op == '/':
        print("Ответ: ", float(num1) / float(num2))

    input_errors = 0  # переменная для учета количества ошибок ввода
    res = ''  # переменная для ответа пользователя
    # цикл, который спрашивает пользователя начать заново или нет
    while flag_internal:
        res = input("Хотите начать сначала? (да/нет)")
        # если ответ да, то цикл завершается
        if res.lower() == 'да':
            break
        # если более двух неправильных ответов - тоже завершается
        if input_errors >=2:
            res = 'нет'
            break
        # если ответ не правильный (не да или нет)
        # счетчик ошибок увеличивается на 1
        if not (res.lower() == 'да' or res.lower() == 'нет'):
            input_errors += 1
            print("Incorrect input")
            continue
        break
    # условные операторы, которые в зависимости от ответа пользователя
    # либо продолжают главный цикл
    if res.lower() == 'да':
        continue
    # либо завершают его
    if res.lower() == 'нет':
        break
не подскажите, как добавить в код в делении что при условии если num 2 == 0, чтобы программа завершалась
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Не нужно задавать много вопросов в одной теме - создавайте отдельную тему для каждого вопроса.
не подскажите, как добавить в код в делении что при условии если num 2 == 0, чтобы программа завершалась
Вот пример:
Python:
if op == '/':
    if float(num2) != 0:
        print("Ответ: ", float(num1) / float(num2))
    else:
        flag = False
        print('Разделить', float(num1), 'на 0 нельзя.')
        break
 

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