Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.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_Loops - Fatal编程技术网

Python 玩循环

Python 玩循环,python,loops,Python,Loops,我正试图弄清楚如何在Python中使用循环,我需要一些帮助。我写的代码只是我在玩的东西。这不是任务或类似的事情 我想弄明白的是,如何循环程序,让它让用户输入一些东西来重新开始提问。这就是我到目前为止所做的: def monkeys(): apes = "This is not a monkey!" monkey_yes = "This is a monkey!" is_it_a_monkey = apes + monkey_yes monk

我正试图弄清楚如何在Python中使用循环,我需要一些帮助。我写的代码只是我在玩的东西。这不是任务或类似的事情

我想弄明白的是,如何循环程序,让它让用户输入一些东西来重新开始提问。这就是我到目前为止所做的:

def monkeys():
  apes = "This is not a monkey!"
  monkey_yes = "This is a monkey!"
  is_it_a_monkey = apes + monkey_yes
  monkey_question = input("Type in Gorilla, Chimp or Macaque and make sure they're capitalized: ")

  for question in is_it_a_monkey:
    if monkey_question == 'Gorilla' or monkey_question == "Chimp":
      print(apes)
      continue
    else:
      print(monkey_yes)
      break

def main():
  while True:

    if again not in {"y","n"}:
      print("Please enter valid input")
    elif again == "n":
      return "Good bye!"
    elif again == "y":
      return monkeys()

monkeys()
我正试图让
main()
来做大部分的工作,因为这是我老师在我们的作业中想要的。
main()
下的所有内容都是我复制的,以查看是否有效,但它只返回以下内容:

Type in Gorilla, Chimp or Macaque and make sure they're capitalized: Gorilla
This is not a monkey!
This is not a monkey!
This is not a monkey!
This is not a monkey!

它比4行长得多,但这不是我要找的。

首先,你可以调用
monkeys()
,但是你应该调用
main()
,因为这就是循环所在。其次,
return
会导致函数停止执行,并在调用它的地方继续执行。要继续循环,请删除
main()
中的
return
s


要更好地了解代码的工作方式,请阅读有关调试的内容。它显示了一些提示,让您可以一步一步地了解代码在做什么。

您应该改用此代码,它(正如许多人所指出的,包括上面的@code peedient)按您的意愿调用函数
main()
@《代码学徒》的答案还包括了一个很好的解释,解释了为什么这样做有效。此代码几乎与上面的代码完全相同;只有最后一行不同:

def monkeys():
  apes = "This is not a monkey!"
  monkey_yes = "This is a monkey!"
  is_it_a_monkey = apes + monkey_yes
  monkey_question = input("Type in Gorilla, Chimp or Macaque and make sure they're capitalized: ")

  for question in is_it_a_monkey:
    if monkey_question == 'Gorilla' or monkey_question == "Chimp":
      print(apes)
      continue
    else:
      print(monkey_yes)
      break

def main():
  while True:

    if again not in {"y","n"}:
      print("Please enter valid input")
    elif again == "n":
      return "Good bye!"
    elif again == "y":
      return monkeys()

main()

我提交此答案的原因是要指出,尽管调用了
main()
,您仍将立即遇到另一个问题。您在
main()
中再次引用变量
,但从一开始就不会再次为
赋值(如果运行此代码,您可能会看到一个错误,其形式为“NameError:未定义全局名称”“再次”。)。解决下一个错误超出了您的问题范围;如果您愿意,有很多方法可以重新编写此代码以适应

我发现这里有几个问题

首先,您要连接两个字符串

    apes = "This is not a monkey!"
    monkey_yes = "This is a monkey!"
    is_it_a_monkey = apes + monkey_yes
当进入for循环时,解释器将查看连接字符串的每个字符。这就是为什么您要输出38行“这不是猴子!”对于您要做的事情,您不需要For循环。请尝试以下方法:

    def monkeys():
        apes = "This is not a monkey!"
        monkey_yes = "This is a monkey!"
        monkey_question = input("Type in Gorilla, Chimp or Macaque and make sure they're capitalized: ")

        if monkey_question == 'Gorilla' or monkey_question == "Chimp":
            print(apes)
        else:
            print(monkey_yes)
我看到的下一个问题是根本不调用main函数。调用main()而不是在代码底部调用moneys()

下一个问题是使用“while True:”。如果要使用布尔值作为while条件,请确保在代码中加入逻辑以更改该条件。将其更改为“False”应该是退出main语句的内容,而不是返回语句。您的main()最好是这样开始:

def main():
    keep_going = True
    while keep_going:
        monkeys()
    monkeys()
    again = input("Would you like to try again? (y/n) ")
注意,应该首先调用monkeys()函数,否则程序启动时没有人知道输入什么。您还需要代码询问他们是否希望继续运行该程序。在调用monkey()之后,执行以下操作:

def main():
    keep_going = True
    while keep_going:
        monkeys()
    monkeys()
    again = input("Would you like to try again? (y/n) ")
下一个问题是return语句的使用。而不是这样做:

    elif again == "n":
        return "Good bye!"
做这个

    elif again == "n":
        print("Good bye!")
        keep_going = False
最后,你有“如果不是在{“y”,“n”}:”。您必须为“再次”赋值,否则会出现更多错误。如果你使用上面的例子,它应该满足你的需要


继续努力,不要失去希望。您正在接近了解它。

欢迎使用SO!我看不到这里调用了
main
。感谢您使您的回答易于理解。这确实消除了我对循环的很多困惑。不客气。如果这回答了你的问题,请接受它作为你的答案。祝你好运,继续编码!