Найти - Пользователи
Полная версия: Мое творение
Начало » Python проекты » Мое творение
1 2
Xakep321
 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()

Как вам? Оцените если не сложно
py.user.next
Рекурсивные вызовы функций не надо делать там, где их не надо делать. Если что-то подразумевает бесконечные рекурсивные вызовы, то от них точно надо избавиться сразу. А бесконечный вызов подменю вполне возможен.

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

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


tags: structured paradigm
InterVi
Использовать табуляцию - крайне нежелательно, код выглядит не красиво. В Python принято 4 пробела. Названия функций и переменных должны быть легко понятны.
PEHDOM
1. много копипасты, типа такого :
 ...
if b=='+':
	if e=='+':
		print(a,'+',c,'+',d,'=',a+c+d)
	elif e=='-':
		print(a,'+',c,'-',d,'=',a+c-d)
.........
это все заменяеться одной поцедурой.
конструкции типа таких print(a,'+',c,'+',d,'=',a+c+d) вообще ввергают в ступор.
посчитайте сначала результат а потом сделайте один раз print(a, b, c, e ,d,'=', result)
2. да и лучше использовать метод format(), ИМХО
3. количество вложеных if-ов зашкаливает, делайте отдельные функции, об этом уже писал py.user.next
Rodegast
> Использовать табуляцию - крайне нежелательно, код выглядит не красиво.

Использовать табуляцию крайне желательно, тем самым ты избавишь себя от ошибок с отступами.
InterVi
Смешно. Авто-выравнивание есть во всех IDE, а даже если нагадить, подсветит.
Rodegast
А если у тебя нет IDE, тогда как?
InterVi
Умные блокноты тоже так умеют. Notepad++, gedit, kate.
Rodegast
А я про блокноты и не говорю. Например иногда нужно подключаться через ssh к серверу и что то там редактировать. На сервере ничего кроме mc и nano не установлено.
InterVi
 nano -ET4
и внимательность
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