我试图阅读多行文本和打印它似乎是非常容易的工作,但有趣的是,我看到奇怪的行为
while True:
client_input = ''
print("Please enter your queries:") # User input we'll be adding to
for line in sys.stdin: # Iterator loops over readline() for file-like object
if line == '\n' or line=='': # Got a line that was just a newline
break # Break out of the input loop
client_input += line # Keep adding input to variable
print('cccccccccccccccc')
print(client_input)
现在输入这个多行文本
{
"xxxx": [
{
"zzzz": {
"zz": "a",
"eee": "d"
}
},
{
"qqq": {
"q": "a",
"a": "d"
}
}
]}
所以我希望当我输入一个新的行后,粘贴此文本看到cccccccccccccccc
打印,但我需要点击回车两次,以查看预期的行为。任何人都可以帮助什么是额外的需要新的线路是和如何修复它?
2条答案
按热度按时间m1m5dgzv1#
你需要点击两次才能跳出循环,因为当你粘贴它时,你仍然在最后一个复制的行中:
它既不是空的,也不是
'\n'
。所以第一个回车是向下进入一个新的行,第二个回车是一个新的行的输入,它打破了循环。
6bc51xsx2#
您输入的最后一行被程序视为:
]}\n
它既不是空的,也不是
\n
。这就是为什么你需要按两次回车键。如果你想让你的输入在一次输入后就被接受,你必须检测行是否以
\n
结尾。然而,这将包括输入的所有行,从而违背了目的。解决方法是跟踪
client_input
中的开括号和闭括号。对于任何左括号类型,增加一个计数器,对于任何右括号类型,减少相同的计数器。现在,如果在计数器为0时遇到\n
,则所有输入都是有效的(左括号数==右括号数)。下面是一个示例代码。
注:这假设括号的功能相同。“{”也可以用“]”结束,因为我们只记录开始和结束括号的计数。如果你想正确地验证数据,可以使用堆栈。如果你想确保括号的有效性,请在LeetCode上检查这个问题。