我有一个特定于键盘多行输入的问题。我的程序似乎没有吸收换行符。结果是,在处理输入之后,程序似乎认为有许多回车等于输入中的换行符数。
我查看了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
答案 0 :(得分:3)
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'
。
这种模式一直持续到你厌倦了为问题输入废话。最后,输入" 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)
答案 1 :(得分:-1)
当您从此行获得输入时
s = input("Enter a string: ")
将其替换为
s = input("Enter a string: ").replace('\n', '')