0

我必须编写一个程序,该程序一个接一个地获取多个字符串,该字符串由标记 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 语句永远不会执行,所以它只会卡在那个循环中。

4

2 回答 2

0

注意:假设代码是针对 Python 2.x 的,但情况可能并非如此。

首先使用 input(),您期望的是一个数值而不是一个字符串。只需将您的 input() 更改为 raw_input() 就可以了。正如评论中所指出的,也许 OP 正在使用 Python 3。

这个关于 SO 的问题解释了 Python 2.x 和 3.x wrt input() 和 raw_input() 的区别。

于 2013-04-23T15:47:52.400 回答
0

当您使用 cmd 运行代码时,返回的字符串也input包含返回字符(\r)。

所以当用户进入时"done"input()实际上是返回"done\r"

一个简单的解决方案是在str.strip这里使用:

user = input("").strip("\r")

于 2013-04-23T16:27:19.223 回答