0

好的,所以我正在制作轮盘赌游戏。旋转器落在的随机数称为“数字”。这是一个非常基本和简单的代码,但它似乎不适用于我。目前你要么选择一个特定的数字,要么选择 1 - 18。我尝试了很多不同的方法,但仍然没有运气。这是我的代码。如果有人知道问题是什么,请告诉我。谢谢:

numbers = ['1', '2', '3'.......'35', '36']

figure = choice(numbers)

d = textinput("Pick bet", "")

if int(figure) > 18 and d == '1-18' or '1 - 18' or '1- 18' or '1 -18':
    pu()
    goto(100,100)
    write("Loser", font = ("Comic Sans MS", 30, "bold"))

elif int(figure) < 19 and d == '1-18' or '1 - 18' or '1- 18' or '1 -18':
    pu()
    goto(10,100)
    write("Well done", font = ("Comic Sans MS", 30, "bold"))


elif int(d) in range(36) and int(figure) == int(d):
    pu()
    goto(100,100)
    write("Well done", font = ("Comic Sans MS", 30, "bold"))

elif int(d) in range(36) and int(figure) != int(d):
    pu()
    goto(100,100)
    write("Loser", font = ("Comic Sans MS", 30, "bold"))
4

2 回答 2

3

看着:

if int(figure) > 18 and d == '1-18' or '1 - 18' or '1- 18' or '1 -18':

在这里,您有几个始终评估为 True 的语句;每个'1 - 18' or '1- 18' or '1 -18'都是一个非空字符串。int(figure)有什么价值或有什么并不重要d。这意味着 python 将该行视为if something or True.

您想要做的是使用in运算符来测试您d是否是选项列表的一部分:

if int(figure) > 18 and d in ('1-18', '1 - 18', '1- 18', '1 -18'):

同样的问题也适用于你的elif陈述。

于 2012-07-04T12:55:52.897 回答
1

问题是 Python 认为如下:

if (int(figure) > 18 and d == '1-18') or '1 - 18' or '1- 18' ...

布尔运算符的优先级低于比较运算符,因此代码没有按照您的意图执行。相反,末尾的字符串每个都被解释为的操作数,or因此被解释为布尔值,在这种情况下总是True如此。

您可以通过以下方式重写它:

if int(figure) > 18 and d in ['1-18', '1 - 18', '1- 18', '1 -18']

甚至可能从字符串中删除空格,因此您只需要与单个值进行比较:

if int(figure) > 18 and d.replace(' ', '') == '1-18'
于 2012-07-04T12:57:18.547 回答