2016-01-16 2 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) 

У меня проблема с этим кодом, если первый пользовательский ввод не является альфа, программа будет запрашивать ввод пользователя снова до тех пор, пока пользователь вводит правильный ввод, используя только буквенные буквы. Но когда я печатаю значение внутри переменной (имя пользователя) после этого, я получу вход первого пользователя, даже если это неправильный ввод, и он уже изменил его внутри функции check() :. Я попытался использовать множество решений, но это не сработало. Я думаю, что это проблема, связанная с глобальными переменными, хотя я установил переменную (имя пользователя) в качестве глобальной переменной. Если у кого-нибудь есть решение этой проблемы, пожалуйста, помогите мне.Изменение значения глобальной переменной внутри функции параметра (x):

+2

do 'username = x' в конце функции – tdelaney

+0

Спасибо за ваше решение и быстрый ответ. Что делать, если я хочу использовать функцию для других переменных не только для переменной (username). Например, я хочу применить ту же функцию к переменной (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

Спасибо за ваше решение и быстрый ответ. Что делать, если я хочу использовать функцию для других переменных не только для переменной (username). Например, я хочу применить ту же функцию к переменной (SureName). –

+0

Спасибо. Последнее решение - это решение, которое я искал. Мне просто нужно понять, как это работает. –

+0

'get_input()' принимает имя нужной вещи, например «имя пользователя» или «фамилия», а затем запрашивает у пользователя ввод. Хотя вход не все альфа, он продолжает спрашивать, пока он не получит вход, который является всей альфой. Затем он возвращает значение, которое было введено. Здесь нет необходимости использовать глобальные переменные. Также я изменил input() на raw_input(), который вы хотите здесь. – ktbiz

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

Спасибо, что ваш код работает. Но мне пришлось изменить change raw_input на вход. Я не знаю, почему python 3 не узнал его. –

Смежные вопросы