0

バブルソートに続いてプログラムをやり直しました。

def main():
try:
    array=[]
    file=open(input("Please enter the name of the file you wish to open:" ))
    A =file.read().split()


    file.close()



    n = len(A)
    print ("These following", n,"numbers are in the inputted file:\n", A)
    for i in range(n):
        for j in range(1,n-i):

            if A[j-1] < A[j]:

                (A[j-1], A[j]) = (A[j],A[j-1])
    print("We can now organize it in descending order:\n", A)

except IOError as e:
    print("({})".format(e))


Output_File = input("Where would you like to save this data?")
fileObject = open(Output_File, 'a')
fileObject.write(str(Output_File)+'\n')
print("Your file is now saved as", Output_File,". \n Have a nice day!")
fileObject.close()

名前の場合==' main ':main()

問題は、リスト内の3つの数値ごとにソートされることです。したがって、9つの番号がある場合、3つの異なる番号があります。たとえば、1 -3 10 6 5 0 3 -5 20は、['6'、 '5'、 '3'、 '20'、 '10'、 '1'、 '0'、'-5 '、'-3']。今何が間違っている可能性がありますか?そして、私は出力ファイルを正しく行いましたか?

4

2 に答える 2

3

この行がある場所:

x = minimum

私はあなたが意味したと思います:

minimum = x

割り当て順序が間違っているようです。xwontの反復中に変数に割り当てると、A副作用が発生します。

編集

コメントで見つけた問題は、readlines()関数を使用しているが、ファイルに1行しかないことです。本当にやりたいことは、その行を読んでsplit()から、リストを生成するために使用することです。

A = file.read().split()

'<'と比較するときに文字列を使用しているため、コードを実行した後は番号順を取得せず、辞書式順序を取得することに注意してください。

例:

入力:

5 4 14 6 -1 2 0 9 8 7 3 4 -10 200

出力:

['-1']
['-1', '-10']
['-1', '-10', '0']
['-1', '-10', '0', '14']
['-1', '-10', '0', '14', '2']
['-1', '-10', '0', '14', '2', '200']
['-1', '-10', '0', '14', '2', '200', '3']
['-1', '-10', '0', '14', '2', '200', '3', '4']
['-1', '-10', '0', '14', '2', '200', '3', '4', '4']
['-1', '-10', '0', '14', '2', '200', '3', '4', '4', '5']
['-1', '-10', '0', '14', '2', '200', '3', '4', '4', '5', '6']
['-1', '-10', '0', '14', '2', '200', '3', '4', '4', '5', '6', '7']
['-1', '-10', '0', '14', '2', '200', '3', '4', '4', '5', '6', '7', '8']
['-1', '-10', '0', '14', '2', '200', '3', '4', '4', '5', '6', '7', '8', '9']

上記の方法200は最後ではなく、後に続くことに注意2してください。数値の順序を取得するには、文字列を数値データ型(おそらく。)に強制する必要がありますintmap次の関数を使用してファイルから番号を読み取ると、これを簡単に行うことができます。

A = map(int, file.read().split())

これにより、要素をAに格納するintに、splitによって返されるすべての要素に対してキャスト関数が呼び出されます。この変更後、これはプログラムからの出力です。

入力:

5 4 14 6 -1 2 0 9 8 7 3 4 -10 200

出力:

[-10]
[-10, -1]
[-10, -1, 0]
[-10, -1, 0, 2]
[-10, -1, 0, 2, 3]
[-10, -1, 0, 2, 3, 4]
[-10, -1, 0, 2, 3, 4, 4]
[-10, -1, 0, 2, 3, 4, 4, 5]
[-10, -1, 0, 2, 3, 4, 4, 5, 6]
[-10, -1, 0, 2, 3, 4, 4, 5, 6, 7]
[-10, -1, 0, 2, 3, 4, 4, 5, 6, 7, 8]
[-10, -1, 0, 2, 3, 4, 4, 5, 6, 7, 8, 9]
[-10, -1, 0, 2, 3, 4, 4, 5, 6, 7, 8, 9, 14]
[-10, -1, 0, 2, 3, 4, 4, 5, 6, 7, 8, 9, 14, 200]
于 2012-12-15T16:28:12.563 に答える
0

終わった!リストを整数に変換する別の方法を考え出す必要がありました。ここにあります:

def main():
try:
    file=open(input("Please enter the name of the file you wish to open:" ))
    A = []
    #Here I convert the list to integers to separate as numbers in order to sort later
    for val in file.read().split():
        A.append(int(val))
    file.close()
    n = len(A)
    print ("These following", n,"numbers are in the inputted file:\n", A)

    for i in range(n):
        for j in range(1,n-i):
            if A[j-1] < A[j]:
                (A[j-1], A[j]) = (A[j],A[j-1]) #swap
    print("We can now organize it in descending order:\n", A)

    Output_File = input("Where would you like to save this data?")
    fileObject = open(Output_File, 'a')
    fileObject.write(str(Output_File)+'\n')
    print("Your file is now saved as",Output_File,".\nHave a nice day!")
    fileObject.close()

except IOError as e:
    print("({})".format(e))




if __name__ == '__main__':
main()
于 2012-12-19T17:12:38.000 に答える