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

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

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

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

Q&A

解決済

2回答

230閲覧

Pythonでこのコードが書けず悩んでいます。

kotodama

総合スコア33

Python

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

0グッド

0クリップ

投稿2018/07/04 12:26

編集2018/07/04 12:48

Pythonの勉強を独学で始めました。
今、独学プログラマーという本を読んでいて、その中の問題に下記のような問題があるのですが、コードが書けず悩んでいます。どなたか助けてください。宜しくお願い致します。

問題
無限ループをする数字当てプログラムを書こう。ユーザーに文字を入力してもらい、qが入力されたら終了。数字が入力されたら正解かどうか判定しよう。
正解の値はプログラム内にいくつかリストで持たせておいて、ユーザーが入力した数字がそれと一致したら正解、一致しなかったら不正解と表示しよう。もし、数字かq以外の文字が入力されたら数字を入力するかqで終了します。と表示しよう。

書いたコードです。
ぐちゃぐちゃですがお願いします。

'''Python
date = [1,2,3,4,5,6,7,8,9,10]

j = 0
while True:
for i in date:
print("入力してね")
a = input("入力欄:")
if a == "q":
break
else:
for j in date:
dd = date[j]
if a == j:
print("正解")
else:
j += 1
'''

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

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

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

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

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

pepperleaf

2018/07/04 12:28

まず、書けた部分でも提示しましょう。
kotodama

2018/07/04 12:34

書いたコードを追加しました
otn

2018/07/04 12:43

コードの1行上に、```Python と行追加して、末尾に ``` と行追加してください。
kotodama

2018/07/04 12:48

修正しました
otn

2018/07/04 12:54

間違ってますよ。タイプミスしないよう、私の書いた物をコピペして下さい。
hayataka2049

2018/07/04 12:55

'じゃなくて`なんですねー(シングルクォートとバッククォート)。一般的なキーボードだとshift+@で入力できるはずです。自分で書き込んだのは消して、コード部分を選択して<code>ボタンを押し、「ここに言語を入力」を「python」に書き換えるのが簡単です。
guest

回答2

0

ベストアンサー

アドバイス。

  • 内側のforは要らないでしょう

  • ある値がリストの要素にあるかどうかは、in演算子で確認できます

例:

python

1>>> 1 in [1,2,3] 2True 3>>> 0 in [1,2,3] 4False
  • たぶん「もし、数字かq以外の文字が入力されたら」を書くのがちょっと厄介というか知識が要る部分なので、まずは絶対に数字かqが入ってくるという前提のプログラムを書いてみると良いと思います

  • str.isdigit()というメソッドがあり、文字列が0-9だけで構成されるかどうか判定してくれます

python

1>>> "123".isdigit() 2True 3>>> "hoge".isdigit() 4False
  • まずqかどうか判定、次に数字かどうか判定、数字でなければ「数字を入力するか~」を表示すれば良いでしょう

  • 追記:あと、型変換のことを考えないと悩むかも("1" in [1,2,3]Falseです)。文字列を整数に変換するにはint("1")などのようにすれば良いでしょう

投稿2018/07/04 12:52

編集2018/07/04 13:00
hayataka2049

総合スコア30933

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

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

kotodama

2018/07/04 13:02

回答ありがとうございます。 date = [1,2,3,4,5,6,7,8,9,10] while True: print("入力してね") a = input("入力欄:") for a in date: print("正解") elif a == "q": break else: print("数字を入力しよう") 少しずつがんばります!!
hayataka2049

2018/07/04 13:11 編集

とりあえず質問を再編集しましょうか。コードのくくりを直して(ちゃんと書くとこの回答みたいに綺麗に見えるようになります)、このまま質問を閉じるのなら後はBAを決めていただければそれで良いです。 追加でアドバイスを求めるなら今の質問文の末尾に ### 追記 とか書いて、その下に書き直したコードと疑問点を追記しましょう。 コメントだとmarkdownが効かないので、コード載せてやり取りするには向かないのです。
guest

0

Python

1correct_list = [3, 7, 33, 77, 333, 777] 2while True: 3 num = input('数字を入力してください') 4 if num == 'q': 5 print('終了します') 6 break 7 try: 8 if int(num): 9 if int(num) in correct_list: 10 print("正解!") 11 else: 12 print("残念、不正解") 13 except: 14 print('数字を入力するか、qで終了してください')

こんな感じでどうでしょうか?
こちらに解答もありますよ。
リンク内容

投稿2018/07/04 12:59

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

LouiS0616

2018/07/04 13:01 編集

if int(num): は不要な気がします。 というより、正解に0が含まれる場合に上手く動作しなくなります。
kotodama

2018/07/04 13:02

ありがとうございます!!!助かります!!!! 回答もあったんですね
退会済みユーザー

退会済みユーザー

2018/07/04 13:07

いえいえ^^; 指摘されてるとおり、僕のコードはダメですね。 もうちょっと考えてみます。
hayataka2049

2018/07/04 13:11

答えとされるコード、例外の発生の有無に関わらず後ろのifが実行されるのは、意図した結果なのだろうか・・・
退会済みユーザー

退会済みユーザー

2018/07/04 13:29

当然、意図してないです。
退会済みユーザー

退会済みユーザー

2018/07/04 13:46

LouiS0616さんのおっしゃるとおり、if int(num):でFalse抜けはダメですね。もしかしたら、わかってないかもだけど。。if int(num):取り除いて、インデント下げたら動くみたいです。失礼しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問