Уведомления

Группа в Telegram: @pythonsu

#1 Июль 9, 2019 14:44:24

Whiteflower
Зарегистрирован: 2019-07-08
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Как сделать код меньше

Добрый день.Недавно начал изучать 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
Данную проверку я добавил только для сложения чисел.Конечно я могу скопировать и вставить в умножение деление и т.д. но мне интересно,как сделать это проще.Возможно ли сделать функцию для проверки ввода чисел,тем самым уменьшить объем.

Офлайн

#2 Июль 9, 2019 15:23:37

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10024
Репутация: +  857  -
Профиль   Отправить e-mail  

Как сделать код меньше

Выведи ввод чисел наверх. После того как выведешь, сделаешь функцию ввода с проверкой внутри. В ветвях должны остаться только операции над уже введёнными числами.



Офлайн

#3 Июль 9, 2019 15:58:22

Whiteflower
Зарегистрирован: 2019-07-08
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Как сделать код меньше

py.user.next
Выведи ввод чисел наверх. После того как выведешь, сделаешь функцию ввода с проверкой внутри. В ветвях должны остаться только операции над уже введёнными числами.
Спасибо за помощь,но я только начал.Не понял,как это сделать

Офлайн

#4 Июль 10, 2019 03:50:37

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10024
Репутация: +  857  -
Профиль   Отправить e-mail  

Как сделать код меньше

Вот смотри. Например, тебе надоело вводить данные и ты хочешь просто записать их в файл и вызвать свою программу для этого файла. Как ты это сделаешь? Да никак. Везде понапихан ввод из консоли. То же самое насчёт вывода результата. Ты выводишь в консоль, а нужно будет вывести в файл или вообще передать по сети или на сайт.

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

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

Пример ввода чисел

  
>>> 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]
>>>

Здесь ты просто вводишь числа. Этот ввод ты можешь варьировать как угодно, никаких вычислений не происходит при вводе. Ты можешь вводить из консоли, а можешь вводить из файла, а можешь вводить с сайта в Интернете. Когда ты уже всё ввёл и всё проверилось на правильность, тогда ты передаёшь результат ввода на процедуру вычисления, которая тоже может быть устроена сложно. Главное - твои возможности, а не короткость кода. Потому что очень часто в реальных программах нужно просто взять и сделать какую-то вещь, которой нет изначально, которая изначально даже не планировалась. И от свободы в коде будет зависеть, сделаешь ли ты эту вещь и в какой срок, за день или за неделю.



Отредактировано py.user.next (Июль 10, 2019 04:04:37)

Офлайн

#5 Июль 10, 2019 11:46:04

Whiteflower
Зарегистрирован: 2019-07-08
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Как сделать код меньше

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

Отредактировано Whiteflower (Июль 10, 2019 11:49:45)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version