一场有两名玩家的比赛。在这个游戏中,每个玩家轮流从三个袋子中的一个中移除1到5个物体: A,B,C。移除最后一个物体的玩家赢得比赛。以下是规则:
·游戏开始时,每个包包含10个物品。
·玩家一次可以从一个袋子中移除物体。
·玩家不能选择移除0对象。对象的数量必须介于1到5之间(包括在内)。
·游戏结束时,所有的袋子都是空的。
·当前玩家必须先选择包(A或B或C),然后选择必须从该包中移除的对象的数量。
·您还必须检查用户的输入是否有效。这是一个有效的包(A或B或C)吗?它是一个有效的数字(介于1到5之间)吗?还有,包里有足够的物品吗?如果没有满足这些条件中的任何一项,请再次请求用户输入。(您需要使用循环来完成此操作)
示例:
A、B、C
10,10,10 Player1从B接收5个对象。
10,5,10,Player2从C.
10 5 5 Player1从A.
7,5,5 Player2从B中获取3个对象。
7,2,5 Player1从C.
7~2 0 Player2从A.
5~2 0 Player1从A.
4,2,0 Player2从A.
1 2 0 Player1从B获取1个对象。
1 10 0 Player2从B获取1个对象。
1 0 0 Player1从A.
*注意:*我只能使用循环,或者如果条件没有列表或其他条件
我已经走了这么远:
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!")发布于 2013-11-11 23:47:14
你不是这样检查物品的。这一行:
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:要正确循环,需要在条件为false时执行continue:
else:
selected_bag=input("Not a valid bag choose again:")
continue一个简单的else语句。
else:老实说,您的代码有很多问题。@abarnert比我解释的要好得多。
发布于 2013-11-11 23:55:56
这一行有两个大问题:
if selected_bag == A or B or C:正如艾基德已经解释过的,第一个问题是or不是那样工作的,您需要in。
第二个问题是,您希望检查用户是否输入了任何字符串"A"、"B"和"C",而不是他是否输入了A、B和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…需要是…
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))https://stackoverflow.com/questions/19918224
复制相似问题