Ошибка типа: не все аргументы, преобразованные во время форматирования строки в цветной текст - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь сделать игру самостоятельно, и это моя первая игра.В нем я пытаюсь добавлять функции с течением времени, и однажды у меня появилась идея добавить цвет к определенным ключевым словам.Вот что у меня есть:

print("The Text Based Game v0.1.0.0")
import time
import sys

time.sleep(1.5)
name = input("What is your name? ")
print("%s, are you a Warlock, Titan, or Hunter? Type 'list' if you would like a discription of each class." % (name))

playerclass = input()

if playerclass == ("list"):
  print ("\nWarlocks are powerful guardians. They hit hard but can't take in much in return. \n\nTitans are tanks. In the front of the line taking in bullets for others.\n\nHunters are the middle man. They are fast but besides that they don't have much else to bring to the table.\n")
  time.sleep(2)
  print ("Will you chose to be a Warlock, Titan, or Hunter?")

  playerclass = input()

Теперь, когда код спрашивает вас, каким классом вы хотели бы быть, я хочу, чтобы слова «Чернокнижник», «Титан» и «Охотник» отображались разными цветами.Это то, что я пытался сделать:

print("The Text Based Game v0.2.0.0")
import time
import sys
from colorama import Fore, Back, Style

print (Style.RESET_ALL)

Warlock = (Fore.BLUE + "Warlock" + Style.RESET_ALL)
Titan = (Fore.RED + "Titan" + Style.RESET_ALL)
Hunter = (Fore.GREEN + "Hunter" + Style.RESET_ALL)

time.sleep(1.5)
name = input("What is your name? ")
print ("%s, are you a " +str(Warlock)+ ", " +str(Titan)+", or" +str(Hunter)+ "? Type 'list' if you would like a discription of each class." % (name))

playerclass = input()

if playerclass == ("list"):
  print ("\nWarlocks are powerful guardians. They hit hard but can't take in much in return. \n\nTitans are tanks. In the front of the line taking in bullets for others.\n\nHunters are the middle man. They are fast but besides that they don't have much else to bring to the table.\n")
  time.sleep(2)
  print ("Will you chose to be a Warlock, Titan, or Hunter?")

  playerclass = input()

Это выдает ошибку, которая говорит:

Traceback (most recent call last):
  File "python", line 14, in <module>
TypeError: not all arguments converted during string formatting

Я не хочу писать "Fore.BLUE +" Чернокнижник "+ Style.RESET_ALL "каждый раз внутри цитаты, вместо этого я хочу, чтобы система перезванивала" Fore.BLUE + "Чернокнижник" + Style.RESET_ALL ", когда я пишу Чернокнижник. Я думаю, что то, что я думаю, должно работать, но яя выполняю это неправильно ...

Обратите внимание, что я пишу все это в Repl.it онлайн на python 3.6.1. Вот ссылка на код в Repl.it: https://repl.it/@Woah_its_boobe/Error

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Эта проблема не из-за Колорамы.Проблема здесь в том, что оператор % имеет более высокий приоритет, чем +, поэтому Python пытается добавить здесь имя:

"? Type 'list' if you would like a discription of each class." % (name)

, прежде чем он объединит все эти строки, используя +.Простое решение состоит в том, чтобы заключить все строковые выражения в скобки:

Warlock = "Warlock"
Titan = "Titan"
Hunter = "Hunter"

name = "Bode"

print(("%s, are you a " +str(Warlock)+ ", " +str(Titan)+", or" +str(Hunter)+ "? Type 'list' if you would like a discription of each class.") % name)

output

Bode, are you a Warlock, Titan, orHunter? Type 'list' if you would like a discription of each class.

Однако было бы легче читать, есливы не добавляете строки вместе вручную и используете метод format вместо %.

Warlock = "Warlock"
Titan = "Titan"
Hunter = "Hunter"

name = "Bode"

print("{}, are you a {}, {}. or {}?".format(name, Warlock, Titan, Hunter), end=" ")
print("Type 'list' if you would like a description of each class.")

output

Bode, are you a Warlock, Titan. or Hunter? Type 'list' if you would like a description of each class.
0 голосов
/ 23 мая 2018

Ваша проблема в том, что форматирование строк не может перескакивать через + конкатенацию строк.Это решается с помощью:

Warlock = Fore.BLUE + "Warlock" + Style.RESET_ALL
Titan = Fore.RED + "Titan" + Style.RESET_ALL
Hunter = Fore.GREEN + "Hunter" + Style.RESET_ALL

time.sleep(1.5)
name = input("What is your name? ")
print ("%s, are you a " % (name) +Warlock+ ", " +Titan+", or" +Hunter+ "? Type 'list' if you would like a discription of each class.")

Вы должны прикрепить % (name) прямо рядом со строкой %s, are you a.Я также удалил кучу ненужных скобок и прочего.

...