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 函数不起作用。无论我输入多少,程序都会说它太多(即:“赌注”总是大于“金钱”)。为什么?

到目前为止的第二个问题:当我想通过使用例如:money += bet python 将“bet”添加到“money”/从中减去“bet”时,python 将其视为将 int 与字符串相加(至少我认为是这样)而不是将两个变量相加。为什么是这样?

任何帮助,将不胜感激。

谢谢

4

3 回答 3

2

这两件事都会发生,因为 Python 不进行隐式转换。你必须明确告诉它你想要一个整数,它不会为你做。所以,对于第一个问题:

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

必须

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

因为您不想将字符串与整数进行比较(可以,但是您现在得到的结果)。

对于第二个,你也必须明确:

money += int(bet)

(当然,如果您已经转换bet为 int,那也没关系)。

Javascript 因进行这种隐式转换而臭名昭著,因此,如果您碰巧熟悉该语言或类似的语言,请忘记这一点,并明确说明您正在使用的类型。总的来说,哪个更安全。

于 2013-09-03T09:47:07.313 回答
0

raw_input()函数返回一个字符串值,但money它是一个整数。将字符串与数字进行比较总是以 Python 2 的排序数字小于字符串而告终。

将 的结果转换为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 回答
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 回答