Python Can';我不明白为什么它一直在运行我的循环

Python Can';我不明白为什么它一直在运行我的循环,python,Python,我是python的初学者。我写了一个玩轮盘赌的小程序(来自赌场),但它是一个简化版 我不明白为什么在我尝试时它总是运行错误的循环。当我“下注”时,它一直在循环,但我不知道为什么 from math import ceil from random import randrange print '==================' print ' Roulette v2 ' print '==================' # init vars bet = 0 pick =

我是python的初学者。我写了一个玩轮盘赌的小程序(来自赌场),但它是一个简化版

我不明白为什么在我尝试时它总是运行错误的循环。当我“下注”时,它一直在循环,但我不知道为什么

from math import ceil
from random import randrange

print '=================='
print '    Roulette v2   '
print '=================='

# init vars
bet = 0
pick = 0
restart = 1
paire = 0
keep = True
bille = randrange(50)

wallet = raw_input('Whats in your wallet : ') # ask the player how much money he gets for this session

try:
    wallet = int(wallet) # set wallet as integer, also test if user wrote a number
except ValueError:
    print '[!] It must be a number' # if not a number set a default value for wallet
    print '[!] Default value set to 50'
    wallet = 50 # 50 is our default value

while keep and restart: # while keep is true and restart equal 1,then keep playing

    print 'Wallet : ',wallet,'$' # show how much money we got left
    bet = raw_input('Place a bet : ') 

    while type(bet) != int: # same as above, check if bet is an integer

        try:
            bet = int(bet)
        except ValueError:
            print '[!] It must be a number'

        bet = raw_input('Place a bet : ') # if not, ask again

        while bet > wallet: # if not enough money then cancel bet
            print '[!] You do not have ',bet,'$ in your wallet !'
            print 'Your wallet : ',wallet
            bet = raw_input('Place a bet : ')

    pick = raw_input('Pick a number between 1-50 : ')

    while type(pick) != int: # same as above

        try:
            pick = int(pick)
        except ValueError:
            print '[!] It must be a number'

        pick = raw_input('Pick a number between 1-50 : ')

    print '...'
    print '....'
    print '.....'
    print '......!'

    if pick != bille: # if players number is different than random integer
        paire = pick % 2 # check if players number is pair

        if paire == 1: # if its pair then add bet + bet / 2 to his wallet
            print 'Your number is pair !'
            bet = bet + bet / 2
            ceil(bet) # we dont want a float number
            wallet = wallet + bet
            print 'You won : ',bet

        elif paire == 0: # else if number is odd, player loose his money
            print 'Your number is odd !'
            wallet = wallet - bet

    elif pick == bille: # if players number equal to random integer
        print 'J A C K P O T !!!'
        bet = bet * 3
        wallet = wallet + bet # then bet * 3 and add to players wallet
        print 'You won : ',bet

    if wallet < 0: # if players wallet empty then end of the game
        print '[!] You have no money left !'
        print '[!] You are out of the game !'
        keep = False # loop stop if keep isnt true
        restart = 0

    elif wallet > 0: # if player has no money left in his wallet
        restart = raw_input('Keep playing [o/n] ? ')

        try:
            str(restart)
        except TypeError:
            print '[!] Wrong answer !'

        while type(restart) != str:
            print '[!] Wrong answer !'
                        restart = raw_input('Keep playing [o/n] ? ')
            str(restart)

        if type(restart) == str:

            if restart == 'o':
                restart = 1

            elif restart == 'n':
                restart = 0
                Keep = False

        elif type(restart) != str:
            print '[!] Wrong answer !'





print '[!] Bye...' # just a test
从数学导入单元
从随机输入范围
打印“==============================”
打印“轮盘赌v2”
打印“==============================”
#初始化变量
下注=0
拾取=0
重新启动=1
paire=0
保持不变
bille=randrange(50)
wallet=raw_input(钱包里有什么?)#询问玩家这节课能拿到多少钱
尝试:
wallet=int(wallet)#将wallet设置为整数,同时测试用户是否写入了数字
除值错误外:
打印“[!]必须是数字”#如果不是数字,则为钱包设置默认值
打印“[!]默认值设置为50”
钱包=50#50是我们的默认值
保留并重新启动时:#如果保留为真并重新启动等于1,则继续播放
打印“钱包:”,钱包“$”#显示我们还剩下多少钱
bet=原始输入(“下注:”)
当类型(下注)!=int:#同上,检查下注是否为整数
尝试:
下注=整数(下注)
除值错误外:
打印“[!]它必须是一个数字”
bet=原始输入(“下注:”)#如果没有,请再次询问
while bet>wallet:#如果没有足够的钱,则取消下注
打印“[!]你没有”,打赌“钱包里有美元!”
打印“您的钱包:”,钱包
bet=原始输入(“下注:”)
pick=原始输入('选择1-50之间的数字:')
while type(拾取)!=int:#同上
尝试:
pick=int(pick)
除值错误外:
打印“[!]它必须是一个数字”
pick=原始输入('选择1-50之间的数字:')
打印“…”
打印“…”
打印“…”
打印“……”
如果选择!=bille:#如果玩家数不同于随机整数
paire=选择%2#检查玩家编号是否为配对
如果paire==1:#如果是它的配对,则将bet+bet/2添加到他的钱包中
打印“您的号码是成对的!”
下注=下注+下注/2
ceil(打赌)#我们不想要浮点数
钱包=钱包+赌注
打印“您赢了:”,打赌
elif paire==0:#否则,若数字为奇数,则玩家将失去他的钱
打印“你的号码是奇数!”
钱包=钱包-打赌
elif pick==bille:#如果玩家数等于随机整数
打印“jacckpot!!!”
打赌=打赌*3
钱包=钱包+下注#然后下注*3并添加到玩家钱包
打印“您赢了:”,打赌
如果钱包<0:#如果玩家钱包空了,则游戏结束
打印“[!]您没有钱了!”
打印“[!]你退出游戏!”
keep=False#如果keep不为true,则循环停止
重新启动=0
elif wallet>0:#如果玩家的钱包中没有剩余的钱
重新启动=原始输入(“继续播放[o/n]?”)
尝试:
str(重新启动)
除类型错误外:
打印“[!]错误答案!”
while type(重新启动)!=str:
打印“[!]错误答案!”
重新启动=原始输入(“继续播放[o/n]?”)
str(重新启动)
如果类型(重新启动)=str:
如果重新启动==“o”:
重新启动=1
elif restart==“n”:
重新启动=0
保留=错误
elif类型(重新启动)!=str:
打印“[!]错误答案!”
打印“[!]再见…”只是一个测试

您第二次要求下注,但您忘记将其放入
int
中,然后进行比较并循环(
在下注时>钱包

问题是,在使用标准CPython解释器的Python 2中,这种比较总是
True
,因为比较不同类型的对象只会比较类型(和
str>int
);请参阅有关此实现的详细信息


然而,Python 3中不再是这种情况,它会给出一个
TypeError:unorderable types:str()>int()
异常,这会使问题变得更清楚。

您再次要求
bet
,即使它被正确解析为
int
。与
选择相同
哦,哈哈,我想我有点太累了,这是一个愚蠢的错误哈哈。。现在我将更加关注表格!谢谢你的观察。尽管有一些小的修正:虽然OP确实在使用Python2,但在Python3中,比较
int
str
将给出
类型错误,因此它并不总是
正确的。