为了账号安全,请及时绑定邮箱和手机立即绑定

如何使打印的语句不被 Python 解释器中的用户输入推回?打开新窗口?

如何使打印的语句不被 Python 解释器中的用户输入推回?打开新窗口?

偶然的你 2021-08-05 16:43:24
如果标题有点含糊,我很抱歉;我不知道如何用语言表达我的担忧。我是 Python 初学者,正在制作 Boggle/Word Search 游戏。我希望董事会留在同一个地方/不被用户输入推回。那可能吗?我尝试通过记事本.txt在Python 中打开一个文件,但是一旦打开 txt 文件,代码就会停止;对此的任何帮助都可以。我想知道是否也可以让python打开一个新窗口/控制台来显示板,而另一个控制台继续执行原始代码。最后,是否有一种“刷新”用户在此处输入的方式?一旦用户提交他们的答案,我希望该行为空。我曾尝试使用 tkinter 制作 GUI,但由于我制作的页面数量太多,而且我真的不知道如何使用它,这对我来说太难了。
查看完整描述

1 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

您有三种可能的解决方案:

  1. 在用户输入后重新打印您希望显示的整个屏幕

  2. 创建一个 GUI,您可以在其中更好地控制显示的内容

  3. 如果在 Unix 上你可以尝试使用 curses

既然您已经尝试过 tkinter,那么 GUI 路由目前对您来说似乎是一条不可行的路线。所以你可能也有类似的诅咒问题。因此,我建议您坚持只根据需要重新打印屏幕。您最终会得到之前棋盘和猜测的历史记录,但这是一种控制屏幕外观的简单方法。

例如。

def mainloop(board, words, time_limit):

    correct_guesses = []

    print_board(board)

    while not solved(words, correct_guesses) and now() < time_limit:

         word = get_user_guess()

         if word in words and word not in correct_guesses:

             correct_guesses.append(word)

             print('correct!\n')

         else:

             print('wrong!\n')


    if solved(words, correct_guesses):

        print('complete!')

    else:

        print('times up!')

你最终会得到类似的东西:


E B C D

C F G H

I J K L

M N O P

your guess: mouse

wrong!


E B C D

C F G H

I J K L

M N O P

your guess: mice

correct!


complete!

如果你想尝试curses这里是一个让你开始的基本脚本:


import curses



def main(stdscr):

    board = [

        ['E', 'B', 'C', 'D'],

        ['C', 'F', 'G', 'H'],

        ['I', 'J', 'K', 'L'],

        ['M', 'N', 'O', 'P'],

    ]


    curses.echo()  # we want to see user input on screen


    user_guess_prompt = 'your guess: '

    guess_line = len(board) + 1 + 2

    guess_column = len(user_guess_prompt)

    max_guess_size = 15


    guess = None

    while guess != 'q':

        # clear the entire screen

        stdscr.clear()


        # a bit of help on how to quit (unlike print, we have to add our own new lines)

        stdscr.addstr('enter q as a guess to exit\n\n')


        # print the board

        for line in board:

            stdscr.addstr(' '.join(line)+'\n')


        # tell the use about their previous guess

        if guess == 'mice':

            stdscr.addstr(guess + ' is correct!\n')

        elif guess is None:

            stdscr.addstr('\n')

        else:

            stdscr.addstr(guess + ' is wrong!\n')


        # prompt for the user's guess

        stdscr.addstr(user_guess_prompt)


        # tell curses to redraw the screen

        stdscr.refresh()


        # get user input with the cursor initially placed at the given line and column 

        guess = stdscr.getstr(guess_line, guess_column, max_guess_size).decode('ascii')



if __name__ == '__main__':

    curses.wrapper(main)


查看完整回答
反对 回复 2021-08-05
  • 1 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信