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

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

ただいまの
回答率

90.51%

  • Python

    8041questions

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

  • Python 3.x

    6451questions

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

  • Atom (テキストエディタ)

    509questions

  • コマンドプロンプト

    325questions

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

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

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 258

sasuke_killer

score 30

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

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

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

 該当のソースコード

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

 試したこと

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • efcode

    2018/07/26 06:06

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

    キャンセル

  • tachikoma

    2018/07/26 06:19

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

    キャンセル

回答 3

checkベストアンサー

+2

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/26 17:47

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

    キャンセル

0

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

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


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

>>> bool("hoge")
True
>>> bool(1024)
True

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

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

どのようなオブジェクトでも真理値として判定でき、 if や while の条件あるいは以下のブール演算の被演算子として使えます。
  オブジェクトは、デフォルトでは真と判定されます。ただしそのクラスが __bool__() メソッドを定義していて、それが False を返す場合、または __len__() メソッドを定義していて、それが 0 を返す場合は偽と判定されます。  主な組み込みオブジェクトで偽と判定されるものを次に示します:

偽であると定義されている定数: None と False
- 数値型におけるゼロ: 00.00jDecimal(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判定になる)性質を利用して、ちゃんと入力してくれるまでループするという動作を実現している訳ですね。


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

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

 追記

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

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

良い: if not seq:
     if seq:

悪い: if len(seq):
      if not len(seq):

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/27 20:18

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

    キャンセル

  • 2018/07/27 23:12

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

    キャンセル

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    C言語 簡易関数電卓作成 エラーばかり

    プログラミング初心者です。 c言語で電卓を作成してみましたが、うまく動いてくれません。 コンパイルできない。 エラー個所をコメントアウトして実行すると、一文字入力後操作を受

  • 解決済

    リストの要素を横に並べて出力させたい

    ans配列に[['dog','cat','rabbit']]と入っています。 このans配列の要素を dog cat rabbit と出力させたいです。 for j in

  • 解決済

    文字列を比較して配列に格納できない

    ans配列の要素の文字列の最初の文字がlinesの要素の最初の文字と一致するならlinesの2番目の要素('A'/'B'/'C'/'D')をline_alpha配列に格納する、とい

  • 受付中

    数当てゲームについて

    サイトの意味を履き違えた内容を載せてしまったので編集します。すいません。

  • 解決済

    Ruby ロジックについて

    このコードに追加の機能を持たせたいです。 もしokが偶数回連続したらok2と出力するイメージです。 NOが偶数回連続したらNO2と出力するイメージです。 loop do if

  • 解決済

    練習問題が解けません。。

    こんにちわ。独学で勉強しているものです。練習問題につまずいているのでご教授いただきたいです。 ここに質問の内容を詳しく書いてください。 問題(2) input()を用いて整

  • 解決済

    他のPythonファイルを実行できない(2)

    本日立て続けの質問になります。 さきほどは... {b.pyからa.pyファイルを開いても黒い画面が一瞬表示されるだけ →a.pyの中身はprint("(`・ω・´)")だけだ

  • 解決済

    クイズゲームの改善について

    初心者ながらクイズゲームを作ってみました。 public class Quiz { public static void main(String[] args) {

同じタグがついた質問を見る

  • Python

    8041questions

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

  • Python 3.x

    6451questions

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

  • Atom (テキストエディタ)

    509questions

  • コマンドプロンプト

    325questions

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