gpt4 book ai didi

Python:吸收键盘输入的换行符

转载 作者:行者123 更新时间:2023-11-28 17:40:39 25 4
gpt4 key购买 nike

我有一个关于键盘多行输入的问题。看来我的程序没有吸收换行符。结果是,在处理完输入后,程序似乎认为等待中的回车符的数量等于输入中换行符的数量。

我查看了 sys 模块 (sys.stdin.flush())、msvsrc 模块(msvcrt.kbhit() 和 msvcrt.getch())、raw_input,并尝试了我在搜索中能想到的一切,但是我要干了。也许 strip() 会起作用,但我似乎无法弄清楚一般情况。

我得到的输出是这样的:

Enter a string: def countLetters():
s = input("Enter a string: ")
d = histogram(s.upper())
printSortedDict(d, True)
('T', 3)
('E', 3)
('F', 1)
('D', 1)
(' ', 1)
(':', 1)
('R', 1)
('(', 1)
('N', 1)
(')', 1)
('L', 1)
('U', 1)
('C', 1)
('O', 1)
('S', 1)

Continue (yes/no):
Continue (yes/no):
Continue (yes/no):
Continue (yes/no):

我希望输出只显示一个“继续(是/否):”。看起来 input() 例程正在吃掉最后一个换行符(如预期的那样),但没有吃掉任何中间换行符。这些换行符似乎被解释为“继续(是/否):”语句的输入。

我正在使用 Python 3.4.1。我正在 Win8 上开发,但希望该解决方案至少也能在 Linux 上运行(如果该解决方案是特定于平台的)。这是程序。查看问题的最简单方法就是复制源代码并将其作为程序的输入。

#
# letterCountDict - count letters of input. uses a dict()
#
"""letterCountDict - enter a string and the count of each character is returned """

# stolen from p. 122 of "Python for Software Design" by Allen B. Downey
def histogram(s):
"""builds a histogram from the characters of string s"""
d = dict()
for c in s:
if c in d:
d[c] += 1
else:
d[c] = 1
return d

def printSortedDict(d, r=False):
"""sort and print a doctionary. r == True indicates reserve sort."""
sl = sorted(d.items(), key=lambda x: x[1], reverse=r)
for i in range(len(sl)):
print(sl[i])

def countLetters():
s = input("Enter a string: ")
d = histogram(s.upper())
printSortedDict(d, True)

answerList = ["yes", "no"]
done = False
while not done:
countLetters()
ans = ""
while ans not in answerList:
ans = input("\nContinue (yes/no): ").replace(" ", "").lower()
if ans == "no":
done = True

最佳答案

input() 不接受多行。每次调用 input() 都只检索一行。

所以,你有第一个输入调用:

    s = input("Enter a string: ")

收到这一行:

def countLetters():

果然,您可以看到它有三个 T、三个 E 等等。

下一次调用 input() 是这样的:

    ans = input("\nContinue (yes/no): ").replace(" ", "").lower()

您输入的内容:

s = input("Enter a string: ")

由于您的回答既不是'yes' 也不是'no',因此您的循环会再次询问。这次你输入:

d = histogram(s.upper())

这既不是'yes' 也不是'no'

这种模式一直持续到您厌倦了对问题输入废话为止。最后,您输入“否”,游戏结束。

如果您想一次读取多行,请尝试 sys.stdin.read() 或者 sys.stdin.readlines()。例如:

import sys
def countLetters():
print("Enter several lines, followed by the EOF signal (^D or ^Z)")
s = sys.stdin.read()
d = histogram(s.upper())
printSortedDict(d, True)

关于Python:吸收键盘输入的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24830900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com