麻烦解释创建程序的步骤

时间:2013-10-29 19:21:32

标签: python

我的问题要求我显示一个菜单,其中包含有关如何处理已加载文件的选项。我应该能够计算所选txt文件的最小值,最大值和总和。所以我要求用户输入一个文件名以加载ex 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  |
-----------------------------------------------

并且我应该能够根据输入的a-z或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 = open(“userinput”)

但是如何从文件中生成嵌套列表并确定列或行的最小值或最大值或总和?我在想我应该使用len()和一个计数,但它并没有在我脑海里或纸上聚集在一起。我需要为此使用for循环,而不是将每列硬编码为新列表,并将每行作为列表,就像在我的代码中一样。

2 个答案:

答案 0 :(得分:0)

我认为你应该使用循环和字典来访问列(按字母)或行(按数字)。

我会:

  1. 获取您的原始输入并确定它是否为数字/字母
  2. 如果是数字,只需获取列表清单中的索引
  3. 即可
  4. 如果是letter,请通过dict将其转换为int,并从子列表中获取这些索引,并将其转换为列表。
  5. 然后,在您返回列表后,您可以对其进行任何计算。

答案 1 :(得分: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()