在参数(x)的函数内更改全局变量的值:

时间:2016-01-16 00:19:14

标签: python function variables python-3.x global-variables

def check(x):
   global username
   while True: 
       if x.isalpha(): 
          break 
       else:
            x = input("Please type your name with letters only!: ")
            continue

username = input("? ")
check(username)
print (username)

我对此代码有疑问,如果第一个用户输入不是alpha,程序将再次询问用户的输入,直到用户仅使用字母输入正确的输入。但是当我在那之后打印(username)变量中的值时,即使输入错误,我也会得到第一个用户的输入,并且他已经在函数check()中更改了它:我试图使用很多解决方案,但它没有用。我认为这是一个与全局变量相关的问题,尽管我已将(username)变量设置为全局变量。如果有人对此问题有任何解决方案,请帮助我。

2 个答案:

答案 0 :(得分:0)

是的,因为一旦你进入循环,你就将变量x设置为输入......但是x永远不会被重新访问。订正:

def check():
   global username
   while True: 
       if username.isalpha(): 
          break 
       else:
            username = input("Please type your name with letters only!: ")
username = input("? ")
check()
print (username)

这也是一个不太复杂的例子,这里不需要全局变量:

def get_username():
    username = input("? ")
    while not username.isalpha():
        username = input("Please type your name with letters only!: ")
    return username
print (get_username())

除非这是专门用于全局的练习,否则我会不惜一切代价避免它们。你应该总是使用变量的最小必要范围,这是很好的卫生。

响应您的评论的更广泛的输入功能:

def get_input(inputName):
    '''Takes the name of the input value and requests it from the user, only
        allowing alpha characters.'''
    user_input = input("Please enter your {} ".format(inputName))
    while not user_input.isalpha():
        user_input = input("Please type your {} with letters only!: ".
            format(inputName))
    return user_input
username = get_input("Username")
surname = get_input("Last Name")
print(username, surname)

答案 1 :(得分:0)

问题是你是按值传递“用户名”,但是把它视为你通过引用传递它。

这是我的代码。 :)我希望它有所帮助。 (我使用Python 2.7编写了这个,但它应该适用于Python 3)

def check(x):
    while x.isalpha() is not True: 
        x = raw_input("Please type your name with letters only!: ")
    return x

username = raw_input("Please type your name: ")
username = check(username)
print ("Your name is: " + username)

如果您绝对需要使用全局变量,则无需将其传递给函数。

def check():
    global username
    while username.isalpha() is not True: 
        username = raw_input("Please type your name with letters only!: ")

username = raw_input("Please type your name: ")
check()
print ("Your name is: " + username)