Sergomen
@Sergomen
Просто делай добро и оно вернётся

Можно ли упростить код?

Я делаю ботя для телеги и вот заметил что получилось слишком много if и for. поэтому можно ли упростить этот код? и если да то как?
@bot.message_handler(content_types=['text'])
# @bot.inline_handler(func=lambda query: True)
def get_text_messages(message):
	global gnef
	def smiles(smile_name):
		gnew = ['╰(◣﹏◢)╯']
		hmm = ['( ͡° ͜ʖ ͡°)']
		emm = ['(¬_¬ )']
		radost = ['(◠‿◠)','^_^',':-)',':-D',':D',]
		fack = ['(⊙ˍ⊙)','o((⊙﹏⊙))o.',]
		hz = ['¯\_(ツ)_/¯','¯\(°_o)/¯',]
		chawo = ['ㄟ( ▔, ▔ )ㄏ']
		ii = ['<@_@>']

		#hz
		smiless = ['(⊙o⊙)','(*゜ー゜*)','(。_。)','(⊙ˍ⊙)','(⊙_⊙)?','(⊙_⊙;)','(⊙o⊙)','⊙.☉','¯\(°_o)/¯','(°ー°〃)','(@_@;)','(⊙﹏⊙)','( ̄_ ̄)','(x_x)','⊙﹏⊙','(ˉ﹃ˉ)','-_-','( ´_ゝ` )','(╯_╰)','( ̄_, ̄ )','(。・・)ノ','(゜ロ゜;)┛','つ﹏⊂','( ̄、 ̄)','╭(◎﹏◎)','<@_@>','→_→','←_←']
		zlost = ['(⊙x⊙;)',' ̄へ ̄','(︶^︶)','(*  ̄︿ ̄)','<(  ̄^ ̄)','>_<','╰(‵□′)╯','(¬︿̫̿¬☆)','(゜▽゜)','(ヘ・_・)ヘ','( ̄﹏ ̄;)','ಠ_ಠ','ಠಿ_ಠ','(¬_¬ )']
		grust = [">﹏<",'>︿<','<(_ _)>','{{{(>_<)}}}','≡(▔﹏▔)≡','⊙﹏⊙','⊙﹏⊙∥','╯︿╰','::>_<::','(┬┬﹏┬┬)','(;′⌒`)','≧ ﹏ ≦','(≧﹏ ≦)','<( _ _ )>','~~>_<~~','X﹏X','ಥ_ಥ']
		zaiskiwanie = ['(o|o)','(^人^)','ψ(._. )>','◑﹏◐',"(●'◡'●)",'o(〃^▽^〃)o','(ง •_•)ง','(✿◠‿◠)','= ̄ω ̄=','(✿◕‿◕✿)','╰( ̄ω ̄o)','~( ̄▽ ̄)~','༼ つ ◕_◕ ༽つ','ԅ(¯﹃¯ԅ)','( ̄﹃ ̄)','( ͡• ͜ʖ ͡• )','( ⓛ ω ⓛ *)']
		privet = ['-O-','\(@^0^@)/','ヾ(^▽^*)))','(¬‿¬)','(•_•)','(⌐■_■)']
		schaste = ['*^____^*','`(*>﹏<*)′','(*^▽^*)','(❁´◡`❁)','(*^_^*)','(*^-^*)','φ(゜▽゜*)♪','(≧∇≦)ノ','(❁´◡`❁)','(●ˇ∀ˇ●)','\^o^/','(‾◡◝)','╰(*°▽°*)╯','(o゚v゚)ノ','( $ _ $ )','(☆▽☆)','ㄟ(≧◇≦)ㄏ','( *︾▽︾)','o(* ̄▽ ̄*)o']
		classic = [';)','^_~',';-)',':)','^_^',':-)',':D','^0^',':-D',':P',':-P',';P',':(',':-(','U_U',':[','>:(','>"<','):',':-O','O.O',':-()','~_~','^o^',':-S','<3','^3^',':-x',':/','X_X','=/',';(','T_T',';[','+_+','O_O',':O','¬_¬',';_;','=.=',';]','^_+',';O)',':-]','^.^','=)',':O)',':-3','=D',':|','-.-','>_<',':O(','*_*','=[','8-)','^^;',':-*','B-)','=_=','-0-',':S','$_$',':-$','>.<','-_-','> <',':]','^^','=]',';D','^_-','=P',":'(",'Y.Y','=(']

		#додавання смайлів
		if "::гнев[" in message.text:
			msg = message.text
			for i in range(0, len(gnew)):
				# print(i)
				wtf = "::гнев[{0}]".format(i)
				if wtf in msg:
					# print()
					bot.send_message(message.chat.id,msg.replace(wtf,gnew[i]))
		if "::хмм[" in message.text:
			msg = message.text
			for i in range(0, len(hmm)):
				# print(i)
				wtf = "::хмм[{0}]".format(i)
				if wtf in msg:
					# print()
					bot.send_message(message.chat.id,msg.replace(wtf,hmm[i]))
		if "::емм[" in message.text:
			msg = message.text
			for i in range(0, len(emm)):
				# print(i)
				wtf = "::емм[{0}]".format(i)
				if wtf in msg:
					# print()
					bot.send_message(message.chat.id,msg.replace(wtf,emm[i]))
		
		if "::радость[" in message.text:
			msg = message.text
			for i in range(0, len(radost)):
				# print(i)
				wtf = "::радость[{0}]".format(i)
				if wtf in msg:
					# print()
					bot.send_message(message.chat.id,msg.replace(wtf,radost[i]))
		if "::фак[" in message.text:
			msg = message.text
			for i in range(0, len(fack)):
				# print(i)
				wtf = "::фак[{0}]".format(i)
				if wtf in msg:
					# print()
					bot.send_message(message.chat.id,msg.replace(wtf,fack[i]))
		if "::хз[" in message.text:
			msg = message.text
			for i in range(0, len(hz)):
				# print(i)
				wtf = "::хз[{0}]".format(i)
				if wtf in msg:
					# print()
					bot.send_message(message.chat.id,msg.replace(wtf,hz[i]))
		if "::чаво[" in message.text:
			msg = message.text
			for i in range(0, len(chawo)):
				# print(i)
				wtf = "::чаво[{0}]".format(i)
				if wtf in msg:
					# print()
					bot.send_message(message.chat.id,msg.replace(wtf,chawo[i]))
		if "::и[" in message.text:
			msg = message.text
			for i in range(0, len(ii)):
				# print(i)
				wtf = "::и[{0}]".format(i)
				if wtf in msg:
					# print()
					bot.send_message(message.chat.id,msg.replace(wtf,ii[i]))
		if "::смайлы[" in message.text:
			msg = message.text
			for i in range(0, len(smiless)):
				# print(i)
				wtf = "::смайлы[{0}]".format(i)
				if wtf in msg:
					# print()
					bot.send_message(message.chat.id,msg.replace(wtf,smiless[i]))
		if "::злость[" in message.text:
			msg = message.text
			for i in range(0, len(zlost)):
				# print(i)
				wtf = "::грусть[{0}]".format(i)
				if wtf in msg:
					# print()
					bot.send_message(message.chat.id,msg.replace(wtf,zlost[i]))
		if "::заискивание[" in message.text:
			msg = message.text
			for i in range(0, len(zaiskiwanie)):
				# print(i)
				wtf = "::заискивание[{0}]".format(i)
				if wtf in msg:
					# print()
					bot.send_message(message.chat.id,msg.replace(wtf,zaiskiwanie[i]))
		if "::привет[" in message.text:
			msg = message.text
			for i in range(0, len(privet)):
				# print(i)
				wtf = "::привет[{0}]".format(i)
				if wtf in msg:
					# print()
					bot.send_message(message.chat.id,msg.replace(wtf,privet[i]))
		if "::счастье[" in message.text:
			msg = message.text
			for i in range(0, len(schaste)):
				# print(i)
				wtf = "::счастье[{0}]".format(i)
				if wtf in msg:
					# print()
					bot.send_message(message.chat.id,msg.replace(wtf,schaste[i]))
		if "::класика[" in message.text:
			msg = message.text
			for i in range(0, len(classic)):
				# print(i)
				wtf = "::класика[{0}]".format(i)
				if wtf in msg:
					# print()
					bot.send_message(message.chat.id,msg.replace(wtf,classic[i]))
		
		#список смайлів
		if smile_name == 'list':
			a = 0
			b = 0 
			c = 0 
			d = 0 
			e = 0 
			f = 0 
			g = 0 
			h = 0 
			j = 0 
			k = 0 
			l = 0 
			m = 0 
			n = 0 
			o = 0
			p = 0
			slist0 = '\n '
			slist1 = '\n '
			slist2 = '\n '
			slist3 = '\n '
			smail_list = '\n'
			for i in gnew:
				slist0 += '::гнев[' + str(a) + ']: ' + str(i) + ' \n '
				a += 1
			
			for i in hmm:
				slist0 += '::хмм['+ str(b) + ']: ' + str(i) + ' \n '
				b += 1
			for i in emm:
				slist0 += '::емм['+ str(c) + ']: ' + str(i) + ' \n '
				c += 1
			for i in radost:
				slist0 += '::радость['+ str(d) + ']: ' + str(i) + ' \n '
				d += 1
			for i in fack:
				slist0 += '::фак['+ str(e) + ']: ' + str(i) + ' \n '
				e += 1
			for i in hz:
				slist0 += '::хз['+ str(f) + ']: ' + str(i) + ' \n '
				f += 1
			for i in chawo:
				slist0 += '::чаво['+ str(g) + ']: ' + str(i) + ' \n '
				g += 1
			for i in ii:
				slist0 += '::и['+ str(h) + ']: ' + str(i) + ' \n '
				h += 1
			
			for i in smiless:
				slist1 += '::смайлы['+ str(j) + ']: ' + str(i) + ' \n '
				j += 1
			for i in zlost:
				slist1 += '::злость['+ str(k) + ']: ' + str(i) + ' \n '
				k += 1
			for i in grust:
				slist1 += '::грусть['+ str(l) + ']: ' + str(i) + ' \n '
				l += 1
			for i in zaiskiwanie:
				slist2 += '::заискивание['+ str(m) + ']: ' + str(i) + ' \n '
				m += 1
			for i in privet:
				slist2 += '::привет['+ str(n) + ']: ' + str(i) + ' \n '
				n += 1
			for i in schaste:
				slist2 += '::счастье['+ str(o) + ']: ' + str(i) + ' \n '
				o += 1
			for i in classic:
				slist3 += '::класика['+ str(p) + ']: ' + str(i) + ' \n '
				p += 1
			smail_list += "\n\n Думаю некоторым смайлам может подойти уникальное назвение, либо я не туда их записал. Поэтому если хотите предложить название то напишите `/предлагаю ::типсмайла[номерсмайла]=название`(покачто в разработке) \n\n "
			# smail_list = str(smail_list)
			# print(smail_list)
			bot.send_message(message.chat.id,slist0)
			bot.send_message(message.chat.id,slist1)
			bot.send_message(message.chat.id,slist2)
			bot.send_message(message.chat.id,slist3)
			bot.send_message(message.chat.id,smail_list)
  • Вопрос задан
  • 317 просмотров
Пригласить эксперта
Ответы на вопрос 2
@AstraVlad
Финансист, консультант, программист-любитель
Например положить команды и вызываемые ими смайлики с словарь вроде smileys = {text: smile_list} и сделать цикл:
for text, smile_list in smileys:
    if text in message.text:
        msg = message.text
        for i in range(0, len(smile_list)):
            wtf = (text+"{0}]").format(i)
            if wtf in msg:
                  bot.send_message(message.chat.id,msg.replace(wtf,smile_list[i]))


Список смайлов генерируется аналогично. Вообще, если мы видим, что у нас дважды встречается один и тот же (по структуре) фрагмент кода, значит мы что-то уже сделали не так и тут или нужен цикл или надо выделить его в отдельную функцию.
Ответ написан
lxstvayne
@lxstvayne
Люблю Python
Создай словарь с ключами "::<ваша уникальная эмоция>" и значением - соответственный смайл. Если эмоций на один ключ много, то делай значение-массив. Потом ищи в сообщении свою уникальную команду (ключ словаря : ) ) бери значение и делай с ним, что захочешь. Если есть повторение одного и того же кода, значит код стоит упрощать или выносить в функции. Такой код читается лучше. В вашем очень трудно разобраться
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы