我必须编写一个程序,一个接一个地获取由sentinel DONE终止的多个字符串,然后打印这个字符串列表,右对齐到最大字符串的长度。这是我的代码:
user = input("Enter strings (end with DONE):\n")
totalString = ""
while True:
if user.lower() == 'done':
break
else:
totalString = totalString + user + " "
user = input("")
lst = totalString.split(" ")
max = 0
for i in range(len(lst)):
if len(lst[i]) > max:
max = len(lst[i])
for i in range(len(lst)):
print("{:>{derp}}".format(lst[i],derp=max))
我遇到的问题是while循环中的if语句永远不会执行,所以它只会卡在该循环中。
答案 0 :(得分:0)
NB :假设该代码适用于Python 2.x,可能不是这种情况。
首先使用input(),您需要数字值,而不是字符串。 只需将input()更改为raw_input()就可以了。 正如评论中所指出的,也许OP正在使用Python 3。
关于SO的This问题解释了Python 2.x和3.x wrt input()和raw_input()的差异。
答案 1 :(得分:0)
当您使用cmd运行代码时,input
返回的字符串也包含返回字符(\r
)。
因此,当用户输入"done"
时,input()
实际上会返回"done\r"
。
一个简单的解决方案是在这里使用str.strip
:
user = input("").strip("\r")