2013-02-10 81 views
0

我正在開發一個程序,用於對用戶輸入的一系列數字進行冒泡排序。我似乎有一個小的語法錯誤。這是我有:Python - 與bubblesort模塊的小字符串連接/語法錯誤

my_list = '[' + input('Please enter 5 numbers, separated by commas. ') + ']' 
length = len(my_list) 
for i in range(length): 
    for j in range(length-1): 
     if my_list[j] > my_list[j+1]: 
      my_list[j], my_list[j+1] = my_list[j+1], my_list[j] 
     print(my_list) 

這將返回我:

File "C:/Users/Luke/Dropbox/Programming/SDD real.py", line 19, in <module> 
my_list[j], my_list[j+1] = my_list[j+1], my_list[j] 

類型錯誤:「海峽」對象不支持項目分配

如果我設置my_list預定義的號碼列表,如:[1,5,2,3,4],bubblesort按預期運行。我只需要弄清楚如何將用戶輸入的數字正確存儲在數組中。

謝謝。

回答

1

替換:

my_list = '[' + input('Please enter 5 numbers, separated by commas. ') + ']' 

有了:

my_list = list(map(int, input('Please enter 5 numbers, separated by commas. ').strip().split(','))) 

或者:

my_list = [int(i) for i in input('Please enter 5 numbers, separated by commas. ').strip().split(',')] 

在你的代碼,my_list是不是列表,它是一個字符串。使用str.strip方法刪除空格,並使用str.split方法拆分字符串並返回結果列表。

+0

您還需要在拆分後將數字字符串轉換爲整數。 – 2013-02-10 03:02:28

+0

@Liquid_Fire感謝提醒,編輯我的答案。 – Volatility 2013-02-10 03:03:52

+0

@icktoofay OP顯然使用Python 3,否則在輸入(將被評估爲)一個整數元組後,它們會在第1行發生錯誤。 – 2013-02-10 03:05:03

1

這不是你應該如何創建一個列表。相反,請執行以下操作:

>>> my_list = list(input('Please enter 5 numbers, separated by commas. ')) 
Please enter 5 numbers, separated by commas. 1, 2, 3, 4, 5 
>>> print my_list 
[1, 2, 3, 4, 5] 
+0

雖然這隻適用於Python 2,並且我假設OP由於使用了'print'功能而使用了Python 3。 – Volatility 2013-02-10 03:02:03

+0

我的錯誤,不確定這是否是python 3 – TerryA 2013-02-10 03:03:25

+0

這是可行的,謝謝!雖然我仍然有問題。這返回給我一種包含逗號的排序,例如:請輸入一系列數字,最好在10左右。(即:5172610924)。 1,2'''','','1','2'] [',','1','2'] ['''''''''' ,'1','2'] [',','1','2'] [',','1','2'] – 2013-02-10 03:22:48