41249


先月からPython3の勉強をはじめました。  
これまでプログラミング経験のない初心者です。

現在、サイコロを振ってその目を表示するプログラムを作ろうとしています。  
しかし、if関数でサイコロを「振る」「振らない」を、yesかnoでえらばせたいのですが

[code]

    if diceQ == yes:
    NameError: name 'yes' is not defined
    
[/code]

と上のように出てしまいます。  
これをなくすのに、yesとnoに数値をあたえてif関数を使っても、うまくできませんでした。

正常なプログラムにするための改善点等、教えていただければ幸いです。  
以下は現在作業中のコードです。よろしくお願いします。

[code]

    import random
    dice = random.randint(1, 6) # random.randintで6面サイコロ
    diceQ = 0
    diceQ = input("サイコロを振りますか？ : ") # yesかnoを、diceQに入れたい
    if diceQ == yes: # yesがNameErrorになってしまう
        print("結果が出ます。。。")
        print("[ ", dice, " ]が出ました。") # 結果が出た後 diceQ に戻りたい
    elif diceQ == no:
        print("プログラムを終了します") # ここで終わる
    
[/code]


CC BY-SA 3.0
2018-01-27T14:50:40.663
41247
2018-01-27T15:31:02.257
2018-01-27T15:22:00.290
27172
question
python python3 random
random.randint(a, b)を使ってサイコロを振りたいです


「変数の名前」と「文字列」を区別してください。

質問文にあるプログラムには、大雑把に 2 つ、誤解なさっていそうな点があります。

1つ目は、`diceQ = input("サイコロを振りますか？ : ")` という行では、ユーザーが入力した値が **文字列** として変数
`diceQ` に代入されているという点です。数値ではありません。たとえば下のようなプログラムを実行すると、このことが分かります。

[code]

    diceQ = input("サイコロを振りますか？ : ")
    print(diceQ)  # この時点での変数 diceQ の中身を出力します
    
[/code]

2つ目は、`if diceQ == yes:` という行の `yes`
という書き方は、「yes」という名前の変数だと解釈されているという点です。文字列「yes」は `"yes"`
のように、ダブルクオーテーションで囲って書きます。したがって、たとえば変数 `diceQ` の中身が文字列 `"yes"`
と等しいかどうか確認したいのであれば、下のように書きます。

[code]

    diceQ = input("サイコロを振りますか？ : ")
    if diceQ == "yes":
      print("yes!!")
    else:
      print("not yes")
    
[/code]


CC BY-SA 3.0
2018-01-27T15:31:02.257
41249
2018-01-27T15:31:02.257
19110
41247
answer