Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 24, 2018 00:22:56

Xakep321
От: Украина, Харьков
Зарегистрирован: 2018-02-22
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Оцените переделку кода

 def info():
	print('\nИнформация(info)\nНазвание: console+\nАвтор кода: Xakep321\n')
def help():
	print('\nhelp\t-\tсписок комманд\ncalc2\t-\tкалькулятор с двумя переменными\nсalc3\t-\tкалькулятор с тремя переменными\ncompar\t-\tсравнение чисел\nexit + (название приложения)\t-\tвыход из среды\ninfo\t-\tинформация\n')	
def console():
	while True:
		enter=str(input('console > '))
		if enter=='help':
			help()
		elif enter=='exit console':
			print('close console')
			print(exit(0))
		elif enter=='calc2':
			cacl2()
		elif enter=='calc3':
			calc3()
		elif enter=='info':
			info()
		elif enter=='compar':
			compar()
		else:
			print('Неверная команда')
def cacl2():
	print('\n\tКалькулятор с двумя переменными(calc1)')
	while True:
		a=input('Первая переменная: ')
		if a=='exit calc2':
			print('close calc2')
			a=str(a)
			console()
			break
		else:
			a=float(a)
		b=input('Операция: ')
		if b=='exit calc2':
			print('close calc2')
			console()
			break
		c=input('Вторая переменная: ')
		if c=='exit calc2':
			print('close calc2')
			c=str(c)
			console()
			break
		else:
			c=float(c)
		if b in ('+','-','*','/','**','//'):
			if b=='+':
				print(a,b,c,'=',a+c)
			elif b=='-':
				print(a,b,c,'=',a-c)
			elif b=='*':
				print(a,b,c,'=',a*c)
			elif b=='/':
				print(a,b,c,'=',a/c)
			elif b=='**':
				print(a,b,c,'=',a**c)
			elif b=='//':
				print(a,b,c,'=',a//c)
		else:
			print('Неверная операция')
def calc3():
	print('\n\tКалькулятор с тремя переменными(calc3)')
	while True:
		a=input('Первая переменная: ')
		if a=='exit calc3':
			print('close calc3')
			a=str(a)
			console()
			break
		else:
			a=float(a)
		b=input('Операция: ')
		if b=='exit calc3':
			print('close calc3')
			console()
			break
		c=input('Вторая переменная: ')
		if c=='exit calc3':
			print('close calc3')
			c=str(c)
			console()
			break
		else:
			c=float(c)
		d=input('Операция: ')
		if d=='exit calc3':
			print('close calc3')
			console()
			break
		e=input('Третья переменная: ')
		if e=='exit calc3':
			print('close calc3')
			e=str(e)
			console()
			break
		else:
			e=float(e)
		if b in ('+','-','*','/','**','//') and d in ('+','-','*','/','**','//'):
			if b=='+':
				if d=='+':
					print(a,b,c,d,e,'=',a+c+e)
				elif d=='-':
					print(a,b,c,d,e,'=',a+c-e)
				elif d=='*':
					print(a,b,c,d,e,'=',a+c*e)
				elif d=='/':
					print(a,b,c,d,e,'=',a+c/e)
				elif d=='**':
					print(a,b,c,d,e,'=',a+c**e)
				elif d=='//':
					print(a,b,c,d,e,'=',a+c//e)
				else:
					print('Неверная операция')
			elif b=='-':
				if d=='+':
					print(a,b,c,d,e,'=',a-c+e)
				elif d=='-':
					print(a,b,c,d,e,'=',a-c-e)
				elif d=='*':
					print(a,b,c,d,e,'=',a-c*e)
				elif d=='/':
					print(a,b,c,d,e,'=',a-c/d)
				elif d=='**':
					print(a,b,c,d,e,'=',a-c**e)
				elif d=='//':
					print(a,b,c,d,e,'=',a-c//e)
				else:
					print('Неверная операция')
			elif b=='*':
				if d=='+':
					print(a,b,c,d,e,'=',a*c+e)
				elif d=='-':
					print(a,b,c,d,e,'=',a*c-e)
				elif d=='*':
					print(a,b,c,d,e,'=',a*c*e)
				elif d=='/':
					print(a,b,c,d,e,'=',a*c/e)
				elif d=='**':
					print(a,b,c,d,e,'=',a*c**e)
				elif d=='//':
					print(a,b,c,d,e,'=',a*c//e)
				else:
					print('Неверная операция')
			elif b=='/':
				if d=='+':
					print(a,b,c,d,e,'=',a/c+e)
				elif d=='-':
					print(a,b,c,d,e,'=',a/c-e)
				elif d=='*':
					print(a,b,c,d,e,'=',a/c*e)
				elif d=='/':
					print(a,b,c,d,e,'=',a/c/e)
				elif d=='**':
					print(a,b,c,d,e,'=',a/c**e)
				elif d=='//':
					print(a,b,c,d,e,'=',a/c//e)
				else:
					print('Неверная операция')
			elif b=='**':
				if d=='+':
					print(a,b,c,d,e,'=',a**c+e)
				elif d=='-':
					print(a,b,c,d,e,'=',a**c-e)
				elif d=='*':
					print(a,b,c,d,e,'=',a**c*e)
				elif d=='/':
					print(a,b,c,d,e,'=',a**c/e)
				elif d=='**':
					print(a,b,c,d,e,'=',a**c**e)
				elif d=='//':
					print(a,b,c,d,e,'=',a**c//e)
				else:
					print('Неверная операция')
			elif b=='//':
				if d=='+':
					print(a,b,c,d,e,'=',a//c+e)
				elif d=='-':
					print(a,b,c,d,e,'=',a//c-e)
				elif d=='*':
					print(a,b,c,d,e,'=',a//c*e)
				elif d=='/':
					print(a,b,c,d,e,'=',a//c/e)
				elif d=='**':
					print(a,b,c,d,e,'=',a//c**e)
				elif d=='//':
					print(a,b,c,d,e,'=',a//c//e)
				else:
					print('Неверная операция')
			else:
				print('Неверная операция')
def compar():
	print('Сравнение числа(ел)(compar)')
	while True:
		a=input('Первая переменная: ')
		if a=='exit compar':
			print('close compar')
			a=str(a)
			console()
			break
		else:
			a=float(a)
		b=input('Вторая переменная или пробел: ')
		if b=='exit compar':
			print('close compar')
			b=str(b)
			console()
			break
		else:
			if b!=' ':
				if b!='':
					b=float(b)
		if a>0:
			print(a,'> 0')
		elif a<0:
			print('0 >',a)
		if b!=' ':
			if b!='':
				if a>b:
					print(a,'>',b)
				elif a<b:
					print(a,'<',b)
				elif a==b:
					print(a,'=',b)
				if b>0:
					print(b,'> 0')
				elif b<0:
					print('0 >',b)
open=str(input('console > '))
if open=='open':
	console()
elif open=='exit console':
	print('close console')
	print(exit(0))
else:
	print('Неверная команда')

Ввот тот самый код который я переделал с помощью ваших советов. Оцените переделку, код построен на вызове функций, а не на, как было, бесконечной функции. И убрал кучу копипасты, код более радует глаз
Python 3.6.4/Теперь пишу в Sublime

Отредактировано Xakep321 (Фев. 24, 2018 00:27:10)

Прикреплённый файлы:
attachment console+.py (5,8 KБ)

Офлайн

#2 Фев. 24, 2018 01:02:12

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

Оцените переделку кода

У тебя остались рекурсивные вызовы. Вот эти внутренние вызовы console() - это всё рекурсивные вызовы. От них надо избавиться, замени их на return или break.



Отредактировано py.user.next (Фев. 24, 2018 12:02:13)

Офлайн

#3 Фев. 24, 2018 10:04:45

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Оцените переделку кода

уже лучше, но всеравно много копипасты

                        if b=='+':
				if d=='+':
					print(a,b,c,d,e,'=',a+c+e)
...............
			elif b=='-':
				if d=='+':
					print(a,b,c,d,e,'=',a-c+e)
...........
и так далее		
1. по хорошему, тебе нужно от этого отказаться, завтра ты добавишь еще логарифм, или производные, это еще туева хуча ифов. По уму нужно написать на кажде мат действие свою функцию, типа summ(a,b), diff(a, b), mult(a,d), div(a,b) и тд… Потом тебе нужно сделать анализ мат. действий, по типу если среди операндов есть * или / то выполняем снначала их, иначе выполняем все по порядку.
2. вот это:
 	
                if enter=='help':
			help()
		elif enter=='exit console':
			print('close console')
			print(exit(0))
		elif enter=='calc2':
			cacl2()
		elif enter=='calc3':
			calc3()
		elif enter=='info':
			info()
		elif enter=='compar':
			compar()
		else:
			print('Неверная команда')
я бы заменил на словарь, както так:
 commands - {'exit console':exit, 'calc2':calc2, 'calc3'calc3:, 'info':info,.... ну и тд..}
if enter in commands:
    command = command[enter]
    command()
else:
    print('Неверная команда')
    



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#4 Фев. 24, 2018 10:39:36

Xakep321
От: Украина, Харьков
Зарегистрирован: 2018-02-22
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Оцените переделку кода

PEHDOM
уже лучше, но всеравно много копипасты
Здравствуйте,
Спасибо, буду учиться и исправляться

Офлайн

#5 Фев. 24, 2018 10:40:57

Xakep321
От: Украина, Харьков
Зарегистрирован: 2018-02-22
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Оцените переделку кода

py.user.next
У тебя остались рекурсивный вызовы. Вот эти внутренние вызовы console() - это всё рекурсивные вызовы. От них надо избавиться, замени их на return или break.
Здравствуйте,
Спасибо, хорошо, я попробую их заметить, но я лишь начал изучать функции и плохо понимаю суть работы return

Офлайн

#6 Фев. 24, 2018 12:03:47

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

Оцените переделку кода

Xakep321
но я лишь начал изучать функции и плохо понимаю суть работы return
Это всё равно нужно изучить. Что изучишь сегодня, будешь знать завтра. Завтра нужно будет учить следующее. Материала много и всё нужно.



Отредактировано py.user.next (Фев. 24, 2018 12:05:45)

Офлайн

#7 Фев. 24, 2018 16:05:29

Xakep321
От: Украина, Харьков
Зарегистрирован: 2018-02-22
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Оцените переделку кода

py.user.next
Я как раз этим занимаюсь)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version