Python3 Print оператор с использованием.format() печатает в обратном порядке
Я пытаюсь создать простую терминальную игру в Python 3. Я использую модуль cmd для создания меню, и в нем я использую тестовый скрипт. Вот код
from assets import *
from cmd import Cmd
from test import TestFunction
import base64
class Grimdawn(Cmd):
#irrelevant code removed
def do_test(self, args):
"""Run a test script. Requires dev password."""
password = str(base64.b64decode("""REDACTED"""))
if len(args) == 0:
print("Please enter the password for accessing the test script.")
elif args == password:
test_args = input('Enter test command.\n')
try:
TestFunction(test_args.upper())
except IndexError:
print('Enter a command.')
else:
print("Incorrect password.")
Функция проверки работает следующим образом.
редактировать: базовый символ отличается, потому что я сейчас тестирую новый формат печати, другой оператор if еще не редактировал
from assets import *
def TestFunction(args):
player1 = BaseCharacter()
player2 = BerserkerCharacter('Jon', 'Snow')
player3 = WarriorCharacter('John', 'Smith')
player4 = ArcherCharacter('Alexandra', 'Bobampkins')
#//removed irrelevant code
if args == "BASE_OFFENSE":
return('Base Character: Offensive\n-------------------------\n{}'.format(player1.show_player_stats("offensive")))
#. . .
elif args == "ARCHER_OFFENSE":
print('Archer Character: Offensive\n-------------------------\n{}'.format(player4.show_player_stats("offensive")))
return
#. . .
Это должно напечатать Archer Character: Offensive
, сопровождаемый линией, сопровождаемой отформатированным кодом. Но когда я его печатаю, это вывод терминала.
Joshua Brenneman - Grimdawn v0.0.2 |
> test *PASSWORD REDACTED*
Enter test command.
ARCHER_OFFENSE
Strength: 14.25
Agility: 10
Critical Chance: 50.0
Spell Power: 15
Intellect: 5
Speed: 6.25
Archer Character: Offensive
-------------------------
None
>
Моя конечная цель - показать печать под пунктирной линией. Если вам интересно, это заявление для печати в assets.player
файл.
def show_player_stats(self, category):
#if the input for category is put into all upper case and it says "OFFENSIVE", do this
if category.upper() == "OFFENSIVE":
#print the stats. {} means a filler, and the .format makes it print the value based off the variables, in order; strength: {} will print strength: 15 if strength = 15
print("Strength: {}\nAgility: {}\nCritical Chance: {}\nSpell Power: {}\nIntellect: {}\nSpeed: {}".format(self.strength, self.agility, self.criticalChance, self.spellPower, self.intellect, self.speed))
#or, if the input for category is put into all upper case and it says "DEFENSIVE", do this
elif category.upper() == "DEFENSIVE":
#same as before
print("Health: {}/{}\nStamina: {}\nArmor: {}\nResilience: {}".format(self.currentHealth, self.maxHealth, self.stamina, self.armor, self.resil))
elif category.upper() == "INFO":
print("Name: {} {}\nGold: {}\nClass: {}\nClass Description: {}".format(self.first_name, self.last_name, self.gold, self.class_, self.desc))
#if its anything else
else:
#raise an error, formating the Category {} with the category input given
raise KeyError("Category {} is not a valid category! Please choose Offensive or Defensive.".format(category))
Я что-то пропустил? Я не знаю, что я делаю не так.
1 ответ
Решение
Это то, что сказал L3viathan. Ваш show_player_stats печатает вместо возврата. Таким образом, ваш оператор формата печатает все правильно, он просто печатается после того, как show_player_stats напечатает его вывод.