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

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

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

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

2回答

1763閲覧

Pythonでのプログラムについて

MrKametyou

総合スコア14

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2016/10/10 11:07

編集2016/10/10 11:45

_私は最近大学の授業でpythonを使ってプログラミングを始めたものなのですが、入力した数字を大きい順に配列するというこのプログラムの仕組みがわかりません。
どなたかわかりやすく教えていただけないでしょうか

python

1data = raw_input() 2nums = data.split() 3 4min = int(nums[0]) 5for i in range(len(nums)): 6 nums[i] = int(nums[i]) 7 if (min < nums[i]): 8 min = nums[i] 9 10sorted_list=[] 11for i in range(len(nums)): 12 #find the maximum, append to other list 13 #and replace it with a small number 14 max=min 15 max_index = 0 16 for j in range(len(nums)): 17 if (nums[j]<max): 18 max = nums[j] 19 max_index = j 20 21 sorted_list.append(nums[max_index]) 22 nums[max_index] = min 23 24print sorted_list

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

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

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

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

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

ikedas

2016/10/10 11:40 編集

授業で説明がなかったのでしょうか。または、教科書に解説はないのでしょうか。そもそも、教員の方に質問したらいいとおもいます。授業料払ってるのでしょう?
MrKametyou

2016/10/10 11:41

教員がくそ過ぎて教えてくれないからここにきているんです
ikedas

2016/10/10 11:48

しかたないですね。じゃあ、ウィキペディアの「ソート」の記事やその関連記事を見て、ご質問のプログラムがどういうソートアルゴリズムにあたるか考えてみてはどうですか。
coco_bauer

2016/10/10 12:36

教員室に聞きに行きましょう。そういう特典は授業料を支払っていれば、当然得られるものですから。
guest

回答2

0

動作がよくわからないときはprintデバッグと言う方法があります。要所要所にprint文(Python3以降はprint式)を突っ込んで何がどう変わったのかを確認するという方法です。

Python

1data = raw_input() 2nums = data.split() 3 4min = int(nums[0]) 5for i in range(len(nums)): 6 nums[i] = int(nums[i]) 7 if (min < nums[i]): 8 min = nums[i] 9 10sorted_list=[] 11 12print "start", "min:", min, "sorted_list:", sorted_list, "nums:", nums 13 14for i in range(len(nums)): 15 #find the maximum, append to other list 16 #and replace it with a small number 17 max=min 18 max_index = 0 19 for j in range(len(nums)): 20 if (nums[j]<max): 21 max = nums[j] 22 max_index = j 23 print "i:", i, "j:", j, "min:", min, "max:", max, "max_index:", \ 24 max_index, "sorted_list:", sorted_list, "nums:", nums 25 26 sorted_list.append(nums[max_index]) 27 nums[max_index] = min 28 29print sorted_list

このようにして、二重forループで何がどうわかっていったのかを見えるようにします。例えば、3 2 8 5 7という入力だと、

start min: 8 sorted_list: [] nums: [3, 2, 8, 5, 7] i: 0 j: 0 min: 8 max: 3 max_index: 0 sorted_list: [] nums: [3, 2, 8, 5, 7] i: 0 j: 1 min: 8 max: 2 max_index: 1 sorted_list: [] nums: [3, 2, 8, 5, 7] i: 0 j: 2 min: 8 max: 2 max_index: 1 sorted_list: [] nums: [3, 2, 8, 5, 7] i: 0 j: 3 min: 8 max: 2 max_index: 1 sorted_list: [] nums: [3, 2, 8, 5, 7] i: 0 j: 4 min: 8 max: 2 max_index: 1 sorted_list: [] nums: [3, 2, 8, 5, 7] i: 1 j: 0 min: 8 max: 3 max_index: 0 sorted_list: [2] nums: [3, 8, 8, 5, 7] i: 1 j: 1 min: 8 max: 3 max_index: 0 sorted_list: [2] nums: [3, 8, 8, 5, 7] i: 1 j: 2 min: 8 max: 3 max_index: 0 sorted_list: [2] nums: [3, 8, 8, 5, 7] i: 1 j: 3 min: 8 max: 3 max_index: 0 sorted_list: [2] nums: [3, 8, 8, 5, 7] i: 1 j: 4 min: 8 max: 3 max_index: 0 sorted_list: [2] nums: [3, 8, 8, 5, 7] i: 2 j: 0 min: 8 max: 8 max_index: 0 sorted_list: [2, 3] nums: [8, 8, 8, 5, 7] i: 2 j: 1 min: 8 max: 8 max_index: 0 sorted_list: [2, 3] nums: [8, 8, 8, 5, 7] i: 2 j: 2 min: 8 max: 8 max_index: 0 sorted_list: [2, 3] nums: [8, 8, 8, 5, 7] i: 2 j: 3 min: 8 max: 5 max_index: 3 sorted_list: [2, 3] nums: [8, 8, 8, 5, 7] i: 2 j: 4 min: 8 max: 5 max_index: 3 sorted_list: [2, 3] nums: [8, 8, 8, 5, 7] i: 3 j: 0 min: 8 max: 8 max_index: 0 sorted_list: [2, 3, 5] nums: [8, 8, 8, 8, 7] i: 3 j: 1 min: 8 max: 8 max_index: 0 sorted_list: [2, 3, 5] nums: [8, 8, 8, 8, 7] i: 3 j: 2 min: 8 max: 8 max_index: 0 sorted_list: [2, 3, 5] nums: [8, 8, 8, 8, 7] i: 3 j: 3 min: 8 max: 8 max_index: 0 sorted_list: [2, 3, 5] nums: [8, 8, 8, 8, 7] i: 3 j: 4 min: 8 max: 7 max_index: 4 sorted_list: [2, 3, 5] nums: [8, 8, 8, 8, 7] i: 4 j: 0 min: 8 max: 8 max_index: 0 sorted_list: [2, 3, 5, 7] nums: [8, 8, 8, 8, 8] i: 4 j: 1 min: 8 max: 8 max_index: 0 sorted_list: [2, 3, 5, 7] nums: [8, 8, 8, 8, 8] i: 4 j: 2 min: 8 max: 8 max_index: 0 sorted_list: [2, 3, 5, 7] nums: [8, 8, 8, 8, 8] i: 4 j: 3 min: 8 max: 8 max_index: 0 sorted_list: [2, 3, 5, 7] nums: [8, 8, 8, 8, 8] i: 4 j: 4 min: 8 max: 8 max_index: 0 sorted_list: [2, 3, 5, 7] nums: [8, 8, 8, 8, 8] [2, 3, 5, 7, 8]

ijの二重ループ、iが回る度にsorted_listがちょっとずつ増やしてnumsminで置き換えられていく、jを回してmaxになるのを探していく、**minmaxの比較の所って不等号が逆じゃ無いのか?**というのがよくわかるかと思います。

投稿2016/10/10 13:59

raccy

総合スコア21735

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

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

0

ベストアンサー

python

1# -*- coding:utf-8 -*- 2""" lenメソッドで、配列の長さを取得し、0番目から最後まで実行""" 3for i in range(len(nums)): 4 nums[i] = int(nums[i]) # 整数値に変換する 5 if (min < nums[i]): # 比較して、大きかったら処理をする 6 min = nums[i] 7# print min # 実は最大値を求めている

下のループ

index = 0 1 2 max_index = 0
nums[] = 3 2 4 max = 4 (min)

一回目(iに相当)
jに相当
nums[0] = 3 < 4 ---> max = 3 max_index = 0
nums[1] = 2 < 3 ---> max = 2 max_index = 1
nums[2] = 4 < 2 ---> max = 2 max_index = 1 ---> sorted_list[nums[max_index] = 2]

nums[1] = 4
二回目
index = 0 1 2
nums[] = 3 4 4 max = 4

nums[0] = 3 < 4 ---> max = 3 max_index = 0
nums[1] = 4 < 3 ---> max = 3 max_index = 0
nums[2] = 4 < 3 ---> max = 3 max_index = 0 ---> sorted_list[2, 3]

nums[0] = 4
三回目
index = 0 1 2
nums = 4 4 4

次からこのようにトレースをしてみてください
めんどくさいですが、ためになります
どこかおかしかったら指摘してください

投稿2016/10/10 13:01

D.I

総合スコア42

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問