python-curses не регистрирует instr()

#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 or python -bb , он покажет предупреждения, когда вы неправильно сравниваете байты и строки