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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

Python

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

Q&A

解決済

3回答

807閲覧

input関数を使って、入力したユーザーの名前を確認するプログラムを作っています。

sasuke_killer

総合スコア42

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

Python

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

0グッド

0クリップ

投稿2018/07/25 20:46

input関数を使って、入力したユーザーの名前を確認するプログラムを作りたいです。

上のような意図でコードを書きました。
しかし、実行してもエラーがおきます。
おそらくif文のところでエラーが起きています。

試行錯誤しましたが結局成功しなかったので皆さんの力をお借りできればと思います。
よろしくお願いします。

該当のソースコード

python3

1while True: 2 ans = input("ニックネームを入力してください: ") 3 if ans==True: 4 print("あなたの名前は{}ですね".format{ans}) 5 break 6 else: 7 print("入力してください")

試したこと

if文のansを他に代入してみたり、そのままboolとおきかえてみたりもしました。

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

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

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

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

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

efcode

2018/07/25 21:06

エラーが出ているのならその内容を書いた方が回答のヒントになり得ます。
tachikoma

2018/07/25 21:19

エラーの内容と、上記のスクリプトをどうやって実行してるかを追記お願いします。
guest

回答3

0

ベストアンサー

inputの戻り値は入力された文字列なので、if ans==True:ではなくif ans:とした方が意図した動作になると思います。

formatは関数であるので()を使います。print("あなたの名前は{}ですね".format{ans})ではなくprint("あなたの名前は{}ですね".format(ans))

投稿2018/07/25 21:13

efcode

総合スコア422

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

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

0

他の回答者の方がおっしゃっているように、直接のエラー箇所はformat{ans}の部分で、if ans==True:ではなくif ans:としないと無限ループになります。

エラーの原因と正しく動くコードはもう上がっているので、補足的な情報を。


まず大前提として、pythonのオブジェクトは何でもbool型(TrueかFalseのどちらか)に変換できます。

python

1>>> bool("hoge") 2True 3>>> bool(1024) 4True

ifなどの条件に書いたときには、この変換が行われてbool型になります。

ではどんな風に変換されるのか? ドキュメントに書いてあります。

どのようなオブジェクトでも真理値として判定でき、 ifwhile の条件あるいは以下のブール演算の被演算子として使えます。

オブジェクトは、デフォルトでは真と判定されます。ただしそのクラスが __bool__() メソッドを定義していて、それが False を返す場合、または __len__() メソッドを定義していて、それが 0 を返す場合は偽と判定されます。 主な組み込みオブジェクトで偽と判定されるものを次に示します:

偽であると定義されている定数: NoneFalse

  • 数値型におけるゼロ: 0, 0.0, 0j, Decimal(0), Fraction(0, 1)
  • 空のシーケンスまたはコレクション: '', (), [], {}, set(), range(0)

ブール値の結果を返す演算および組み込み関数は、特に注釈のない限り常に偽値として 0 または False を返し、真値として 1 または True を返します。 (重要な例外: ブール演算 or および and は常に被演算子のうちの一つを返します。)

4. 組み込み型 — Python 3.6.5 ドキュメント 4.1. 真理値判定

重要なのは、

オブジェクトは、デフォルトでは真と判定されます

というところと

主な組み込みオブジェクトで偽と判定されるものを次に示します:
(中略)

  • 空のシーケンスまたはコレクション: '', (), [], {}, set(), range(0)

というところです。

空文字列がFalseと判定される(逆にそれ以外の文字列はTrue判定になる)性質を利用して、ちゃんと入力してくれるまでループするという動作を実現している訳ですね。


とはいえ、これを使うのはトリッキーなので、個人的にはこう書く方が好きです。

python

1while True: 2 ans = input("ニックネームを入力してください: ") 3 if ans != "": 4 print("あなたの名前は{}ですね".format(ans)) 5 break 6 else: 7 print("入力してください") 8

追記

「トリッキーなので、個人的にはこう書く方が好き」と書いてしまいましたが、if ans:のような書き方は公式スタイルガイドで推奨されているようです。逆に、if ans == "":のような書き方は推奨されないとのことです。ご指摘くださったfaoさんありがとうございました。

シーケンス (文字列, リスト, タプル) については、 空のシーケンスが False であることを利用しましょう。:

python

1良い: if not seq: 2 if seq: 3 4悪い: if len(seq): 5 if not len(seq):

はじめに — pep8-ja 1.0 ドキュメント プログラミングに関する推奨事項

投稿2018/07/27 09:35

編集2018/07/27 14:11
hayataka2049

総合スコア30933

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

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

退会済みユーザー

退会済みユーザー

2018/07/27 11:18

私はPythonでは空のシークエンス(strings, lists, tuples)がfalseになることはよく知られたことで全然トリッキーだとは思いません。 色々なライブラリでもこの書き方がされていますし、Pythonのコーディング規約PEP8 でも推奨されている事です。 https://www.python.org/dev/peps/pep-0008/#programming-recommendations
hayataka2049

2018/07/27 14:12

ご指摘ありがとうございます。PEP8で推奨されていることは見落としていました。回答に追記させていただきました。
guest

0

python3

1while True: 2 ans = input("ニックネームを入力してください: ") 3 if ans: 4 print("あなたの名前は{}ですね".format(ans)) 5 break 6 else: 7 print("入力してください")

投稿2018/07/25 21:08

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

sasuke_killer

2018/07/26 08:47

ありがとうございます! 回答してくださったコードと自分のコードを見比べて、どこが違ったのかがわかりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問