【问题标题】:How can I exit the loop in this program如何退出此程序中的循环
【发布时间】:2020-05-25 00:42:37
【问题描述】:

我最近开始使用 python,但我似乎无法在这个基于文本的游戏中退出 while 循环。我尝试将循环从 while 更改为 for 循环和 If-Else 循环,但我无法做到想办法退出它。当用户输入的数字与系统的随机数匹配时,我希望它退出循环并打印下面写的文本

import random
def batting ():         
  print("You can enter a number between 1 and 10")
  bat = input()
  sys_ball = random.randint(1,10)
  print (sys_ball)
  score_board = (bat + bat)
  batting ()
  while bat != sys_ball:
    batting ()

def balling ():             
  print ("Ok! Start balling with a number between 1 and 10!")
  user_ball = input()
  sys_bat = random.randint(1,2)
  print (sys_bat)
  balling ()
  while user_ball != sys_bat:
    balling ()

def oddeve ():
  print("Welcome to finger cricket! Type 1 to start batting and 2 to start balling!")
  odd_eve = input()
  if odd_eve == ('1'):
    batting ()
    print ("You win! You scored".join(score_board))
  else:
    balling()
    print ("You win! You defeated me")
oddeve ()

【问题讨论】:

  • 一旦你进入'batting'或'balling',鉴于这些函数以调用自己结束,你永远无法逃脱。在某个地方,您需要一个条件,函数在此条件下返回,而不仅仅是再次调用自身。
  • 附带问题,bat != sys_ball 始终为真,因为它们是两种不同的类型:bat 是字符串,sys_ball 是整数。
  • 看起来你可能在你的 while 循环之前额外调用了 batting() 函数和 balling() 函数,这将导致它一遍又一遍地运行函数,永远不会到达 while环形。如果这不能为您解决问题,我可以深入研究并提供答案。
  • 顺便说一句,欢迎来到 SO!如果您需要建议,请查看 tourHow to Ask。以后请提供minimal reproducible example,以便您和我们更轻松地调试您的代码。我说这个原因oddeve 与问题无关,balling 实际上与batting 相同。
  • 非常感谢大家!代码现在可以工作了!下次我会牢记道德问题!再次非常感谢

标签: python while-loop


【解决方案1】:

仔细看,你的函数递归调用自己。

def batting ():  # <- 1
  print("You can enter a number between 1 and 10")
  bat = input()
  sys_ball = random.randint(1,10)
  print (sys_ball)
  score_board = (bat + bat)
  batting ()  # <- 2
  while bat != sys_ball:
    batting ()

def balling ():  # <- 1           
  print ("Ok! Start balling with a number between 1 and 10!")
  user_ball = input()
  sys_bat = random.randint(1,2)
  print (sys_bat)
  balling ()  # <- 2
  while user_ball != sys_bat:
    balling ()

所以停止递归调用函数。

【讨论】:

    猜你喜欢
    • 2023-02-23
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    相关资源
    最近更新 更多