#python #input #terminal #curses #instr
#python #ввод #терминал #проклятия #instr
Вопрос:
Я пишу терминальную игру с каракулями, для которой мне нужно знать, столкнулся ли игрок с препятствием. Для этого я использую функцию instr(), чтобы сообщить мне, было ли задето препятствие. Но он не регистрируется, а также во время отладки не активирует if-предложение. Вот код python для моей функции во время воспроизведения (странная строка — это проигрыватель):
def play(difficulty, resize_w, resize_h):
playing = True
current_x, current_y = 10, resize_h//2
env = create_env(resize_h, resize_w)
counter = 0
while playing:
counter = 1
stdscr.clear()
print_env(env,counter)
stdscr.refresh()
stdscr.addstr(current_y,current_x,"o/00o")
if stdscr.instr(current_y 1, current_x,1) == "=":
stdscr.addstr(5,5,"Yes")
else:
stdscr.addstr(5,5,"NO")
stdscr.timeout(60)
inp = stdscr.getch()
if inp == curses.KEY_LEFT and current_x > 0:
current_x -= 2
move_left(current_x, current_y)
elif inp == curses.KEY_RIGHT and current_x < (resize_w-6):
current_x = 2
move_right(current_x, current_y)
Ответ №1:
stdscr.instr
вернет объект bytes — объекты bytes никогда не равны строкам ( str
типу) в python 3
попробуйте:
if stdscr.instr(current_y 1, current_x,1) == b"=":
Комментарии:
1. спасибо, теперь это работает 🙂 Странно, что я ничего не смог найти об этом в Интернете… Вероятно, не смотрел достаточно долго
2. если вы запустите
python -b
orpython -bb
, он покажет предупреждения, когда вы неправильно сравниваете байты и строки