Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何退出此程序中的循环_Python_While Loop - Fatal编程技术网

Python 如何退出此程序中的循环

Python 如何退出此程序中的循环,python,while-loop,Python,While Loop,我最近开始使用python,在这个基于文本的游戏中,我似乎无法退出while循环。我尝试将循环从while更改为for a循环和If Else循环,但我无法找到退出它的方法。我希望它退出循环,并在用户输入的数字与系统的随机数字匹配时打印下面写的文本 import random def batting (): print("You can enter a number between 1 and 10") bat = input() sys_ball = random

我最近开始使用python,在这个基于文本的游戏中,我似乎无法退出while循环。我尝试将循环从while更改为for a循环和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 ()

仔细看,您的函数递归地调用自己

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 ()

因此,停止递归调用该函数。

一旦输入“batting”或“balling”,鉴于这些函数以调用自身结束,您永远无法逃脱。在某些地方,您需要函数返回某些内容的条件,而不仅仅是再次调用自身。次要问题,bat!=sys_ball将始终为真,因为它们是两种不同的类型:bat是字符串,sys_ball是int。看起来您可能会在while循环之前额外调用击球函数和击球函数,这将导致它反复运行函数,永远不会到达while循环。如果你不明白的话,我可以再深入一点,提供一个答案。顺便说一句,欢迎光临!如果需要建议,请查看和。在将来,请提供一个测试,以便您和我们更容易调试您的代码。我说这是因为奥德维和这个问题无关,而且投球和击球实际上是一样的。非常感谢大家!代码正在运行!下次我会记住道德问题!再次非常感谢
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 ()