1

我的问题要求我显示一个菜单,其中包含有关如何处理加载的文件的选项。我应该能够计算所选 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  |
-----------------------------------------------

我应该能够根据输入的 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 = open(“userinput”) 加载文件

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

4

2 回答 2

0

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

我会:

  1. 获取您的原始输入并确定它是否是数字/字母
  2. 如果是数字,只需获取列表列表的索引
  3. 如果是字母,则通过 dict 将其转换为 int,并从子列表中获取这些索引,并将其转换为列表。

然后,您可以在返回列表后对其进行任何计算。

于 2013-10-29T19:46:49.607 回答
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)):orfor row in my_list:和的结构column['A'].append(some_value_from_my_list)来创建列

@编辑:

完整程序(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()
于 2013-10-29T20:04:40.300 回答