Cannot fix the error in line 100 - txt = 'Игра "Виселица" \n' + BotMessage(). BotMessage() does not accept 4 values. How to fix this error? And are there any other potential errors in the code?
import telebot
import random
Token = '8488484'
bot = telebot.TeleBot(Token)
hangman = ['''
+---+
|
|
|
===''', '''
+---+
0 |
|
|
===''', '''
+---+
0 |
| |
|
===''', '''
+---+
0 |
/| |
|
===''', '''
+---+
0 |
/|\ |
|
===''', '''
+---+
0 |
/|\ |
/ |
===''', '''
+---+
0 |
/|\ |
/ \ |
===''']
words = 'акула баран бегемот верблюд ворона гепард гиена дельфин дятел ехидна жаба жираф заяц зебра игуана кабан козёл лебедь ленивец медведь мангуст норка носорог олень пингвин попугай собака суслик тюлень утконос фазан хорёк хомяк цапля чайка щегол ягуар ястреб'.split()
def RandomWord(WordList):
word = random.randint(0, len(WordList) - 1)
return WordList[word]
def interface(unCorrectLetters, CorrectLetter, Riddle):
person = hangman[len(unCorrectLetters)]
UNCletter = str('Неправильные буквы:', end=' ')
for letter in unCorrectLetters:
a = str(letter, end=' ')
spaces = '_' * len(Riddle)
for i in range(len(Riddle)):
if Riddle[i] in CorrectLetter:
spaces = spaces[:i] + Riddle[i] + spaces[i+1:]
for letter in spaces:
b = str(letter, end=' ')
input_letter = 'Введите букву'
#main(person, UNCletter, spaces, input_letter)
return (person, UNCletter, spaces, input_letter)
def Guess(message, already):
while True:
guess = message.text.lower()
if len(guess) != 1:
bot.send_message(message.from_user.id, 'Введите одну букву')
elif guess in already:
bot.send_message(message.from_user.id, 'Вы уже называли эту букву, введите другую')
elif guess not in 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя':
bot.send_message(message.from_user.id, 'Вводить можно только буквы')
else:
return guess
def BotMessage(person, UNCletter, spaces, input_letter):
bot_message = person
bot_message += "\n" + UNCletter
bot_message += "\n" + spaces
bot_message += "\n" + input_letter
return bot_message
help = 'Привет! Это игра, в которой бот загадывает слово, а твоя задача его угадать. Чтобы начать игру, напиши команду /hanging'
@bot.message_handler(content_types=['text'])
def main(message):
if message.text == '/hanging':
txt = 'Игра "Виселица" \n' + BotMessage()
bot.send_message(message.from_user.id, txt)
unCorrectLetters = ''
CorrectLetter = ''
Riddle = RandomWord(words)
while True:
interface_variables = interface(unCorrectLetters, CorrectLetter, Riddle)
guess = Guess(message, unCorrectLetters + CorrectLetter)
if guess in Riddle:
CorrectLetter = CorrectLetter + guess
allLetters = True
for i in range(len(Riddle)):
if Riddle[i] not in CorrectLetter:
allLetters = False
break
if allLetters:
bot.send_message(message.from_user.id, 'Вы угадали! Загаданное слово - "' + Riddle + '"!')
break
else:
unCorrectLetters = unCorrectLetters + guess
if len(unCorrectLetters) == len(hangman) - 1:
interface(unCorrectLetters, CorrectLetter, Riddle)
bot.send_message(message.from_user.id, 'Вы исчерпали все попытки! Загаданное слово - "' + Riddle + '"!')
break
elif message.text == "/help":
bot.send_message(message.from_user.id, help)
else:
bot.send_message(message.from_user.id, "Я тебя не понимаю. Напиши /help.")
bot.polling(none_stop=True, interval=0, timeout=120)
The code runs without errors, but when the bot receives the message ‘/hanging’ it gives an error. I've tried many ways, but none of them work.
Shortening the code to the error only. We can see that the error comes from calling a function that needs 4 arguments, but has none.
def main():
# error is here > missing arguments !!
txt = 'Игра "Виселица" \n' + BotMessage()
# this will work...
txt = 'Игра "Виселица" \n' + BotMessage('a', 'b', 'c', 'd')
print(txt)
def BotMessage(person, UNCletter, spaces, input_letter):
bot_message = person
bot_message += "\n" + UNCletter
bot_message += "\n" + spaces
bot_message += "\n" + input_letter
return bot_message
if __name__=='__main__':
main()
In the clean code above, it is clear that the first call to BotMessage()
will fail, whereas the second call to BotMessage('a', 'b', 'c', 'd')
will work.