Python Basic If语句

时间:2016-12-21 09:53:38

标签: python function if-statement

def main_loop():

  print "where are you from?"
  loc = raw_input()

  print "so your from " + loc + "?"
  ans = raw_input()


def isittrue():
  if ans == "yes":
    print "We all love " + loc
  else:
    print "Where did you say you were from again?"


main_loop()    
isittrue()

我试图创建一个脚本,提示用户输入他们的位置,要求他们确认位置,如果确认位置然后显示消息,否则再次启动脚本。

但是不断收到以下错误: NameError:name' ans'未在main.py

的第18行定义

非常感谢任何建议。

3 个答案:

答案 0 :(得分:1)

您的问题是范围。变量名称是它们被调用的函数的本地名称。

如果您在ans内引用isittrue(),那么Python - 以及大多数语言 - 都不知道您在另一个函数中引用变量。他们只能访问封闭范围内的变量,在本例中是全局范围。

最简单的方法是将isittrue 移到 mainloop()内,使封闭范围变为mainloop()isittrue()的范围可以访问mainloop

中定义的变量
def main_loop():

    print "where are you from?"
    loc = raw_input()

    print "so your from " + loc + "?"
    ans = raw_input()


    def isittrue():
        if ans == "yes":
            print "We all love " + loc
        else:
            print "Where did you say you were from again?"

    isittrue()


main_loop()

答案 1 :(得分:1)

您的 import java.io.IOException; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLReaderFactory; public class Main { public static void main(String[] args) throws SAXException, IOException{ XMLReader p = XMLReaderFactory.createXMLReader(); p.setContentHandler(new handler()); p.parse("test1.xml"); } ---------------------------------------- import org.xml.sax.helpers.DefaultHandler; public class handler extends DefaultHandler { @Override public void startElement(String SpacenameURI, String localName, String qName, Attributes attrs) { System.out.println("qname = " + qName); String node = qName; if (attrs != null) { for (int i = 0; i < attrs.getLength(); i++) { //nous récupérons le nom de l'attribut String aname = attrs.getLocalName(i); //Et nous affichons sa valeur System.out.println("Attribut " + aname + " valeur : " + attrs.getValue(i)); } } } } 变量是函数main_loop()的本地变量,因此在ans函数

中无法访问它

你可以通过在isittrue函数的顶部添加以下来使ans变量全局变量,然后可以从main_loop函数获取ans。 但是,不建议将全局变量用作全局变量是邪恶的

isittrue

或更好的方法是使用def main_loop(): global ans, loc print "where are you from?" loc = raw_input() print "so your from " + loc + "?" ans = raw_input() return函数返回ans

main_loop

答案 2 :(得分:0)

我编辑了你的代码,这很有效:

def main_loop():

  print ("where are you from?")
  loc = input()

  print ("so your from " + loc + "?")
  ans = input()

  isittrue(ans,loc)


def isittrue(ans,loc):
  if ans == "yes":
    print ("We all love " , loc)
  else:
    print ("Where did you say you were from again?")


main_loop()    

你只能使用main_loop()进行调用,并在main_loop中使用isittrue(),传递两个字符串。另外,使用input(),raw_input()&#34;是否过时&#34;