【问题标题】:"While not in" error - python“虽然不在”错误 - python
【发布时间】:2014-11-22 16:10:48
【问题描述】:

在本例中,我们将PH[0] 设置为'Ten of Hearts',将guess 设置为'Ten'

列表“PH”代表Go Fish 纸牌游戏中玩家的手牌。当用户猜牌时,他们必须猜出与他们手中的牌相对应的牌。我写了这段代码,如果用户输入了一个无效的猜测(如果猜测不在PH中,则会再次提示他们输入新的猜测)

我觉得数组[guess1, guess2, guess3, guess4] 中的变量有问题,但我不太确定。

当代码执行时,循环会一直持续下去。我需要能够跳出循环以返回猜测值,以便将其输入到下一个函数中。

如果有人可以帮我解决我遇到的问题。

guess = str(raw_input("Make a guess : "))

guess11 = guess, 'of Hearts'
guess1 = " ".join(guess11)

guess22 = guess, 'of Diamonds'
guess2 = " ".join(guess22)

guess33 = guess, 'of Clubs'
guess3 = " ".join(guess33)

guess44 = guess, 'of Spades'
guess4 = " ".join(guess44)

while PH[0] not in [guess1, guess2, guess3, guess4] :
    print "You do not have a card like that in your hand."
    guess = str(raw_input("Make another guess : "))

    guess11 = guess, 'of Hearts'
    guess1 = " ".join(guess11)

    guess22 = guess, 'of Diamonds'
    guess2 = " ".join(guess22)

    guess33 = guess, 'of Clubs'
    guess3 = " ".join(guess33)

    guess44 = guess, 'of Spades'
    guess4 = " ".join(guess44)

return guess

【问题讨论】:

  • 那段代码伤了我的眼睛!了解如何编写 DRY 代码。它会让你的生活变得更轻松。
  • 当我将PH[0] 设置为'Ten of Hearts'guess 设置为'Ten' 时,它适用于我。循环正确退出。
  • raw_input 已经是一个字符串
  • @Basic 我一定会研究并学习如何使我的代码更好。我才刚刚开始和学习。感谢您的帮助

标签: python loops variables while-loop


【解决方案1】:

你只是在测试玩家手中的第一张牌是否是他猜到的。您需要测试手中的每张牌:

while not any(guess in PH for guess in [guess1, guess2, guess3, guess4]):

这会取出每张猜出的牌,并依次测试该牌与手牌。 any() 在找到匹配项时停止循环猜测。

一个更好的主意仍然是使用集合交集:

guesses = {guess1, guess2, guess3, guess4}
while not guesses.intersection(PH):
    # ask for new guesses

您希望避免输入两次“要求猜测”代码;以while True 开始循环,并在做出正确猜测后使用break 结束循环:

suits = ('Hearts', 'Diamonds', 'Clubs', 'Spades')

while True:
    guess = raw_input("Make a guess:")
    guesses = {'{} of {}'.format(guess, suit) for suit in suits}
    if guesses.intersection(PH):
        # correct guess!
        break
    print "You do not have a card like that in your hand."

我使用集合推导在循环中构建猜测。

【讨论】:

  • @EvanCooper: 但是你的while 循环直到PH[0] 中有匹配的卡片才会结束。那些其他部分将永远无法到达。
  • 好的,我明白了。非常感谢
猜你喜欢
  • 2017-04-18
  • 2019-05-27
  • 2014-07-06
  • 2013-08-22
  • 2019-08-26
  • 2019-08-19
  • 1970-01-01
  • 2015-09-10
  • 1970-01-01
相关资源
最近更新 更多