Проблема с инвентаризацией Python

#python #string-formatting

#python #форматирование строки

Вопрос:

Я создаю текстовую игру, похожую на сделку типа Minecraft RPG, просто для удовольствия. И у меня есть полностью рабочий инвентарь, за исключением одной вещи. Например, когда вы проверяете свой инвентарь, я хочу, чтобы он говорил: «Дерево x2» 2 — это количество, если у вас есть 2 или сколько у вас есть. Итак, я установил self.wood(элемент wood) в self .wood = «Wood x% s» % self.количество древесины (количество древесины, которое у вас есть). Вы можете увидеть код здесь:

 def cinventory(self):
    print(self.woodcount)
    self.wood = ("Wood x%s" % self.woodcount)
    print("---------------------------------")
    print("            Inventory            ")
    for x in self.inventory:
        print(x)
    print("---------------------------------")
  

Проблема в том, что он печатает Wood x0, даже если у вас их больше. Он всегда выводит ноль. Я даже заставил его распечатать количество древесины до того, как он распечатает ваш инвентарь, и он отлично отображает фактическое число, но когда оно находится в строке кода, которую я создал, оно не работает. В чем проблема?

Ответ №1:

%s является строкой формата для строк. Попробуйте использовать %d (цифру) для чисел.

В качестве альтернативы вы можете использовать:

 self.wood = "Wood x%s" % str(self.woodcount)
  

сначала преобразуйте целое число в строку. Обратите внимание, что я удалил лишние круглые скобки, поскольку они не нужны.

Комментарии:

1. @user3238885 что такое type of self.woodcount ?

2. На самом деле, оба %s и %d работают для меня в Python 2.7 и 3.4, поэтому должно быть что-то еще…