Найти - Пользователи
Полная версия: Не получается впихнуть алгоритм калькулятора сложных процентов в Telegram Bot'a.
Начало » Python для новичков » Не получается впихнуть алгоритм калькулятора сложных процентов в Telegram Bot'a.
1
Gorni_Kozel
Здравствуйте!
Цель проекта: создать универсальный калькулятора для себя и моих однокурсников на финансовом направлении.
Реализация: пайтон последней версии, telegrambotapi последней версии.
Моя задумка реализации: всунуть уже мною написанный под пк(на консоли только работает), уже имеющийся скрипт - алгоритм вычисления сложной процентой ставки раз в n промежуток времени, под среду телеграмботапи.
Проблема: В чем она, я тольком не пойму - но как понимаю исходя из скудности гугл инфы о калькуляторах на телеграмботапи, телеграм и алгебраические вычисления не сильно дружат.
Скрипт калькулятора на консоли:
 K = int(input('Введите первоначальную сумму K: ')) #первоначальная сумма
n = int(input('Введите число лет n: ')) #число лет
klow = int(input('Число начислений в год ( Год(12), полгода(6) ) k: ')) #квартал пока нету, год и полгода в месяцах
r = int(input('Введите сложную годовую процентную ставку r: '))
Knk = int
running = True
#print('K_n*klow = ' + str(K*(1+r/100*klow)**n*klow))
a = float(1+(r/(100*klow)))
w = float(n*klow)
c = float(a**w)
print("-----> K"+str(w)+" = " + str(K * c))

Скрипт бота:
 import telebot
bot = telebot.TeleBot('понятное дело что тут придется скрыть)')
#keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
#keyboard1.row('Зум-айди', '/eko')
K = int
n = int
klow = int
r = int
Knk = int       
#сверху мы видим собственно переменные которые я создал как в калькуляторе.
@bot.message_handler(commands=['start'])
def send_welcome(message):
	bot.send_message(message.chat.id, 'Для начала работы со мной, введи \n/start !!!')
	bot.send_message(message, "Я - бот курса 111063.\n/mat\n/eko\n/fil\n/his\n/inf\n/eng") #reply_markup=keyboard1
	bot.send_message(message.chat.id, 'Калькулятор сложных процентов - /knk')
@bot.message_handler(commands=['mat', 'eko', 'fil', 'his', 'inf', 'eng'])
def zoomid(message):                                                       #дефолт message, uroki - то что в принципе и должно отвечать за заданного в переменной
	uroki = ['mat', 'eko', 'fil', 'his', 'inf', 'eng']
	mat = 7490563693
	eko = 9433130879
	fil = 8821266565
	his = 4792894841
	inf = 3273128376
	eng = 3377977051
	if message.text == '/mat':
		bot.send_message(message.chat.id, 'Zoom ID старого ублюдка:' + str(mat))
	elif message.text == '/eko':
		bot.send_message(message.chat.id, 'Zoom ID безмикрофонного:' + str(eko))
	elif message.text == '/fil':
		bot.send_message(message.chat.id, 'Zoom ID:' + str(fil))
	elif message.text == '/his':
		bot.send_message(message.chat.id, 'Zoom ID:' + str(his))
	elif message.text == '/inf':
		bot.send_message(message.chat.id, 'Zoom ID:' + str(inf))
	elif message.text == '/eng':
		bot.send_message(message.chat.id, 'Zoom ID:' + str(eng))
#снизу идет уже чисто моя логика, сверху же писалось под исходники
#ВВОД ДАННЫХ К Н КЛОУ Р 
#ОПЕРАЦИЯ
#РЕЗУЛЬТ
@bot.message_handler(commands=['rez'])#попытка создать команду показывающую результат
def calik(message):
	K = int
	n = int
	klow = int
	r = int
	Knk = int
	#print('Knk = ' + str(K*(1+r/100*klow)**n*klow))  #просто прототип вычисления
	a = float(1+(r/(100*klow)))
	w = float(n*klow)
	c = float(a**w)									  
	print("-----> K"+str(w)+" = " + str(K * c))		  #это тут просто так висит
	prin = 'K' + eval(str(w)+ '=' + str(K* c))        #тут по сути должен выводиться ответ таким способом
    #user_result = eval(str(user_num1) + user_proc + str(user_num2)) #копировал с другого кода для прототипа
	return prin
@bot.message_handler(commands=['calc'])#Это попытка создать нечто типа K = int(input())
def k_n_klow_r(message):
	K = int(str(message.text))
	n = int(str(message.text))
	klow = int(str(message.text))
	r = int(str(message.text))
	Knk = int(str(message.text))
	calik()                           #попытка, дабы функция калик вызывалась уже на этом моменте и не приходилось псиать отдельно команду результата
bot.polling()

Прикрепляю код бота чтобы в случае чего было легче разобарться
Пожалуйста, кто сможет, дайте совет - я давно преследую эту цель, а цель явно не хочет в руки лезть. Либо же, если тут ничего невозможно сделать , то как мне осуществить этот гребанный калькулятор на андроиде - я уже все нервы сломал(((
xam1816
сначала надо с функцией разобраться что у нее на входе и что на выходе,
я правильно понимаю
 def calc(k,n,klow,r,):
	"""Калькулятор финансовый.
	:param k: первоначальная сумма
	:param n: число лет
	:param klow: число начислений в год( Год(12),полгода(6))
	:param r: годовая процентная ставка
	:return list: список из общего числа начислений и итоговая сумма(???здесь поправить)
	"""
	a = float(1 + (r / (100 * klow)))
	w = float(n * klow)
	c = float(a ** w)
	out = k*c
	return [w,out]

вот так я получил значения
 rate = calc(1000,3,12,4)

вот так значения показал в консоли

 print(f'-----> K{rate[0]}={rate[1]}')
вот так посмотрел документацию к функции
 print(calc.__doc__)

результат в консоли
 -----> K36.0=1127.2718745179145
Калькулятор финансовый.
	:param k: первоначальная сумма
	:param n: число лет
	:param klow: число начислений в год( Год(12),полгода(6))
	:param r: годовая процентная ставка
	:return list: список из общего числа начислений и итоговая сумма(???здесь поправить)
	
Process finished with exit code 0
xam1816
вот набросок
 import telebot
#===================================
def calc(k,n,klow,r,):
	"""Калькулятор финансовый.
	:param k: первоначальная сумма
	:param n: число лет
	:param klow: число начислений в год( Год(12),полгода(6))
	:param r: годовая процентная ставка
	:return list: список из общего числа начислений и итоговая сумма(???здесь поправить)
	"""
	a = float(1 + (r / (100 * klow)))
	w = float(n * klow)
	c = float(a ** w)
	out = k*c
	return [w,out]
#===================================
bot = telebot.TeleBot('Ваш API')
@bot.message_handler(commands=['rez'])
def get_message(message):
	answer = bot.send_message(message.chat.id,"введите через запятую ----> сумма,чило лет,число начислений в год,годовая процентная ставка")
	bot.register_next_step_handler(answer,message_text_handler)
def message_text_handler(message):
	chat = message.chat.id
	args = message.text.split(',')
	list_float = []
	if len(args)!=4:
		bot.send_message(chat,'Недопустимое количество аргументов,должно быть четыре')
		return
	for i in args:
		if i.strip().isdigit():
			list_float.append(float(i))
		else:
			bot.send_message(chat,f'недопустимый символ в аргументе {i}')
			return
	w,out = calc(*list_float)
	bot.send_message(message.chat.id,f'-----> K{w}={out}')
bot.polling(none_stop=True)
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