有点新的python(和一般的编程)所以请原谅我,如果这个问题有点基础,但我以前的研究尝试没有产生任何结果。我想知道如何让python验证输入行并使用输入完成任务,因为它被输入。 例如
alphabet = "abcdefghijklmnopqrstuvwxyz"
useralphabet = input("Please enter however much of the alphabet you know:")
while(useralphabet in alphabet):
break
print("You know", 26 - len(useralphabet), "letters of the alphabet!")
显然我知道这段代码不会按预期工作,但我希望它能证明我想要做的事情,即。让用户输入文本,直到他们输入的文本不再是指定字符串的一部分。
任何帮助将不胜感激
(如前所述,我对此比较陌生,所以非常感谢这些例子)
答案 0 :(得分:0)
答案取决于您的操作系统(操作系统)。通常,只有在您点击pandas.Series
键后,操作系统才会将输入字符串移交给python。如果您需要在键入时执行此操作,则可能需要调用某些依赖于系统的调用来关闭输入缓冲。
有关此内容的更多信息,请参阅Python read a single character from the user
答案 1 :(得分:0)
这是一个工作示例(在 Linux 上使用 Python 3.8.6 测试)。如果您需要针对其他系统进行修改,请参阅 this 答案。
hinput
函数在输入字符时读取字符,并为每个传递新字符和整行的新字符调用 on_char
。
在我的示例中,当用户键入 x
时,on_char
函数返回 True
,这导致 hinput
函数停止等待新输入。
如果用户输入 hello
,它会自动补全到 hello, world
并终止 hinput
import sys
import termios
import tty
from typing import Callable
def main():
hinput("prompt: ", on_char)
return 0
def on_char(ch: str, line: str) -> bool:
if ch == 'x':
sys.stdout.write('\n')
sys.stdout.flush()
return True
if line+ch == 'hello':
sys.stdout.write("%s, world\n" % ch)
sys.stdout.flush()
return True
return False
def hinput(prompt: str=None, hook: Callable[[str,str], bool]=None) -> str:
"""input with a hook for char-by-char processing."""
fd = sys.stdin.fileno()
old = termios.tcgetattr(fd)
inpt = ""
while True:
sys.stdout.write('\r')
if prompt is not None:
sys.stdout.write(prompt)
sys.stdout.write(inpt)
sys.stdout.flush()
ch = None
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old)
if hook is not None and hook(ch, inpt):
break
if ord(ch) == 0x7f: #BACKSPACE
if len(inpt) > 0:
sys.stdout.write('\b \b')
inpt = inpt[:-1]
continue
if ord(ch) == 0x0d: #ENTER
sys.stdout.write('\n')
sys.stdout.flush()
break
if ch.isprintable():
inpt += ch
return inpt
if __name__ == '__main__':
sys.exit(main())