Аргумент int () должен быть строкой, байтовым объектом или числом, а не списком Python python-tcod Roguelike

Я делаю рогаликовую игру, используя движок roguelike python-tocd. Моя игра основана на учебнике Python libtcod roguelike.

Я составляю список констант, которые использую для создания карт

game_map.make_map(constants['max_rooms'], constants['room_min_size'], constants['room_max_size'],
                  constants['map_width'], constants['map_height'],entities,player,
                  constants['maze_min_size'], constants['max_maze_rooms'], ['maze_max_size'])

Теперь я использую код в функции, чтобы определить размер комнаты.

for r in range(max_rooms):
    # random width and height
    w = randint(room_max_size, room_min_size)
    h = randint(room_max_size, room_min_size)

    # random position without going out of the boundaries of the map
    x = randint(0, map_width - w - 1)
    y = randint(0, map_height - h - 1)

Я определил здесь переменные

map_width = 80
map_height = 45

room_max_size = 10
room_min_size = 6
max_rooms = 30

Теперь при запуске игры появляется такое?

  File "C:/Users/Al Abraham/Documents/CaveRL/CaveRL/engine.py", line 466, in <module>
    main()
  File "C:/Users/Al Abraham/Documents/CaveRL/CaveRL/engine.py", line 445, in main
    player, entities, game_map, message_log, game_state, ggender = get_game_variables(constants)
  File "C:\Users\Al Abraham\Documents\CaveRL\CaveRL\initialize_new_game.py", line 115, in get_game_variables
    constants['maze_min_size'], constants['max_maze_rooms'], ['maze_max_size'])
  File "C:\Users\Al Abraham\Documents\CaveRL\CaveRL\map_objects\game_map.py", line 110, in make_map
    w = randint(room_max_size, room_min_size)
  File "C:\Python37\lib\random.py", line 222, in randint
    return self.randrange(a, b+1)
  File "C:\Python37\lib\random.py", line 184, in randrange
    istart = _int(start)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

Что я должен делать?


person user10336165    schedule 09.09.2018    source источник
comment
Вы должны отладить его, распечатав переменные перед вызовом функции, вызвавшей сбой, и посмотреть, что они на самом деле содержат. Одним из них должен быть список.   -  person John Zwinck    schedule 09.09.2018
comment
Или используйте pdb; pdb.set_trace() для входа в отладчик (аналогично gdb).   -  person Matt Messersmith    schedule 09.09.2018
comment
Пожалуйста, покажите вам, что вы создали constants dict. Из ошибки следует, что constants['room_max_size] `является списком, а не простым int или строкой.   -  person Kurtis Rader    schedule 10.09.2018


Ответы (1)


Когда вы используете функцию int (), у вас должна быть строка или какое-то число. Эта ошибка говорит о том, что по крайней мере один из ваших параметров является списком, а не числом.

Вам следует проверить строку, в которой вы объявляете переменную "w", похоже, что источник проблемы либо в room_max_size, либо в room_min_size.

person Prometheus    schedule 09.09.2018