一场有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!")
答案 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}},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
......和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!")