こういう場合はコードを読みます。
コードを読むコツは「一行レベルで、その行が何をしているかを考えながら読む」です。
まず、Pythonにはエントリポイントはないいmたいなので、それに近い部分(関数定義やクラス定義等以外の部分)を見てみます。
Python
1# 入力を促して取得
2i=input("リストを入力>")
3# 入力された値を評価して適切に設定
4values=eval(i)
5
6# その値(群)を渡して呼び出し、結果がtrueなら
7if has_negative(values):
8 # 負の値が含まれるとする
9 print("負の値が含まれる")
10# そうでないなら
11else :
12 # ふくまれないとする
13 print("負の値が含まれない")
これを手作業でやると考えてみてください。
たとえば料理のレシピ的なものとして考えてみるとか。実際にデータを入れてみるとか。
で、関数を呼んでいますから同じように呼び出された関数にも潜る。
Python
1# 引数としてvaluesを受け取る
2def has_negative(values):
3 # valuesにあるデータ分、ループ
4 for x in values:
5 # データが0未満であれば
6 if x<0 :
7 # Trueを返す
8 return True
9 # Falseを返す
10 return False
これを手作業でやってみましょう。
わかりにくいと思うので擬似コードとして切り出してみましょう。
0. 引数としてvaluesが渡される
1. valuesにあるデータ分、以下をループ
1.1. データが0未満なら
1.1.1. Trueを返す
2. Falseを返す
たとえば、[ 1, 3, 2, 4 ] だとします。
まず(1)で1というデータを計算する。
(1.1)で 1 < 0 を満たしますか?
つまり1は0より小さいですか?大きいですよね。なので処理をせずに(1)に戻る。
(1)で次は3を対象にする。
3 < 0 は満たしますか?
満たしませんね。なので処理をせずに(1)に戻る。
…とやり、4を対象にするまで繰り返す。(最後のデータが4なので)
で、データが4のとき、4 < 0 は満たしますか?
満たしませんね。なので(1)に戻ります。
ですがvaluesにはもうこれ以上データはないのでループを抜ける。つまり(2)に行く。
(2)ではFalseを返して終了。だから上記のデータ列であればFalseが返る。
その結果、呼び出し元で「関数の処理結果がtrueなら」を満たさないため、「負の数は無し」的なメッセージになる。
もし[ 2, 3, -1, 5] であれば、
(1)で 2 が取り出される。2 < 0 は満たさないため、処理をせずに(1)に戻る。
(1)で3が取り出される。3 < 0 は満たさないため、同じく(1)に戻る。
で、(1)に戻って -1 が取り出される。
-1 < 0 は満たしますか?
つまり -1は0より小さいですか?
小さいですね。なので満たす。よって(1.1.1)を処理する。
つまり、Trueを返して関数を終了する。
よってTrueが返る。
という風に。
これを[2]のコードも同じようにやってみてください。