Форум сайта python.su
print('\t# Author: Xakep321') print('/open console\n/help - спискок команд') def var(): while True: com=input('/') if com in ('help','calc2','calc3','info','exit console'): if com=='help': print('Команды') print('\t/help - список команд\n\t/calc2 - калькулятор с двумя переменными\n\t/calc3 - калькулятор с тремя переменными\n\t/info - сравнение чисел\n\t/exit (название приложения) - выход из приложения в консоль') if com=='calc2': print('Калькулятор с двумя переменными') while True: a=input('Первое значение: ') if a=='exit calc2': a=str(a) var() break elif a!='exit calc2': a=float(a) b=input('Операция: ') if b=='exit calc2': var() break if b!='exit calc2': if b in ('+','-','*','/','//','**'): c=input('Второе значение: ') if c=='exit calc2': c=str(c) var() break if c!='exit calc2': c=float(c) if b == '+': print(a,'+',c,'=',a+c) elif b == '-': print(a,'-',c,'=',a-c) elif b == '*': print(a,'*',c,'=',a*c) elif b == '/': if c != 0: print(a,'/',c,'=',a/c) else: print('Деление на ноль невозможно!') elif b == '**': print(a,'**',c,'=',a**c) elif b == '//': if c != 0: print(a,'//',c,'=',a//c) else: print('Целочисленное деление на ноль невозможно!') else: print('Неверная операция!') if com=='calc3': print('Калькулятор с тремя переменными') while True: a=input('Первое значение: ') if a=='exit calc3': a=str(a) var() break if a!='exit calc3': a=float(a) b=str(input('Операция: ')) if b=='exit calc3': var() break c=input('Второе значение: ') if c=='exit calc3': c=str(c) var() break if c!='exit calc3': c=float(c) e=str(input('Операция или пробел: ')) if e=='exit calc3': var() break d=input('Третье значение: ') if d=='exit calc3': d=str(d) var() break if d!='exit calc3': d=float(d) if b in ('+','-','*','/','//','**') and e in ('+','-','*','/',' ','//','**'): if b in ('+','-','/','*') and e==' ': if b=='+': print(a,'+',c,'=',a+c) elif b=='-': print(a,'-',c,'=',a-c) elif b=='*': print(a,'*',c,'=',a*c) elif b=='/': print(a,'/',c,'=',a/c) elif b=='**': print(a,'**',c,'=',a**c) elif b=='//': print(a,'//',c,'=',a//c) elif b in ('+','-','/','*','**','//') and e in ('+','-','/','*','**','//'): if b=='+': if e=='+': print(a,'+',c,'+',d,'=',a+c+d) elif e=='-': print(a,'+',c,'-',d,'=',a+c-d) elif e=='*': print(a,'+',c,'*',d,'=',a+c*d) elif e=='/': print(a,'+',c,'/',d,'=',a+c/d) elif e=='**': print(a,'+',c,'**',d,'=',a+c**d) elif e=='//': print(a,'+',c,'//',d,'=',a+c//d) elif b=='-': if e=='+': print(a,'-',c,'+',d,'=',a-c+d) if e=='-': print(a,'-',c,'-',d,'=',a-c-d) if e=='*': print(a,'-',c,'+',d,'=',a-c*d) if e=='/': print(a,'-',c,'+',d,'=',a-c/d) if e=='**': print(a,'-',c,'**',d,'=',a-c**d) if e=='//': print(a,'-',c,'//',d,'=',a-c//d) elif b=='*': if e=='+': print(a,'*',c,'+',d,'=',a*c+d) if e=='-': print(a,'*',c,'-',d,'=',a*c-d) if e=='*': print(a,'*',c,'*',d,'=',a*c*d) if e=='/': print(a,'*',c,'/',d,'=',a*c/d) if e=='**': print(a,'*',c,'**',d,'=',a*c**d) if e=='//': print(a,'*',c,'//',d,'=',a*c//d) elif b=='/': if e=='+': print(a,'/',c,'+',d,'=',a/c+d) if e=='-': print(a,'/',c,'-',d,'=',a/c-d) if e=='*': print(a,'/',c,'*',d,'=',a/c*d) if e=='/': print(a,'/',c,'/',d,'=',a/c/d) elif b=='**': if e=='+': print(a,'**',c,'+',d,'=',a**c+d) if e=='-': print(a,'**',c,'-',d,'=',a**c-d) if e=='*': print(a,'**',c,'*',d,'=',a**c*d) if e=='/': print(a,'**',c,'/',d,'=',a**c/d) if e=='**': print(a,'**',c,'**',d,'=',a**c**d) if e=='//': print(a,'**',c,'//',d,'=',a**c//d) elif b=='//': if e=='+': print(a,'//',c,'+',d,'=',a//c+d) if e=='-': print(a,'//',c,'-',d,'=',a//c-d) if e=='*': print(a,'//',c,'*',d,'=',a//c*d) if e=='/': print(a,'//',c,'/',d,'=',a//c/d) if e=='**': print(a,'//',c,'**',d,'=',a//c**d) if e=='//': print(a,'//',c,'//',d,'=',a//c//d) else: print('Знак неверный!') if com=='info': print('Сравнение чисел') while True: a=input('Введите первое число: ') if a=='exit info': a=str(a) var() break if a!='exit info': a=int(a) b=input('Введите второе число: ') if b=='exit info': b=str(b) var() break if b!='exit info': b=int(b) print('A =',a) print('B =',b) if a>b: print('A > B') elif a==b: print('A = B') elif a<b: print('A < B') if a>0: print('A > 0') elif a==0: print('A = 0') elif a<0: print('0 > A') if b>0: print('B > 0') elif b==0: print('B = 0') elif b<0: print('0 > B') if a>b: print('A > B на',a-b) elif a<b: print('B > A на',b-a) print(a,'+',b,'=',a+b) if a<b: print(b,'-',a,'=',b-a) print(b,'/',a,'=',b/a) else: print(a,'-',b,'=',a-b) print(a,'/',b,'=',a/b) print(a,'*',b,'=',a*b) if com=='exit console': print('/close console...') print(exit(0)) else: print('Неверная команда!') var()
Прикреплённый файлы:
console.py (6,6 KБ)
Офлайн
Рекурсивные вызовы функций не надо делать там, где их не надо делать. Если что-то подразумевает бесконечные рекурсивные вызовы, то от них точно надо избавиться сразу. А бесконечный вызов подменю вполне возможен.
Функции должны вызывать функции, которые должны вызывать функции. При этом сами функции должны быть небольшими, можно и однострочные использовать. Главная задача функции - изолировать код от остальной части программы. Тогда функцию можно заменять полностью, делая это незаметно для остальной программы. При обнаружении ошибок это важно. Когда ты обнаружил ошибку в коде, ты должен всего лишь заменить функцию, в которой эта ошибка, а не дёргать части программы, не относящиеся к ошибке.
Так что конкретно в этой программе нужно сделать, чтобы каждый пункт меню не какой-то код выполнял, а вызывал функцию, а код уже должен быть внутри этой отдельной функции. На каждое действие своя функция. И дальше такая функция может ещё ветвиться и другие функции вызывать. Так ты отвяжешь меню от кода, который в пунктах меню исполняется.
tags: structured paradigm
Отредактировано py.user.next (Фев. 23, 2018 01:33:06)
Офлайн
Использовать табуляцию - крайне нежелательно, код выглядит не красиво. В Python принято 4 пробела. Названия функций и переменных должны быть легко понятны.
Офлайн
1. много копипасты, типа такого :
... if b=='+': if e=='+': print(a,'+',c,'+',d,'=',a+c+d) elif e=='-': print(a,'+',c,'-',d,'=',a+c-d) .........
[code python][/code]
Офлайн
> Использовать табуляцию - крайне нежелательно, код выглядит не красиво.
Использовать табуляцию крайне желательно, тем самым ты избавишь себя от ошибок с отступами.
Офлайн
Смешно. Авто-выравнивание есть во всех IDE, а даже если нагадить, подсветит.
Офлайн
А если у тебя нет IDE, тогда как?
Офлайн
Умные блокноты тоже так умеют. Notepad++, gedit, kate.
Офлайн
А я про блокноты и не говорю. Например иногда нужно подключаться через ssh к серверу и что то там редактировать. На сервере ничего кроме mc и nano не установлено.
Офлайн
nano -ET4
Офлайн