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
  • のような名前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)して列を作成します

@編集:

完全なプログラム (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 に答える
0

ループと dict を使用して、列 (文字で) または行 (番号で) にアクセスする必要があると思います。

私は...するだろう:

  1. 生の入力を取り、それが数字/文字かどうかを判断します
  2. 番号の場合、リストのリストのそのインデックスを取得するだけです
  3. 文字の場合は、dict を介して int に変換し、サブリストからそれらのインデックスを取得して、それらをリストに変換します。

次に、返されたリストを取得した後、必要な計算を行うことができます。

于 2013-10-29T19:46:49.607 に答える