简体   繁体   English

在if语句中调用函数

[英]Calling function inside if statement

im trying to call function inside if statement but it does not work.我试图在 if 语句中调用函数,但它不起作用。 This is one of my first attempts in using Python.这是我使用 Python 的第一次尝试。 What am I doing wrong?我做错了什么?

#!/usr/bin/python


menu = raw_input ("Hello, please choose form following options (1,2,3) and press enter:\n"
    "Option 1\n"
    "Option 2\n"
    "Option 3\n")

if menu == str("1"):
    savinginfile = raw_input ("Please, state your name: ")
    option1()
elif menu == str("2"):
    print ("Option 2")
elif menu == str("3"):
    print ("Option 3")

def option1():
    test = open ("test.txt", "rw")
    test.write(savinginfile)
    print ("Option 1 used")
    test.close()

Would recommend that you pass savinginfile as a parameter:建议您将savinginfile作为参数传递:

def option1(savinginfile):
    test = open ("test.txt", "rw")
    test.write(savinginfile)
    print ("Option 1 used")
    test.close()

You need to define option1 before calling.您需要在调用之前定义option1 Python interprets from top to bottom. Python 从上到下解释。

You need to define your function before you try to call it.在尝试调用它之前,您需要定义您的函数。 Just put def option1(): #and all that code below it above your if statements.只需将def option1(): #and all that code below it放在 if 语句上方即可。

It's also bad practice to throw around too many global variables.抛出太多全局变量也是不好的做法。 You shouldn't use savinginfile the way you are -- instead, pass it to the function as a parameter and let the function operate in its own scope.您不应该savinginfile现在这样使用savinginfile —— 而是将它作为参数传递给函数,并让函数在它自己的范围内运行。 You'll need to pass the function the name of the file to use before it's able to use savinginfile .您需要将要使用的文件名传递给函数,然后才能使用savinginfile Try instead:试试吧:

def option1(whattosaveinfile):
  test = open("test.txt","a+") #probably better to use a with statement -- I'll comment below.
  test.write(whattosaveinfile) #note that you use the parameter name, not the var you pass to it
  print("Option 1 used")
  test.close()

#that with statement works better for file-like objects because it automatically
#catches and handles any errors that occur, leaving you with a closed object.
#it's also a little prettier :) Use it like this:
#
# with open("test.txt","a+") as f:
#   f.write(whattosaveinfile)
# print("Option 1 used")
#
#note that you didn't have to call f.close(), because the with block does that for you
#if you'd like to know more, look up the docs for contextlib

if menu == "1": #no reason to turn this to a string -- you've already defined it by such by enclosing it in quotes
  savinginfile = raw_input("Please state your name: ")
  option1(savinginfile) #putting the var in the parens will pass it to the function as a parameter.

elif menu == "2": #etc
#etc
#etc

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM