2013-10-29 14 views
1

我的問題要求我顯示一個菜單,其中包含關於如何對加載文件執行操作的選項。我應該能夠計算所選txt文件的最小值,最大值和總和。所以我要求用戶輸入一個文件名來加載前Alpha.txt。收縮集合是必須有相等數量的行和列的數字4x4,5x5,12x12,等等。到目前爲止,我的代碼只是4x4行和數字列的因素。順便說一句,這不是作業,而是爲即將到來的測驗練習題。我不想要一個解決方案,而只是一些幫助解釋我應該如何處理這種情況。我想輸入我自己的代碼並學習,所以請不要以爲我要求回答。謝謝! :)解決創建程序的步驟的麻煩

目標表應該是這個樣子

----------------------------------------------- 
|  | A | B | C | D | E | 
----------------------------------------------- 
| 1 | 8.00 | 1.00 | 3.00 | 0.00 | 5.00 | 
| 2 | 5.00 | 6.00 | 8.00 | 9.00 | 4.00 | 
| 3 | 3.10 | 3.20 | 3.30 | 9.10 | 3.30 | 
----------------------------------------------- 

,我應該能夠根據輸入的任何AZ或

列的1-任何數字來計算基於列或行所需的選項
def main(): 

    my_list = [[float(i) for i in line.split(',')] for line in open("Alpha.txt")] 
    print(my_list) 
    my_list_one = my_list[0] 
    my_list_two = my_list[1] 
    my_list_three = my_list[2] 
    my_list_four = my_list[3] 

    columnA = [my_list[0][0],my_list[1][0],my_list[2][0],my_list[3][0]] 
    columnB = [my_list[0][1],my_list[1][1],my_list[2][1],my_list[3][1]] 
    columnC = [my_list[0][2],my_list[1][2],my_list[2][2],my_list[3][2]] 
    columnD = [my_list[0][3],my_list[1][3],my_list[2][3],my_list[3][3]] 

    usrnput = input("Enter a row or column: ") 
    if usrnput == 'A' or usrnput == 'a': 
     print(min(columnA)) 
    elif usrnput == 'B' or usrnput == 'b': 
     print(min(columnB)) 
    elif usrnput == 'C' or usrnput == 'c': 
     print(min(columnC)) 
    elif usrnput == 'D' or usrnput == 'd': 
     print(min(columnD)) 
    elif usrnput == "1": 
     print(min(my_list_one)) 
    elif usrnput == "2": 
     print(min(my_list_two)) 
    elif usrnput == "3": 
     print(min(my_list_three)) 
    elif usrnput == "4": 
     print(min(my_list_four)) 

main() 

和alpha.txt包含

5,4,2,3.2 
1,.2,4.4,8 
3,8,6.5,2 
3,2,1,5.3 

現在我的問題在於,我明顯不考慮除了4x4這種可能性之外的可能性。所以爲了解決這個問題,我需要完全重做我的代碼。

我真正要求的是什麼是我需要做的人類語言解釋?我想把它轉換成pythonic代碼,所以我理解這個概念比只知道解決方案更好,並說啊是的,我沒有真正做到這一點,因爲這不會幫助我的測驗。

即時通訊相當確信我可以加載該文件,如果我只是調整「Alpha.txt」一部分給一個變量,並有FO =打開(「userinput」)

但如何將我把一個嵌套列表我產生從文件中確定一個列或行的最小或最大或總和?我以爲我應該使用len()和count,但它不會在我的腦海或紙上聚集在一起。我需要使用for循環代替每個列作爲新列表和每行作爲列表,像我的代碼一樣硬編碼。

回答

0
  • 的名字,像my_list_one是無用的 - 更好地利用my_list[0]
  • columnA相同的 - 更好column['A']column[0]
  • len(my_list)給你的文件有多少行加載
  • len(my_list[0])給你多少列從文件加載
  • 如果用戶輸入的數字(「1」,「2」)可以將其從字符串轉換爲整數並用作索引my_list[index](或my_list[index-1]
  • usrnput.lower()給出較低信你不必將其與大信
  • 比較,也可以使用if usrnput in ('a', 'A'):
  • 使用結構像for index in range(len(my_list)):for row in my_list:column['A'].append(some_value_from_my_list)來創建列

@EDIT:

完整程序(Python 3)

#!/usr/bin/python3 

def main(): 

    # read file 

    all_rows = [[float(i) for i in line.split(',')] for line in open("Alpha.txt")] 

    # table size 

    rows_number = len(all_rows) 
    cols_number = len(all_rows[0]) 

    print("size (rows x cols): {0}x{1}".format(rows_number,cols_number)) 
    print() 

    # create columns (indexed by numbers) 

    all_columns = [] 

    for col_index in range(cols_number): 

     all_columns.append([]) 

     for row_index in range(rows_number): 
      all_columns[col_index].append(all_rows[row_index][col_index]) 

    # print rows 

    print("rows") 

    for i,row in enumerate(all_rows): 
     print(i+1, ":", " , ".join(str(num) for num in row)) 

    print() 

    # print cols 

    print("cols") 

    for i, col in enumerate(all_columns): 
     print(chr(ord('A')+i), ":", " , ".join(str(num) for num in col)) 

    print() 

    # main loop 

    end = False 

    while not end: 
     usrnput = input("Enter a row or column (or 'Q' for quit): ").upper() 

     if usrnput in ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L'): 
      index = ord(usrnput)-ord('A') 
      if index < cols_number: 
       print("min", all_columns[index], "=", min(all_columns[index])) 
     elif usrnput in ('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'): 
      index = int(usrnput)-1 
      if index < rows_number: 
       print("min", all_rows[index], "=", min(all_rows[index])) 
     elif usrnput in ('Q'): 
      end = True 

main() 
+0

將它變成一個數字。我可以用! :)。用於計算列的最大/最小值如果表格是基於選擇的用戶txt文件的變量,我將如何確定什麼是A-Z? – user2840144

+0

我添加完整的程序。 – furas

0

我想你應該使用循環和字典來訪問列(按字母)或行(按數字)。

我想:

  1. 把你的原始輸入,並確定它是否是一個數字/字母
  2. 如果號碼,只需抓住你的清單
  3. 如果信的列表中該索引,把它變成一個int通過字典,並從子列表中獲取這些索引,並將其轉換爲列表。

然後你可以做任何你想要的計算後,你有你的返回列表。

+0

謝謝!我會再次使用這個建議報告我的代碼:) – user2840144

+0

你也可以通過執行'ord(my_letter.upper()) - ord('A')' –