2013-04-23 91 views
0

我必須編寫一個程序,它依次獲取由哨兵DONE終止的多個字符串,然後將這個字符串列表右對齊地打印到最大字符串的長度。這裏是我的代碼:if語句不在while循環中執行

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語句永遠不會執行,所以它只是卡在該循環中。

+2

嘗試'while'循環之前打印user'的'的價值,因爲它可能有一個'\ N'在它的結束。使用'user = user.strip()'來解決這個問題。它在我的系統上正常工作。 – 2013-04-23 15:45:53

+1

我已經添加了python3x標籤,因爲你使用'input()'從用戶獲取字符串。 – 2013-04-23 15:49:03

+0

@AshwiniChaudhary那是怎麼回事?在'2.X'中存在['input()'](http://docs.python.org/2/library/functions.html#input)...哦,它是print()。沒關係。 – thegrinner 2013-04-23 15:50:38

回答

0

NB:假設代碼是針對Python 2.x的,可能不是這種情況。

首先輸入(),您期望數字值,而不是字符串。 只需將您的輸入()更改爲raw_input()就可以實現。 如在評論指出,也許是OP使用Python 3.

This問題上SO解釋在Python 2.x和3.x WRT輸入()的raw_input和()的差異。

+0

也許他正在使用py3x。 – 2013-04-23 15:49:29

+0

沒錯。編輯我對此的答案 – 2013-04-23 15:50:29

+1

「首先使用input(),您期待的是數值而不是字符串。」 - > WAT – kindall 2013-04-23 15:52:19

0

當您使用cmd運行代碼時,input返回的字符串也包含返回字符(\r)。

所以當用戶輸入"done"時,input()實際上返回"done\r"

一個簡單的辦法就是在這裏使用str.strip

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