2016-01-16 157 views
0
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,程序將再次詢問用戶的輸入,直到用戶只使用字母輸入正確的輸入。但是,當我在(用戶名)變量中打印值後,即使輸入錯誤,他也會得到第一個用戶的輸入,並且他已經在函數check()中更改了它。我試圖使用許多解決方案,但它沒有奏效。我認爲這是一個與全局變量有關的問題,儘管我已經將(用戶名)變量設置爲全局變量。如果有人對此問題有任何解決方法,請幫助我。更改參數(x)函數內的全局變量的值:

+2

在功能末尾輸入'username = x' – tdelaney

+0

謝謝您的解答和快速回復。如果我不想爲(用戶名)變量使用其他變量的函數,該怎麼辦?例如,我想在(SureName)變量上應用相同的函數。 –

+0

可能的重複[如何通過引用傳遞變量?](http://stackoverflow.com/questions/986006/how-do-i-pass-a-variable-by-reference) – Barmar

回答

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) 
+0

感謝您的解決方案並快速回復。如果我不想爲(用戶名)變量使用其他變量的函數,該怎麼辦?例如,我想在(SureName)變量上應用相同的函數。 –

+0

謝謝。最後的解決方案是我正在尋找的解決方案。我只需要了解它是如何工作的。 –

+0

'get_input()'接受你想要的東西的名字,例如「用戶名」或「姓氏」,然後詢問用戶輸入。雖然輸入不是全部的字母,但它會一直詢問,直到它得到一個全是字母的輸入。然後它返回輸入的值。這裏不需要使用全局變量。我也改變了input()到raw_input(),這就是你想要的。 – ktbiz

0

的問題是你通過「用戶名」的價值,但對待它就像你被引用傳遞它。

這是我的代碼。 :)我希望它有幫助。

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) 

,如果你確實需要使用全局變量,你不需要把它傳遞給函數(我該使用Python 2.7,但它應該與Python 3工作寫)。

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) 
+0

謝謝你的代碼正在工作。但我不得不改變raw_input輸入。我不知道爲什麼python 3不認識它。 –