【问题标题】:How to get python to go back to start of loop and not use random?如何让python回到循环开始而不使用随机?
【发布时间】:2015-12-16 14:19:59
【问题描述】:

我对 python 有点陌生,给自己一个任务,我想要一个数字猜谜游戏,让你猜四个数字,程序会不断告诉你猜对了多少个数字,直到你猜出完整列表数字。

running = True
import random
def compareLists(a, b):
    return list(set(a) & set(b))
def start():
    rNums =  random.sample(range(10), 4)
    gNums = []

    print("Get ready to guess 4 numbers!")
    for i in range(0, 4):
        x = int(input("Guess: "))
        gNums.append(x)

    print("You guessed: ", gNums)
    comparison = len(compareLists(rNums, gNums))

    while gNums and rNums:
        if gNums != rNums:
            print("You guessed " + str(comparison) + " numbers right, keep guessing!")
            break
        elif gNums == rNums:
            print("What amazing luck!")
while running:
    start()

问题是,当我使用 break 时会创建一个包含 4 个数字的新列表,我希望 python 只是回到循环的开头而不是创建一个全新的列表!

【问题讨论】:

    标签: python loops random numbers break


    【解决方案1】:

    您想使用continue。用一个玩具例子试试:

    i = 0;
    while i < 10:
       i += 1
       if i % 2 == 0:
          continue
       print i
    

    输出:

    1
    3
    5
    7
    9
    

    【讨论】:

    • 您能详细说明一下吗?无法将我的头包裹起来
    【解决方案2】:

    你可以放

    rNums =  random.sample(range(10), 4)
    

    在循环之外并通过 rNums 开始。这样,您将在列表中拥有相同的四个数字。希望这会有所帮助

    【讨论】:

      【解决方案3】:

      为了尽量减少代码中发生的循环数量,我可能会先将随机数放入字典中。

      类似这样的事情(可能是更有效的方法......但这是我脑海中突然出现的第一件事):

      from collections import Counter
      d = Counter(random.sample(range(10), 4))
      

      开始您的 while 循环,并不断要求用户猜测。每次他们猜对了,就执行这个操作:

      d.pop(correctly_guessed_num)
      

      一旦你的字典是空的,你就完成了并且你打破了循环。

      EDIT 在实施中添加我的快速测试。没有完全考虑清楚,可能是一些打破这一点的边缘案例......但这是整体想法。希望对您有所帮助。

      from collections import Counter
      import random
      
      d = Counter(random.sample(range(1, 10), 4))
      size = len(d) - 1
      
      while True:
          x = int(input("Guess: "))
      
          if size == 0:
              print("you guessed them all, way to go")
              break
      
          if x not in d:
              print("keep going buddy")
              continue
          else:
              d.pop(x)
              size -= 1
              print("A right guess")
      

      【讨论】:

      • 我很少使用字典,但还是尝试了您的解决方案,我很可能没有做对,但感谢您的回答
      • 我会在回复中提供一些代码供您帮助。如果您有任何其他问题,请告诉我。
      猜你喜欢
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      • 2019-08-27
      • 2015-09-03
      • 2011-08-09
      • 2018-08-22
      • 1970-01-01
      • 2016-12-29
      相关资源
      最近更新 更多