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

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

新規登録して質問してみよう
ただいま回答率
85.35%
関数

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

Python

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

Q&A

1回答

2607閲覧

PythonのNoneの表示を消したいです。

1.2.qjail

総合スコア2

関数

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

Python

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

0グッド

0クリップ

投稿2021/07/12 01:17

編集2021/07/12 03:38

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

Python3.8.1 の文字列 string を受け取り、同じ文字列を小文字で返す、toLowerCase という関数を作成過程においてなぜか一番下にNoneが表示されてしまいます。 コードは下に書いてあるとおり3つしかないのですが、なぜNoneが表示されるか全くわかりません。

エラーメッセージ ```hello recursion good morning None ### 該当のソースコード ```python def toLowerCase(stringInput): if stringInput == "HELLO": return "hello" elif stringInput == "Recursion": return "recursion" elif stringInput == "Good Morning": return "good morning" 出力方法 print(toLowerCase("HELLO")) print(toLowerCase("Recursion")) print(toLowerCase("Good Morning")) 出力結果 hello recursion good morning None

試したこと

return をせずにprintだけで試したのですが、同様にnoneが表示されてしまいまいした。

補足情報(FW/ツールのバージョンなど)

現在pythonの3.8.1を使用しています

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

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

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

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

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

BeatStar

2021/07/12 01:26

コードは"<code>"または"<コード>"のボタンを押して出てくるヤツの『中に』書きましょう。 今のままではインデントが無視されて読みづらいです。
BeatStar

2021/07/12 01:28

また、本当にコードはこれだけでしょうか? 少なくともこれだけでは動きません。 関数定義はあくまで定義で、動かしてはいません。 もしかしたら提示されている部分『以外』が原因の可能性もありますよ? たとえばどのように呼び出しているかで違うとか。
1.2.qjail

2021/07/12 03:10

返信ありがとうございます。コードを記載する欄を間違えてしまいすみません。ご指摘ありがとうございます。  コードはこれだけです。実行した結果 hello, recursion, good morning は問題なく出力されるのですが、なぜか後にNoneが出力されてしまいます。print(toLowerCase())で呼び出しています。
BeatStar

2021/07/12 03:22

> コードを記載する欄を間違えてしまいすみません。 編集はできるはずなので、編集しましょう。 > print(toLowerCase())で呼び出しています。 じゃあ、質問にあるコードだけじゃないですね。 問題がある部分だけを提示するのではなく、『すべて』提示しましょう。 仮に呼び出し部とかも省くなら『適切に』提示しましょう。 初心者のうちは情報を自分で勝手に省くのはやめましょう。 少なくとも質問にあるコードだと、そもそも動きません。 関数定義はあくまで定義です。 呼び出して初めて意味を持ちます。 今の状態は『自分で料理してみました。ですがなぜか甘いです。砂糖は使っていないのですが』ぐらいのあいまいな質問です。 どういう料理なのか、もしかしたら砂糖以外の、玉ねぎとかの甘さがにじみ出ているのかもしれないし、 『味覚を感じる部分がおかしくなっている』とかのような味見する側の問題かもしれないし、 もしかしたら塩のつもりで砂糖を入れてしまっているとか。 いろんな可能性があります。 たとえば、『こういう手順で、こういう材料で作りました』とやるだけでも『あー、砂糖と塩間違ってそう……』とか、『もしかして(体の不調とかで)味覚が変になっているのでは?』と可能性を潰せます。 まずは他人が再現できるように質問しましょう。
BeatStar

2021/07/12 03:35

"<code>"のやつは確認しました。 ですが、関数定義が抜けていますよ。( オリジナルだと"def toLowerCase(stringInput):"の部分 )
BeatStar

2021/07/12 03:38

んー、もしかしてファイルに書くタイプじゃなくて、Python.exeを直接起動して動かすタイプでしょうか。 少なくとも、今提示されているもの(関数定義の"def...")は付け忘れだとして考えても、 Paiza IO で試してみてもNoneが表示されることはありませんね。 何か別のことをしていませんか? たとえば対話型(直接Python.exeを起動してやるやつ)で最後にEnterを押したとか。
BeatStar

2021/07/12 03:40

Pythonはインデントがモノを言う言語なので、ちゃんと書いてください。 今のままではそもそもエラーになります。(IndentationError)
meg_

2021/07/12 04:29

・質問のコードにはエラーがあるので修正してください。 ・こちらで修正したものを実行しましたが問題は再現しませんでした。質問者さんの実行環境は何でしょうか?
jbpb0

2021/07/12 08:52

「if stringInput == "HELLO":」 の行のインデントは、2行下の 「elif stringInput == "Recursion":」 と同じじゃないといけないはず そうしないと、質問とは別のエラーが出ます 質問者さんが実際に実行してるコードの通りに書いてください
jbpb0

2021/07/12 09:06 編集

質問者さんは、Pythonのコードをどのようにして実行しているのでしょうか? できるだけ詳しく具体的に書いてくださると、状況がわかりやすくなります ちなみに、 def toLowerCase(... の関数定義(インデントは直した)と、それに続けて print(toLowerCase("HELLO")) print(toLowerCase("Recursion")) print(toLowerCase("Good Morning")) を、全部一つのテキストファイル (ファイル名は tttest.py) に書いて、Macのターミナルで python tttest.py を実行しても、 hello recursion good morning と表示されるだけで、「None」とは表示されませんでした
guest

回答1

0

まず、コードを読みましょう

プログラミングは「こう書けばいい」……ではありません。

プログラムは魔法でもなんでもなく、人間が現実世界でやっていることを逐一指示されながら処理しているだけの代物である』です。

デバッグも大事です。

コードを読むコツは、『一行レベルで、その行が何をしているのかを考えながら読む』です。

たとえばコメント文にするとか。(その場合はバッグアップも取っておいた方がいいです)

たとえば、今回の場合、

(インデントが無視されているのでもしかしたら違うかもしれませんが)

Python

1def toLowerCase(stringInput): 2 # 引数stringInput が "HELLO" だったら 3 if stringInput == "HELLO": 4 # "hello" を返す 5 return "hello" 6 # そうじゃなくて, "Recursion" なら 7 elif stringInput == "Recursion": 8 # "recursion" を返す 9 return "recursion" 10 # そうじゃなくて, "Good Morning" なら 11 elif stringInput == "Good Morning": 12 # "good morning" を返す 13 return "good morning"

となっていますね。

これを日本語でも英語でもスペイン語でも中国語でも韓国語でもロシア語でもなんでもいいで、
自分が読み書きできる言語で書き下してみましょう。
(疑似コード)

1. もし渡されたデータが"HELLO" なら 1.1. "hello" を返す 2. そうじゃなくて"Recursion" なら 2.1. "recursion"を返す 3. そうじゃなくて"Good Morning" なら 3.1. "good morning" を返す

そして、この疑似コードをもとに、現実世界でシミュレーションしてみましょう。

脳内でもいいです。

実際に、たとえば、

[シチュエーション] ある人(Aさん)が"HELLO" 等のように大文字と小文字で形成された(= 大文字を含んだ) 単語や熟語を言うので、あなたはそれをすべて小文字で書きましょう。

的なシチュエーションと考えてみてください。

Aさんが『HELLO』と言えば、上記の疑似コードを上から読んで処理していく。

(1) に該当するのでそのまま(1.1) を処理する。

つまり『hello』とする。

Aさんが『Good Morning』と言えば、(1)は該当せずスルー、(2)も該当せずスルー、(3)で該当するので(3.1) を処理。

つまり『good morning』とする。

でも、Aさんが『HeLlo』のように、カタカナだと一致しても大文字・小文字が一致しない場合はどうなるでしょうか。

この場合、というか、プログラミング言語の多くは、大文字と小文字は別物と認識しますから、
『該当なし』となります。
(1), (2), (3) それぞれ満たさないので。

そうなると、何もしない。

でも関数を抜けると戻り値を受け取ろうとするので、『None』とかみたいなわけのわからないものが返ってくるのではないでしょうか。

仮に『HeLlo』とかのようなものはあり得ないとしても、『SLEEPY』とかみたいに、指定外のものが入力されていたらどうなるでしょうか。

これも(1), (2), (3) のいずれも該当しないのでNoneとかになるはずです。

そういう風にロジックを追ってみましょう。

ヒント: 過去解答


[追記1]

※ 修正依頼の方にも書きましたが、ここにも書いておきます。

んー、もしかして、対話型でやっていませんか?

Pythonの場合、2種類のやり方があります。

ソースコードをテキストファイルに書いて pyファイル ( *.py ) として書いて、

$ Python main.py

のように起動するタイプ(名称忘れた……)と

Python.exe を起動して ">>" のところにコードを書いていって、対話するようにやるタイプ(対話型)

です。

このうちの対話型なのかな? と思っているのですが。

もしそうなら、もしかしたら『Enter(キー)とかを押したためにそれが「入力された」と勝手に解釈されて……』とかみたいなのがあり得ますね。

投稿2021/07/12 02:01

編集2021/07/12 04:02
BeatStar

総合スコア4962

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

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

1.2.qjail

2021/07/12 03:21

返信ありがとうございます。 コードを違う欄に記載してしまい読みにくい中ありがとうございます。  私が書いたコードの出力結果はhello, recursion, good morning は問題なく出力されるのですが、 なぜか後にNoneが出力されてしまいます。 私も最初はスペルミスもしくは大文字、小文字のが混ざってると思い一回書き直したのですが、最後にNoneと表示されてしまいます。 print(toLowerCase())で3つの文字を呼び出しています。
BeatStar

2021/07/12 03:24

追記依頼にも書きましたが、『呼び出し側もすべて』書きましょう。 他の要因(呼び出し側で4回以上呼び出しているとか、そもそも別のファイルを呼び出しているとか)だったっりしますし。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問