我正在尝试使用while循环在两个用户之间交替轮换,但是我的代码被卡在“ while first_player_move is True:”循环中。我该如何解决这个问题,以使我的while循环在两个玩家的回合中都能通过。
我尝试在各个位置添加“ continue”和“ break”,并尝试将布尔值切换为最大值,但似乎无济于事。
word_fragment = ''
first_player_move = True
while True:
while first_player_move is True:
added_letter = input('Which single letter would you like to add to the fragment? ')
word_fragment += added_letter
print('The current word fragment is: ' + word_fragment)
print('It is now ' + player2_name + "'s turn.")
if word_fragment in open('data.txt').read() and len(word_fragment) > 3:
print('I am sorry, you just lost. ' + player2_name + ' is the winner!')
# call a function to end the game
break
while first_player_move is False:
added_letter = input('Which single letter would you like to add to the fragment? ')
word_fragment += added_letter
print('The current word fragment is: ' + word_fragment)
print('It is now ' + player1_name + "'s turn.")
if word_fragment in open('data.txt').read() and len(word_fragment) > 3 :
print('I am sorry, you just lost. ' + player1_name + ' is the winner!')
# call a function to end the game
break
我希望输出结果贯穿每个玩家回合并最终打印“现在是“下一个玩家回合””,但是它将继续为下一玩家回合打印相同的名称,这告诉我代码被困在两个while循环的第一个循环中。
答案 0 :(得分:0)
由于first_player_move
并未更改为false
,所以当内部循环结束时,外部循环将开始新的循环并再次调用内部循环。
顺序流为:
True
# 非常正确 first_player_move
是True
# 非常正确 先执行内部程序段,然后breaks
并进入第一个循环并重复上述步骤
进入第一个循环=> True
# 很正确
first_player_move
是True
# 是如此正确 答案 1 :(得分:0)
您永远不会在第一个循环中将first_player_move设置为false(也不要在第二个循环中将其设置为true)。
我建议将打印内容(“现在为'+ player2_name +“轮到我了。”)移到您的if中,然后进行以下修改:
if word_fragment in open('data.txt').read() and len(word_fragment) > 3:
print('I am sorry, you just lost. ' + player2_name + ' is the winner!')
# call a function to end the game
break
else:
print('It is now ' + player2_name + "'s turn.")
first_player_move = False
与第二个播放器循环类似的mod。
我还要确认您的赢/输情况。他们用我的方式阅读您的代码,如果有人负责创建data.txt中包含的片段,并且该片段大于3个字符,则他们会丢失。这是正确的吗?
如果是这样,您还可以进行一些优化以缩小data.txt的大小。去除所有不超过3个字符的单词,即可删除len(word_fragment)> 3约束。
我希望您会遇到又一个问题……如果玩家遇到一个很大的片段而仍然不匹配data.txt中的任何内容,会发生什么?
您可能要考虑创建平局条件。例如。在主“ while True”循环的最后,测试“长度”> data.txt中最长的单词,并称其为平局。
其他样式建议。玩家回合无需使用循环:
如果仅凭一小步的quick_then_test代码就能获得成功,并在每次通过时在玩家名称之间切换,则奖励积分。
答案 2 :(得分:0)
以下方法可能会更好。目的是尝试避免重复代码,而是使用变量来提供帮助:
word_fragment = ''
first_player_move = True
while True:
player_name = player1_name if first_player_move else player2_name
print(f"It is now {player_name}'s turn.")
added_letter = input(f'{player_name}: Which single letter would you like to add to the fragment? ')
word_fragment += added_letter
print('The current word fragment is: ', word_fragment)
if word_fragment in open('data.txt').read() and len(word_fragment) > 3:
print('I am sorry, you just lost. ' + player2_name + ' is the winner!')
break # call a function to end the game
first_player_move = not first_player_move
这使用player_name
来保存当前玩家的名字,并且first_player_move
在每个循环中在True
和False
之间切换。