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)变量设置为全局变量。如果有人对此问题有任何解决方案,请帮助我。
答案 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)