2人游戏

2024-03-28 12:38:18 发布

您现在位置:Python中文网/ 问答频道 /正文

有两个玩家的游戏。在这个游戏中,每个玩家轮流从三个袋子中取出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播放器2从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 10 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!")

Tags: or对象游戏inputifobjects玩家bag
2条回答

这条生产线有两大问题:

if selected_bag == A or B or C:

正如aikid已经解释过的,第一个问题是or不是那样工作的;您需要in。在


第二个问题是要检查用户是否输入了字符串"A""B"和{},而不是检查他是否输入了ABC变量的值。在

所以,你想要的是:

^{pr2}$

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

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

…需要

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

你不是这样检查物品的。这条线:

if selected_bag == A or B or C:

不像你想的那样。它计算A or B or C,然后将其与您的selected_bag进行比较。在

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

^{pr2}$

正如阿巴内特提到的,你还需要改变其他人。在

同时,更改以下行:

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

为了正确地循环,当条件为false时,您需要continue

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

一个简单的else语句。在

else:

老实说,你的代码有很多问题。@阿巴内特解释得比我好得多。在

相关问题 更多 >