4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

空文字も0もFalse?プログラミング初学者のbool型入門記録

Posted at

プログラミング初学者の発見と成長の記録です。
受け取った文字列を操作するコードを書いた過程で学んだことをメモします。

取り組んだ課題はこちらです。

ユーザーから入力された文字列を受け取り、以下を実行するプログラムを書いてください。

- 文字数を表示する
- 大文字に変換して表示する
- 小文字に変換して表示する
- 文字列が空だった場合は「何も入力されていません」と表示する

💡今回学べたこと

  1. 異なるデータ型は比較できない
  2. Pythonの真偽値判定の挙動が思っていたのと違った
  3. 組み込み関数 len() は、要素のサイズ(要素数や文字数)を取得できる
  4. 組み込み型 str のメソッド、upperlowerで大文字小文字を変換できる
  5. 組み込み関数 input() は、ユーザからの入力を受け取る対話型インターフェースを提供する。戻り値は「文字列」として返ってくる

今回の記事では、タイトルにもある通り、Pythonの真偽値判定を中心に扱います。

文字列型(str)と数値型(int)は直接比較できない

# ユーザーからの入力を文字列として受け取る
user_input = input("任意の文字列を入力してください")
# エラー発生箇所: 文字列と整数を比較している
if user_input > 0:
    print(f"{user_input}は、{len(user_input)}文字です") # 文字数をカウント
    print(user_input.upper()) # 大文字に変換
    print(user_input.lower()) # 小文字に変換
# 入力が空の場合は「何も入力されていません」と表示する
else:
    print("何も入力されていません")

上記コードでTypeErrorが発生

# TypeError: '>' not supported between instances of 'str' and 'int'

if文ヘッダーの箇所で、文字列と整数を比較演算してしまっていることが原因

「異なるデータ型の比較はできない」
冷静に考えれば分かるし、座学で学んで頭でわかったつもりでも、いざコードを書くとやってしまった。

解決していきます。

シンプルに真偽値で判定する方法

# 改善案1: 真偽値判定を利用
if user_input: # 入力があればTrue、空文字ならFalseを返す
    print(f"{user_input}は、{len(user_input)}文字です")
else:
    print("何も入力されていません")

これはシンプルで驚きました。
後述する方法よりも、Pythonicな書き方となります。

文字列の長さで空文字をチェックする方法

# 改善案2: 文字列の長さを使って判定
if len(user_input) > 0: # 0より大きければTrue、0ならFalse
    print(f"{user_input}は、{len(user_input)}文字です")
else:
    print("何も入力されていません")

数字同士に揃えたのでエラーが解消されています。

Pythonの真偽値判定

Pythonでは、変数やリストが空か否かで自動的に真偽を判定します。

  • 何かが入っている →True
  • 空っぽ →False
    例:
    • 空の文字列、リスト、辞書、など
    • 数値の0
    • None

確認してみる

以下の条件がどう評価されるか確認し、理由を添えました。

print(bool(""))   # False <--文字列が空なので
print(bool("a"))  # True <--文字列に値があるので
print(bool(0))    # False <--0なので
print(bool([]))   # False <--空のリストなので
print(bool(["a"])) # True <--リストに値があるので

おわりに

『独習Python』では論理型について下記の説明がなされています。

論理型は、組み込み型の中でも最も単純な型で、
真(正しい)か偽(間違い)か、いずれかの状態しか持ちません。

この説明を読んで「単純=わかりやすい」ではないんだなと思いました。
しかし、一度わかってしまうと下記コードをすっきりスマートに読めるようになりました。

if my_list:
    print("リストに要素が入っていますよ!")

今後のためのメモ

  • データ型を意識してコードを書く(比較演算だけでなく、算術演算子の場合も振る舞いが変わるため。)
  • 値が空かどうか判定するときは、今回学んだbool型のしくみを理解してコードを書く

参考資料

『独習Python』

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?