質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

239閲覧

データを入れ替えた数を表示したい

picapica

総合スコア3

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/06/12 04:35

リストの中身を入れ替えた回数を表示するコードを書きたいです。

def selectionsort(a): for i in range(0,len(a),1): for j in range(i+1,len(a),1): if a[j]<a[i]: temp = a[i] a[i] = a[j] a[j] = temp count += 1 a = [7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1] count = 0 print(" ソート前 ",a) selectionsort(a) print(" ソート後 ",a) print(count)

のように書きました。

UnboundLocalError: local variable 'count' referenced before assignment

とエラーが出て,count の書き方が良くないのだろうと思うのですが
どの様に書き直せば良いのか分かり兼ねています。

どの様にしたら良いでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

countselectionsort 関数内のローカル変数にしてもよいかと思います。

python

1def selectionsort(a): 2 count = 0 3 for i in range(0,len(a),1): 4 for j in range(i+1,len(a),1): 5 if a[j]<a[i]: 6 a[i], a[j] = a[j], a[i] 7 count += 1 8 return count 9 10if __name__ == '__main__': 11 a = [7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1] 12 print(" ソート前 ",a) 13 count = selectionsort(a) 14 print(" ソート後 ",a) 15 print(count)

投稿2022/06/12 04:49

melian

総合スコア19714

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

picapica

2022/06/12 05:13

ご回答ありがとうございます! >>if __name__ == '__main__': の部分ですが,これはどの様な構文でしょうか?
melian

2022/06/12 05:24

例えば、このソースファイルを selection_sort.py とした場合、他のプログラムから、 import selection_sort としてインポートすると、selectionsort 関数の定義のみがインポートされて "if __name__ == '__main__':" 以降の部分は実行されません。これがない場合には count = selectionsort(a) などの部分が実行されてしまいます。今回の場合は無くても問題ありません。
guest

0

ベストアンサー

以下の1行を追加でいけるかと思います。

diff

1def selectionsort(a): 2+ global count 3 for i in range(0,len(a),1):

投稿2022/06/12 04:46

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

picapica

2022/06/12 04:53

``` def selectionsort(a): global count for i in range(0,len(a),1): for j in range(i+1,len(a),1): if a[j]<a[i]: temp = a[i] a[i] = a[j] a[j] = temp count += 1 a = [7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1] print(" ソート前 ",a) selectionsort(a) print(" ソート後 ",a) print(count) ``` この様に書き直してたのですが ``` NameError: name 'count' is not defined. Did you mean: 'round'? ``` この様なエラーが出たのですが,いかがでしょうか? 書き方に誤りはありますでしょうか?
picapica

2022/06/12 05:25

global 以外の部分で誤りがあったのだと思います! 解決致しました! ありがとうございます!
退会済みユーザー

退会済みユーザー

2022/06/12 05:26

🎉 👏
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問