2011-10-30 87 views
0

我試圖讀取一個文件,並確保每個值都是有序的。我不認爲我正確地將字符串轉換爲整數。這是我的一些代碼。我也試圖使用標誌。Python'int'對象不是可訂閱的

fileName = input("What file name? ") 
infile = open(fileName,'r') 
correct_order_flag = False 
i = 0 
line = infile.readline() 
while line !="": 
    for xStr in line.split(" "): 
     if eval(xStr) [i] < i: 
      correct_order_flag = True 
     else: 
      correct_order_flag = False 
    i = i+1 
if correct_order_flag: 
    print("Yes, the numbers were in order") 
else: 
    print("No, the numbers were not in order") 
count = i - 1 
print("There were", count, "numbers.") 
+2

打印xStr爲了解決這個問題 –

+0

Jakob的評論是不適當的。 Pythonistas傾向於避免使用eval(),因爲它在評估不可信數據時會帶來安全風險。 eval()有合法的用例,但這不是其中之一,因爲str()函數將按照您的要求進行操作。 –

回答

4

你是正確的 - 你與eval(xStr)[i]表明eval(xStr)是一個數組,因此可以下標。它是什麼樣子,你可能要(因爲你說你想要的字符串爲int轉換)只是int(xStr),以使該整線:

if int(xStr) < i: 
1

對於初學者來說,你不讀取整個文件所有。試試這個:

with open(fileName) as f: 
    for line in f: 
     # here goes your code 

不知道,雖然,你是什麼意思是「每個值是爲了」,但使用eval()爲任何目的非常糟糕的主意。

0

我想補充一點,因爲你是比較XSTR [I]到我,除非你的第一個數字小於零的標誌會發生變化,這意味着序列1 2 3 4 5將打印出來說「NO,的數字是不按順序」

0

作爲克里斯所示,INT(S)是將字符串轉換爲一個整數的首選方式。評估數據過於寬泛,在評估來自不可信來源的數據時可能存在安全風險。

另外,腳本還有另一個錯誤。 * correct_order_flag *在每次迭代中都被設置,所以一個順序不正確的條目可以被正確順序的後續條目掩蓋。因此,如果發現不正確的排序,您應該跳出循環。

相關問題