如何在python中允许多行用户输入?

2024-04-26 00:11:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图为一个使用python制作的MS-DOS风格的程序创建一个非常简单的文本编辑器。当我试图创建段落时,问题就来了。我的方法是,按Enter命令它保存输入。我知道我做错了什么,但我如何修复它,如何破坏输入?到目前为止,我有这个:

def textwriter():
    print("")
    print("Start typing to begin.")
    textwriterCommand = input(" ")
    saveAs = input("Save file as: ")
    with open(saveAs, 'w') as f:
        f.write(textwriterCommand)

Tags: 方法命令程序input风格defasms
2条回答

@zamuz的answer很好,对于这样简单的事情也很好,但是当你的代码变得更复杂时,我更喜欢使用像input_constrain这样的代码,它实际上测试每个按键来决定下一步要做什么。(完全披露:我写了这个。)

例如,要在用户按下|(垂直条)之前读取输入:

from input_constrain import until

def textwriter():
    print("")
    print("Start typing to begin.")
    textwriterCommand = until("|")
    saveAs = input("Save file as: ")
    with open(saveAs, 'w') as f:
        f.write(textwriterCommand)

或者,读取输入直到CTRL-CCTRL-D(或任何其他不可打印的控制字符):

^{pr2}$

这使用了一个可选的count参数,在按了这么多个键之后,它将停止读取。raw=True很重要,因为否则,CTRL-CCTRL-D将抛出异常。通过使用raw,我们可以中断并继续手头的任务。


重要:您需要提交06e4bf3e72e23c9700734769e42d2b7fe029a2c1,因为它包含修复,但没有破坏性的更改

分配其他EOF序列,例如:

EOF_SEQ = 'EOF'

def textwriter():
    print("")
    print("Start typing to begin.")
    buffer = ''
    while EOF_SEQ not in buffer:
        buffer += raw_input(" ") + '\n'
    saveAs = raw_input("Save file as: ")
    with open(saveAs, 'w') as f:
        f.write(buffer)

相关问题 更多 >