0

有 2 名玩家的游戏。在这个游戏中,每个玩家轮流从三个袋子之一中取出 1 到 5 个物品:A、B、C。取出最后一个物品的玩家获胜。以下是规则:
• 每个袋子在游戏开始时包含 10 个物品。
• 玩家可以一次从一个袋子中取出物品。
• 玩家不能选择移除 0 个对象。对象的数量必须在 1 到 5(包括)之间。
• 当所有袋子都空了时,游戏结束。

•当前玩家必须首先选择袋子(A 或 B 或 C),然后选择必须从该袋子中取出的对象的数量。
• 您还必须检查用户的输入是否有效。它是有效的包(A 或 B 或 C)吗?它是一个有效的数字(1 到 5 之间)吗?还有,包里的东西够吗?如果其中任何一个条件不满足,请再次要求用户输入。(您需要使用循环来执行此操作)
示例:
ABC
10 10 10 Player1 从 B 获取 5 个对象。
10 5 10 Player2 从 C 获取 5 个对象。
10 5 5 Player1 从 A 获取 3 个对象。
7 5 5 Player2从 A 获取 3 个对象来自 B 的对象。
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 个对象。

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

我已经做到了这一点:

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!")
4

2 回答 2

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 比我能解释得更好。

于 2013-11-11T23:47:14.487 回答
2

这条线有两个大问题:

if selected_bag == A or B or C:

第一个问题,正如 aikid 已经解释的那样,是or行不通的。你想要in


第二个问题是您要检查用户是否输入了任何字符串"A""B""C",而不是检查他是否输入了ABC变量的值。

所以,你想要的是:

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

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

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

……需要……</p>

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

……或者更好……</p>

elif 1 <= removed <= 5:

然后,在其中:

    if selected_bag == A:
        A-=removed

……需要……</p>

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

... B 和 C 也是如此。


最后,这部分:

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!")

如果您想“掷硬币”来决定谁先走,您只需将第一行更改为:

import random
current_player = random.choice((1, 2))
于 2013-11-11T23:55:56.927 回答