为什么这不是在Python终端中没有打印的情况下运行,而是在调试中运行?

问题描述 投票:0回答:1

我正在使用 VS Code 和 GitHub 使用 Python 制作一个文本冒险游戏。菜单脚本如下(目前)。

def menuController(menuName:str, options:list):

    print(options)
    time.sleep(0.01)

    menuPosition = 0
    for i in range(len(options)):
        if menuPosition == i:
            options[i] = "*"+options[i]+"*   "
        else:
            options[i] = " "+options[i]+"    "
        print(options[i], end="")
    

menuController("ra", ["one", "two", "three", "four"])

当我运行它时,它输出:

['one', 'two', 'three', 'four']

最后少了一行。

但是,当我在调用 menuController 之后添加 print("") 时,它会输出以下内容:

['one', 'two', 'three', 'four']
*one*    two     three     four

最后一行是我希望在最终版本中可见的一行

为什么后面有空打印时只输出第二行? 这可以通过函数定义中的某种输出刷新来修复吗?

python
1个回答
0
投票

我刚刚摆弄了几个小时,现在可以了?我认为告诉我使用 print("") 的评论可能就是这样做的。谢谢你!也感谢您将选项作为核心价值的建议!这可能节省了我很多时间。

如果有人想要我现在使用的代码:

import sys
from msvcrt import getch

light_green = "\033[0;92m"
reset = "\033[0m"

def menuNavigation():
    key = ord(getch())
    if key == 13: #Enter
        return "Select"
    elif key == 224: #Special keys (arrows, f keys, ins, del, etc.)
        key = ord(getch())
    if key == 75: #Left arrow
        return "Left"
    if key == 77: #Right arrow
        return "Right"


def menuController(menuName:str, options:list):

    menuPosition = round(len(options)/2)-1
    navigate = ""
    optionsHOLD = options.copy()

    for i in range(len(options)):
        if menuPosition == i:
            options[i] = light_green+"*"+options[i]+"*   "+reset
        else:
            options[i] = " "+options[i]+"    "
        print(options[i], end="")
    print()

    while navigate != "Select":
        options = optionsHOLD.copy()
        navigate = menuNavigation()
        delete()

        if navigate == "Left":
            menuPosition -= 1
            navigate = ""
            if menuPosition == -1 :
                menuPosition = 0

        if navigate == "Right":
            menuPosition += 1
            navigate = ""
            if menuPosition == len(options):
                menuPosition -= 1

        if navigate == "Select":
            return menuPosition
        
        for i in range(len(options)):

            if menuPosition == i:
                options[i] = light_green+"*"+options[i]+"*   "+reset
            else:
                options[i] = " "+options[i]+"    "
            print(options[i], end="")
        print("")


def delete():
    sys.stdout.write("\033[F")
    sys.stdout.write("\033[K")

如果你想改变颜色:

colourBeingDisplayed = 0
colourDisplay = ["\033[0;31m","\033[0;32m","\033[0;33m","\033[0;34m","\033[0;35m","\033[0;36m","\033[0;37m","\033[0;30m","\033[0;91m","\033[0;92m","\033[0;93m","\033[0;94m","\033[0;95m","\033[0;96m","\033[0;90m","\033[0;97m","\033[0;46m","\033[0;45m","\033[0;47m","\033[0;44m","\033[0;43m","\033[0;42m","\033[0;41m","\033[0;40m","\033[2m",'\033[08m','\033[07m',"\x1b[90m","\033[3m","\033[1m","\033[9m","\033[4m"]
for item in colourDisplay:
    colourBeingDisplayed += 1
    print(item+"Colour "+str(colourBeingDisplayed)+reset)

然后运行它:

chosen = menuController("Menu Name", ["Option 1", "two", "three", "four"])
print(chosen)

谢谢,再见。

© www.soinside.com 2019 - 2024. All rights reserved.