Задать вопрос
  • Я учу питон, и в данный момент я пытаюсь сделать калькулятор который проверяет данные которые вводит пользователь?

    @GNation
    На данный момент я на телефоне, так что все в подробностях описать не могу.
    И так, сначала лучше всего напишите функции и переназовите их, чтобы не путаться:
    def get_num1():
        while True:
            num_1 = input('Введите первое целое положительное число: ')
            if num_1.isdigit():
                return int(num_1)
            else:
                print('Вы ввели не число!')
    
    def get_num2():
        while True:
            num_2 = input('Введите второе целое положительное число: ')
            if num_2.isdigit():
                return int(num_2)
            else:
                print('Вы ввели не число!')
    Там где return подставляем int(...) дабы возвращать число, а не строку(string). Также в python после двоеточий лучше переходите на след строку, даже если это всего лишь return, так принято видете ли :)

    После чего мы задаем переменным полученные цифрам:
    num1 = get_num1()
    num2 = get_num2()

    Далее заключаете в функцию только получение "эффекта", тоже самое, что и с get_num1 или get_num2(спасибо dim5x, что немного сократил длительность моей боли):
    def get_effect():
        while True:
            effect = input("Напишите что вы хотите сделать, отнять, прибавить, умножить,разделить, возвести в степень, целое деление, остаток от деления: ")
            if effect in ("+", "-", "*", "/", "**", "//", "%"):
                return effect
            else:
                print('Нету такого действия!')

    Потом опять же задаем переменной полученный "эффект":
    effect = get_effect()

    Далее конечно решение:
    if effect == "+" :
        print(num_1 + num_2)
    # + - сложение
    elif effect == "-":
        print(num_1 - num_2)
    # - — вычитание
    elif effect == "*":
        print(num_1 * num_2)
    # * — умножение
    elif effect == "/":
        print(num_1 / num_2)
    # / — деление
    elif effect == "**":
        print(num_1 ** num_2)
    # ** — возведение в степень
    elif effect == "//":
        print(num_1 // num_2)
    # // — целочисленное деление
    elif effect == "%":
        print(num_1 % num_2)
    # % — остаток от деления


    Советую внимательно относится даже к мелочам. Так же рекомендую почитать этот документ о написании чистого кода. Возможно я не придерживался к нему в этом ответе, но я все же на телефоне))
    Ответ написан
    2 комментария
  • Я учу питон, и в данный момент я пытаюсь сделать калькулятор который проверяет данные которые вводит пользователь?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Вы пытаетесь выполнять операции с функциями:
    >>> def num_1():
    ...     ...
    ...
    >>> def num_2():
    ...     ...
    ...
    >>> num_1 + num_2
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unsupported operand type(s) for +: 'function' and 'function'
    >>> type(num_1)
    <class 'function'>
    >>> type(num_2)
    <class 'function'>
    Ответ написан
    Комментировать
  • Я учу питон, и в данный момент я пытаюсь сделать калькулятор который проверяет данные которые вводит пользователь?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    С одним циклом:
    num_1 = None
    num_2 = None
    effect = None
    
    while True:
        if num_1 is None:
            input_value = input("Введите первое число: ")
            if input_value.isdigit():
                num_1 = int(input_value)
            else:
                print('Вы ввели не число!')
                continue
    
        if num_2 is None:
            input_value = input("Введите второе число: ")
            if input_value.isdigit():
                num_2 = int(input_value)
            else:
                print('Вы ввели не число!')
                continue
    
        if effect is None:
            input_value = input(
                "Напишите что вы хотите сделать (отнять, прибавить, умножить, разделить, возвести в степень, целое деление, остаток от деления): ")
            if input_value in ("+", "-", "*", "/", "**", "//", "%"):
                effect = input_value
                break
            else:
                print('Нету такого действия!')
                continue
    
    # Выполнение операции
    if effect == "+":
        print(num_1 + num_2)
    elif effect == "-":
        print(num_1 - num_2)
    elif effect == "*":
        print(num_1 * num_2)
    elif effect == "/":
        print(num_1 / num_2)
    elif effect == "**":
        print(num_1 ** num_2)
    elif effect == "//":
        print(num_1 // num_2)
    elif effect == "%":
        print(num_1 % num_2)
    Ответ написан
    Комментировать
  • Я учу питон, и в данный момент я пытаюсь сделать калькулятор который проверяет данные которые вводит пользователь?

    @SunTechnik
    Вы путаете значение переменных, имена функций и вызов функций. К тому же, Вы сами называете из одними и те ми же именами.

    Имена переменных которые были объявлены в функции, являеются локальными, и все функции - их нет.

    Так как нет комментариев, то не всегда понятно, что именно Вы хотите получить.

    print(num_1()) вызовет функцию и напечатает возвращаемое значение, но сама переменныя num_1 забудется, так как объявлена в функции.

    Если делать минимальные правки, то можно предложить такой код:
    def f_num_1 ():
        while True:
            num_1 = input('Введите первое целое положительное число: ')
            if num_1.isdigit() : return int(num_1)
            else:
                print('Вы ввели не число!')
    num_1=f_num_1()
    print(num_1)
    
    def f_num_2 ():
        while True:
            num_2 = input('Введите второе целое положительное число: ')
            if num_2.isdigit() : return int(num_2)
    
    num_2=f_num_2()
    print(num_2)
    
    effect = None
    
    while effect not in ['+', '-', '*', '/', '**', '//','%']:
        effect = input ('Какое действие тебе нужно? (+ = сложение, - = вычетание, * = умножение, / = деление, ** = возведение в степень/, // = Деление без остатка) ')
    
        if effect == '+':
            print(num_1 + num_2)
        elif effect == '-':
            print(num_1 - num_2)
        elif effect == '*':
            print(num_1 * num_2)
        elif effect == '/':
            print(num_1 / num_2)
        elif effect == '**':
            print(num_1 ** num_2)
        elif effect == '//':
            print(num_1 // num_2)
        elif effect == '%':
            print(num_1 % num_2)
        else:
            print('Такого варианта нету')


    Логичнее, использовать одну функцию для запроса числа. Если надо, что бы в приглашение отличалось, его можно передавать как параметр функции.
    Ответ написан
    Комментировать
  • Я учу питон, и в данный момент я пытаюсь сделать калькулятор который проверяет данные которые вводит пользователь?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, не надо называть переменные и функции одинаково (num_1 и num_1, num_2 и num_2).
    Во-вторых, переменные, созданные внутри функции, обычно не видны снаружи. Ты правильно пытаешься использовать оператор return, чтобы вернуть значение из функции. Но ты не учёл, что когда функцию вызываешь, результат лучше сохранить в переменную, и потом использовать её.

    number_1 = num_1()
    number_2 = num_2()
    # дальше работаешь с number_1 и number_2
    Ответ написан
    6 комментариев