1

Python で非常に基本的なルーレット シミュレーターを作成しています。現時点では、赤/黒の賭けのみに焦点を当てています (基本的には、コインを使用して表または裏に賭けることと同じです)。

私のコードにはさまざまな問題があります。言語に関する私の非常に基本的な知識を許してください。

import random

# Defines initial amounts of money and losses
money = 50
losses = 0


# Asks user how much to bet
def roulette_sim():
    print "How much do you want to bet?"
    bet = raw_input("> ")
    if bet > money:
        bet_too_much()
    else:
        red_or_black()


# Prevents one from betting more money than one has
def bet_too_much():
    print "You do not have all that money. Please bet again." 
    raw_input("Press ENTER to continue> ")
    roulette_sim()

# Asks user to select red or black, starts the sim, modifies money/losses
def red_or_black():
    print "OK, you bet %r" %  (bet)
    print "Red or black?"
    answer = raw_input("> ")
    number = random.randint(1, 2)
    if number == 1 and answer == "red":
        print "You win!"
        money += bet
        print "You now have %r money" % (money)
        print "Your losses are %r" % (losses)
        replay()
    elif number == 2 and answer == "black":
        print "You win!"
        money += bet
        print "You now have %r money" % (money)
        print "Your losses are %r" % (losses)
        replay()
    else:
        print "You lost!"
        money -= bet
        losses += bet
        print "You now have %r money" % (money)
        print "Your losses are %r" % (losses)
        replay()

# Asks user whether he/she wants to play again
def replay():
    print "Do you want to play again?"
    play_again = raw_input("y/n> ")
    if play_again == "y":
        roulette_sim()
    else:
        print "OK, bye loser!"


roulette_sim()

これまでの最初の問題: bet_too_much 関数が機能しません。どのような金額を入力しても、プログラムは多すぎると表示します (つまり、'bet' は常に 'money' より大きくなります)。なんで?

これまでの2番目の問題:たとえば、次を使用して「お金」に「賭け」を追加/減算したい場合: money += bet pythonは、これをintと文字列の合計として扱います(少なくとも私はそうすると思います)。 2 つの変数を合計するよりも。どうしてこれなの?

どんな助けでも大歓迎です。

ありがとう

4

3 に答える 3

2

Python は暗黙的な変換を行わないため、両方のことが起こります。何かを整数にしたいことを明示的に伝える必要がありますが、それは行われません。したがって、最初の問題については次のとおりです。

bet = raw_input("> ") 
if bet > money:
...

である必要があります

bet = raw_input("> ")
bet = int(bet)
if bet > money:
...

文字列を整数と比較したくないためです(比較できますが、現在得られている結果とは異なります)。

2 つ目については、同様に明示的にする必要があります。

money += int(bet)

(もちろん、既にbetint に変換している場合は問題ありません)。

Javascript はこの暗黙的な変換を行うことで悪名高いので、Javascript または類似の言語に精通している場合は、そのことは忘れて、使用している型について明示してください。全体として、どちらがより安全です。

于 2013-09-03T09:47:07.313 に答える
0

raw_input("> ") から取得した文字列を整数と比較しています。これではうまく終わりません。代わりにこの関数を試してください (完全にはテストしていません):

def roulette_sim():
    while(1):
        print "How much do you want to bet?"
        try:
           bet = int(raw_input("> "))
           break
        except ValueError:
           print 'You need to input a number'

    if bet > money:
        bet_too_much()
    else:
        red_or_black()

編集:コメントに従って「ValueErrorを除く」に変更されました。私はPythonプログラミングの例外処理部分で少し怠惰であることを知っていますが、おそらく他の人にそれを教えるべきではありません:-)

于 2013-09-03T09:47:27.167 に答える
0

この関数は文字列値をraw_input()返しますが、整数です。文字列を数値と比較すると、常に Python 2 の順序付けの数値が文字列よりも小さいという結果になります。money

raw_input()の結果を整数に変換します。

def roulette_sim():
    print "How much do you want to bet?"
    bet = int(raw_input("> "))

ValueError指定された入力が有効な数値でない場合、これは例外をスローする可能性があります。その例外をキャッチして、代わりに数値を入力するようにユーザーに指示することができます。

def roulette_sim():
    print "How much do you want to bet?"
    while True:
        try:
            bet = int(raw_input("> "))
        except ValueError:
            print "Please enter a valid amount, a number."
        else:
            break
于 2013-09-03T09:45:16.743 に答える