Найти - Пользователи
Полная версия: Как сделать код меньше
Начало » Python для новичков » Как сделать код меньше
1
Whiteflower
Добрый день.Недавно начал изучать python.Создал самый простой и пока что сырой калькулятор…
 while True:
        print("Options:")
        print("Enter 'add' to add two numbers")
        print("Enter 'subt' to subtract two numbers")
        print("Enter 'multi' to multiply two numbers")
        print("Enter 'divide' to divide two numbers")
        print("Enter 'percent' to find it")
        print("Enter 'sqrt' to find it")
        print("Enter 'quit' to end the program")
        user_input = input(": ")
        if user_input == "quit":
                break
        elif user_input == "add":
                try:
                        num1 = float(input("Enter a number: "))
                        num2 = float(input("Enter another number: "))
                except ValueError:
                        print("Not an integer")
                        continue
                result = str(num1 + num2)
                print("The answer is " + result)
        elif user_input == "subt":
                num1 = float(input("Enter a number: "))
                num2 = float(input("Enter another number: "))
                result = str(num1 - num2)
                print("The answer is " + result)
        elif user_input == "multi":
                num1 = float(input("Enter a number: "))
                num2 = float(input("Enter another number: "))
                result = str(num1 * num2)
                print("The answer is " + result)
        elif user_input == "divide":
                num1 = float(input("Enter a number: "))
                num2 = float(input("Enter another number: "))
                result = str(num1 / num2)
                print("The answer is " + result)
        elif user_input == "percent":
                num1 = float(input("Enter a number: "))
                percent = float(input("Enter percent: "))
                result = str(num1 / 100 * percent)
                print("The answer is " + result)
        elif user_input == "sqrt":
                num1 = float(input("Enter a number: "))
                import math
                result = str(math.sqrt(num1))
                print("The answer is " + result)
        else:
                print("Unknown input")
        
Изначально в коде не было проверки ввода чисел.Программа вылетала,если ты вводил не число.Далее я добавил проверку ввода…
 try:
                        num1 = float(input("Enter a number: "))
                        num2 = float(input("Enter another number: "))
                except ValueError:
                        print("Not an integer")
                        continue
Данную проверку я добавил только для сложения чисел.Конечно я могу скопировать и вставить в умножение деление и т.д. но мне интересно,как сделать это проще.Возможно ли сделать функцию для проверки ввода чисел,тем самым уменьшить объем.
py.user.next
Выведи ввод чисел наверх. После того как выведешь, сделаешь функцию ввода с проверкой внутри. В ветвях должны остаться только операции над уже введёнными числами.
Whiteflower
py.user.next
Выведи ввод чисел наверх. После того как выведешь, сделаешь функцию ввода с проверкой внутри. В ветвях должны остаться только операции над уже введёнными числами.
Спасибо за помощь,но я только начал.Не понял,как это сделать
py.user.next
Вот смотри. Например, тебе надоело вводить данные и ты хочешь просто записать их в файл и вызвать свою программу для этого файла. Как ты это сделаешь? Да никак. Везде понапихан ввод из консоли. То же самое насчёт вывода результата. Ты выводишь в консоль, а нужно будет вывести в файл или вообще передать по сети или на сайт.

Соответственно, нужно разделить такие вещи, как ввод, вычисление и вывод. Тогда любую часть можно поменять, можно её выбирать по условию. Если есть флажок где-то “вводить из файла”, то вводить данные из файла. Если есть флажок где-то “выводить в файл”, то выводить данные в файл. А если есть флажок где-то “вычислить в поле комплексных чисел”, то произвести вычисление с учётом того, что квадратный корень из отрицательного числа существует.

Поэтому нужно отделить друг от друга ввод, вычисления и вывод. Они должны находиться в разных местах кода.

Пример ввода чисел
  
>>> def input_numbers(message, how_many):
...     out = []
...     for i in range(how_many):
...         string = input(message.format(i + 1))
...         # Здесь ты можешь проверить, что ты там навводил
...         out.append(float(string))
...     return out
... 
>>> def f():
...     # Здесь ты можешь выбрать, сколько чисел вводить и какое сообщение
...     # должно выводиться на экран
...     numbers = input_numbers('Введите число {}: ', 3)
...     return numbers
... 
>>> f()
Введите число 1: 123
Введите число 2: 4.5
Введите число 3: -6.789
[123.0, 4.5, -6.789]
>>>

Здесь ты просто вводишь числа. Этот ввод ты можешь варьировать как угодно, никаких вычислений не происходит при вводе. Ты можешь вводить из консоли, а можешь вводить из файла, а можешь вводить с сайта в Интернете. Когда ты уже всё ввёл и всё проверилось на правильность, тогда ты передаёшь результат ввода на процедуру вычисления, которая тоже может быть устроена сложно. Главное - твои возможности, а не короткость кода. Потому что очень часто в реальных программах нужно просто взять и сделать какую-то вещь, которой нет изначально, которая изначально даже не планировалась. И от свободы в коде будет зависеть, сделаешь ли ты эту вещь и в какой срок, за день или за неделю.
Whiteflower
py.user.next
Вот смотри. Например, тебе надоело вводить данные и ты хочешь просто записать их в файл и вызвать свою программу для этого файла. Как ты это сделаешь? Да никак. Везде понапихан ввод из консоли. То же самое насчёт вывода результата. Ты выводишь в консоль, а нужно будет вывести в файл или вообще передать по сети или на сайт.Соответственно, нужно разделить такие вещи, как ввод, вычисление и вывод. Тогда любую часть можно поменять, можно её выбирать по условию. Если есть флажок где-то “вводить из файла”, то вводить данные из файла. Если есть флажок где-то “выводить в файл”, то выводить данные в файл. А если есть флажок где-то “вычислить в поле комплексных чисел”, то произвести вычисление с учётом того, что квадратный корень из отрицательного числа существует.Поэтому нужно отделить друг от друга ввод, вычисления и вывод. Они должны находиться в разных местах кода.Пример ввода чисел
Большое спасибо за столь большое и подробное объяснение! Судя по дате вашей регистрации вы невероятно опытный человек.
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