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

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

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

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

614閲覧

python ブール値と関数 大学の課題

yuki_29

総合スコア1

for

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/05/31 06:49

編集2022/06/01 03:01

python
大学の講義の課題で出されました。
課題の問題は
ブール値を用いて「引数にリストを指定して呼び出し、そのリストに0未満の値が一つでも含まれるかどうかを返す」という関数を作成してください
です。
以下の2つの違いがよくわかりません。

[1] def has_negative(values): for x in values: if x<0 : return True return False i=input("リストを入力>") values=eval(i) if has_negative(values): print("負の値が含まれる") else : print("負の値が含まれない") [2] def has_negative(values): for x in values: if x<0 : return True else: return False i=input("リストを入力>") values=eval(i) if has_negative(values): print("負の値が含まれる") else : print("負の値が含まれない")

[1]だと例えば[1,2,-3]を入れたら負の値が含まれると正しく出力されますが
[2]だと[1,2,-3]を入れたら負の値が含まれないと出力されます
違いを教えていただけるとありがたいです。
よろしくお願いします。

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

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

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

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

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

BeatStar

2022/05/31 07:09

まず一つ目。「画像での質問はやめましょう」。 画像でコードを提示することは余りにも失礼です。そもそも画像だとユーザが説明するときにコピペが出来ず、目視で書き写さないといけません。質問者は楽をして回答者が苦労しないといけないのでしょうか? そこまでやる気が無いのならやめた方がいいかと。 それに「半角スペースにすべきところを全角スペースにしているためにエラーになる」とかのような原因であった場合、画像だと認識する事が出来ません。プロであっても。 医者でいえば『MRI等を使わずにガン細胞があるかどうかを判別する』ぐらい無茶ぶりです。 二つ目。「なぜ試そうとしないのか」です。 PythonはPythonインタプリタをインストールさえしていれば簡単に動かせます。 外出先とかでどうしてもインストール出来ないのなら Paiza IO ( https://paiza.io/en/projects/new?language=python3 )のようなオンラインサービスもあります。 同じカンニングであればそういう風に実際に動かして試してみるべきでは? 三つ目。「自分で考えましょう」。 ここは「問題解決するための糸口を見付ける場」です。質問者が楽をするために他人に労力を課していい場所ではありません。どうしてもやる気が無いのなら諦めるか、課題代行に金を払ってやってもらってください。 四つ目。「もし自分なりにやったのなら『質問方法工夫』しましょう」。 回答者はネットを介した単なる赤の他人です。街中ですれ違っただけの他人です。 その赤の他人に「言わなくてもわかるだろ」的な考えはおかしいですよね? 自分なりに考えた・調べたけどわからないのなら、『どのように調べた』とか『自分なりの解釈』とかを書くべきです。それだけでもだいぶ印象がかなり変わります。 これは質問者んを罵倒しているのではなく、発破をかけているだけです。(これで質問者さんがやる気を出してくれれば回答しやすいんだけどなぁ)
ozwk

2022/05/31 07:17

「どのようにして動いているのか」も何も、このままだと「書いてあるように動く」としか答えられないのですが、どのあたりがわからないのでしょう。 そもそも(合っているかは別にして)課題に対する回答を書いておきながら、どう動くのか解説してほしいというのも状況がわかりません。
yuki_29

2022/05/31 07:57

皆さんご回答ありがとうございます!初めての質問だったので分からないことが多く失礼をしました。後で修正したものを送るので見ていただけると嬉しいです!
ozwk

2022/06/01 02:51

コードはコードブロック内に書いてください
BeatStar

2022/06/01 03:44

[1]のコードと[2]のコードはそれぞれ別のコードブロックに書いた方がいいかも。一瞬、一つのコードと錯覚する…
guest

回答3

0

ベストアンサー

こういう場合はコードを読みます。
コードを読むコツは「一行レベルで、その行が何をしているかを考えながら読む」です。

まず、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]のコードも同じようにやってみてください。

投稿2022/06/01 04:12

BeatStar

総合スコア4958

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

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

yuki_29

2022/06/03 02:41

本当にわかりやすかったです!しっかりと理解できました!ありがとうございました!
guest

0

returnというのは、そこの行に到達したら関数が終わります。
[2]だとリストの1番最初をみて<0だろうがそうで無かろうがreturnしてしまうので
リストの1番最初しか判定していません。

投稿2022/06/01 02:55

ozwk

総合スコア13521

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

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

0

まず、pythonの基本的な文法を学びましょう
python 入門、でぐぐって出てきたものをひととおり読むのでもいいです。

がんばってください。

投稿2022/05/31 07:13

y_waiwai

総合スコア87774

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

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

yuki_29

2022/05/31 07:57

回答ありがとうございます!
y_waiwai

2022/05/31 08:20

提示されたようなコードなら、ちょっとした入門サイトを読むだけでも理解できるようになるかと思います。 逆に、そこらへんの基本的な知識もないところで、いくら解説したところで理解はできないかと思います
Zuishin

2022/05/31 09:39

文法の問題なんですかこれ? ロジックの方に問題があるでしょう。
y_waiwai

2022/06/01 04:27

あらら、質問が編集されて、別の問題になっちゃってるのねw
Zuishin

2022/06/07 22:37

現在は別の質問にはなっていますが、この回答が書かれた際には画像でコードが載っていて、文法の問題はありませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問