与2人游戏

时间:2013-11-11 23:42:32

标签: python loops python-3.x nested-loops

一场有2名球员的比赛。在这个游戏中,每个玩家轮流并从三个行李中的一个中移除1到5个物体:A,B,C。移除最后一个物体的玩家赢得游戏。以下是规则:
•每个包在游戏开始时包含10个对象。
•玩家可以一次从一个包中移除物品。
•玩家无法选择删除0个对象。对象的数量必须在1到5之间(包括1和5)。
•当所有行李都空了时游戏结束。

•当前玩家必须首先选择行李(A或B或C),然后选择必须从该行李中移除的物品数量。
•您还必须检查用户的输入是否有效。它是一个有效的包(A或B或C)?它是一个有效数字(1到5之间)?另外,包里有足够的物品吗?如果不满足任何这些条件,请再次询问用户输入。 (你需要使用循环来做到这一点)
例如:
A B C
10 10 10 Player1从B中获取5个物体 10 5 10 Player2从C中获取5个物体 10 5 5 Player1从A中获取3个物体 7 5 5 Player2从B中获取3个物体 7 2 5 Player1从C中获取5个物体 7 2 0 Player2从A中获取2个物体 5 2 0 Player1从A中获取1个物体 4 2 0 Player2从A中获取3个物体 1 2 0 Player1从B中获取1个对象 1 1 0 Player2从B中获取1个对象 1 0 0 Player1从A中获取1个物体。

* 注意: *我必须只使用循环或条件没有列表或其他

我到目前为止:

A=5
B=5
C=5
total_objects=15
Player1=0
Player2=0

while total_objects>0:
    selected_bag=input("Choose the bag:")
    if selected_bag == A or B or C:
        print("Valid bag")
    else:
        selected_bag=input("Not a valid bag choose again:")


    removed=int(input("How many objects do you want to remove?"))
    if removed>5 or removed<1:
        int(input("You must enter between 1 and 5:"))

    elif removed == 1 or 2 or 3 or 4 or 5:
        if selected_bag == A:
            A-=removed
        if selected_bag == B:
            B-=removed
        if selected_bag == C:
            C-=removed

    if A>0:
        print("There are",A,"objects left")
    elif B>0:
        print("There are",B,"objects left")
    elif C>0:
        print("There are",C,"objects left")


print("You win!")

2 个答案:

答案 0 :(得分:3)

这不是你检查物品的方式。这一行:

if selected_bag == A or B or C:

不按照您的想法行事。它会评估A or B or C,然后将其与您的selected_bag进行比较。

请改用in运算符。此外,您需要检查的是字符串,而不是变量:

if selected in ('A', 'B', 'C'):

正如abarnert所提到的,你还需要改变其他人。

另外,请更改此行:

elif removed == 1 or 2 or 3 or 4 or 5:

要正确循环,当条件为假时,您需要continue

else:
    selected_bag=input("Not a valid bag choose again:")
    continue

简单的else声明。

else:

说实话,您的代码存在很多问题。 @abarnert比我能解释得更好。

答案 1 :(得分:2)

这一行存在两个大问题:

if selected_bag == A or B or C:

正如aikid已经解释的那样,第一个问题是or不起作用;你想要in


第二个问题是,您要检查用户是否输入了任何字符串"A""B""C",而不是他是否输入了{{ {1}},AB变量恰好是。

所以,你想要的是:

C

您再次重复这两个问题,需要再次修复它们:

if selected_bag in ('A', 'B', 'C'):

......需要......

elif removed == 1 or 2 or 3 or 4 or 5:

......或者更好......

elif removed in (1, 2, 3, 4, 5):

然后,在那之内:

elif 1 <= removed <= 5:

......需要......

    if selected_bag == A:
        A-=removed

......和B和C相同。


最后,这部分:

    if selected_bag == "A":
        A-=removed

...没有做任何有用的事情。它要求用户输入另一个号码,将结果转换为if removed>5 or removed<1: int(input("You must enter between 1 and 5:")) ,然后忽略它并直至int部分。如果你想在用户给出有效答案之前继续询问,你需要某种循环。当然,您必须将该值存储在某处以使其有用。例如:

if A>0:

你和removed=int(input("How many objects do you want to remove?")) while removed>5 or removed<1: removed = int(input("You must enter between 1 and 5:")) 输入部分有一个非常相似的错误。


如果你想要处理两个玩家,你需要跟踪目前的回合。一种简单的方法是存储selected_bag变量,并在每次循环时更新它。例如:

current_player

如果您想“翻转硬币”来决定谁先行,您可以将第一行更改为:

current_player = 2

while total_objects>0:
    current_player = 2 if current_player == 1 else 1
    print("Player", current_player, " is now up.")

    # all the existing code

print('Player", current_player, "wins!")