Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Телеграм бот на питоне

Кирилл Ларичев Ученик (89), открыт 2 недели назад
функции перевода из одной системы исчисления в другую и генератор паролей работают норм,но калькулятор нет,он выводит всегда 0,хотя код вроде правельный
 import telebot 
import random
from telebot import types

bot = telebot.TeleBot("хренваманемойтикет")

chars = "+-/*!&$#?=@<>abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"

global num1
num1 = 0
global num2
num2 = 0
global ans
ans = 0
@bot.message_handler(commands=["start"])
def start(message):
mess = f"Привет, {message.from_user.first_name}!"
mess_1 = (f"я могу: \n/gen - генерация пароля \n/calc - калькулятор\n/translate - переводчик из десятичной,в бинарную и шестнадцатеричную")
bot.send_message(message.chat.id, mess, parse_mode='html')
bot.send_message(message.chat.id, mess_1, parse_mode='html')

#Генерация пароля
@bot.message_handler(commands=["gen"])
def password(message):
markup = types.InlineKeyboardMarkup()
button = types.InlineKeyboardButton(text="Генератор паролей", callback_data="generate_password")
markup.add(button)

bot.send_message(message.chat.id, "Сколько паролей надо?: ")

bot.register_next_step_handler(message, get_number)


def get_number(message):
number = int(message.text)
bot.send_message(message.chat.id, "Длинна: ")
bot.register_next_step_handler(message, lambda m: get_length(m, number))


def get_length(message, number):
length = int(message.text)

for n in range(number):
password = ""
for i in range(length):
password += random.choice(chars)
bot.send_message(message.chat.id, password)
print(password)
#Генерация пароля

@bot.message_handler(commands=["calc"])
def calc(message):
bot.send_message(message.chat.id, "1 число: ")
num1 = message.text
bot.register_next_step_handler(message, numa2)

def numa2(message):
bot.send_message(message.chat.id, "2 число: ")
num2 = message.text
bot.register_next_step_handler(message, action)

def action(message):
markup_inline = types.ReplyKeyboardMarkup()
plus = types.KeyboardButton('Сложение')
minus = types.KeyboardButton('Вычитание')
de = types.KeyboardButton('Деление')
um = types.KeyboardButton('Умножение')
markup_inline.row(plus,minus,de,um)
bot.send_message(message.chat.id, 'действие', reply_markup=markup_inline)
bot.register_next_step_handler(message,answer)

def answer(message):
ans = 1
if message.text != 'Сложение':
ans = 2


bot.register_next_step_handler(message,printAnswer)
def printAnswer(message):
bot.send_message(message.chat.id, ans)





#Конвертер
@bot.message_handler(commands=["translate"])
def convert(message):
number = message.text

try:
decimal = int(number)
binary = bin(decimal)[2:]

hexadecimal = hex(decimal)[2:]

reply_message = f"Десятичная система: {decimal}\nДвоичная система: {binary}\nШестнадцатеричная система: {hexadecimal}"
except ValueError:
reply_message = "Введите ваше число: "

bot.send_message(message.chat.id, reply_message)
#Конвертер


bot.polling()
Дополнен 2 недели назад
если что бот : @pro12ject_Bot
1 ответ
Dians Профи (875) 2 недели назад
Проблема в том, что в функции calc вы не преобразовываете входные данные в числа. Вместо этого вы сохраняете введенное пользователем значение как строку. Попробуйте преобразовать введенные значения в числа с помощью int() перед сохранением их в переменные num1 и num2, как в примере ниже:


 @bot.message_handler(commands=["calc"]) 
def calc(message):
bot.send_message(message.chat.id, "1 число: ")
bot.register_next_step_handler(message, numa1)

def numa1(message):
global num1
num1 = int(message.text)
bot.send_message(message.chat.id, "2 число: ")
bot.register_next_step_handler(message, numa2)

def numa2(message):
global num2
num2 = int(message.text)
bot.send_message(message.chat.id, "Выберите операцию: сложение, вычитание, деление или умножение")
bot.register_next_step_handler(message, action)

def action(message):
global ans
if message.text == 'сложение':
ans = num1 + num2
elif message.text == 'вычитание':
ans = num1 - num2
elif message.text == 'деление':
ans = num1 / num2
elif message.text == 'умножение':
ans = num1 * num2
else:
ans = "Некорректная операция"

bot.send_message(message.chat.id, f"Ответ: {ans}")


Сделал ИИ ( https://habab.ru/pomoshchnik-v-napisanie-koda-na-python/ )
Кирилл ЛаричевУченик (89) 2 недели назад
спасибо за ответ, я просто добавил в функции глобал переменные и все заработало
Похожие вопросы