2012-09-12 4 views
0

나는 프로그램을 쓰고 있는데, 그 중 일부는 이름을 입력해야한다. 이름은 알파와 공백 (예 : John Smith) 일 수 없습니다. John Smith1이 될 수 없습니다. 잘못된 문자가 입력되면 오류 메시지를 표시하고 질문을 다시 처리해야합니다. 나는 검증을 제외한 모든 것을 가지고있다. 나는이게 이런 것 같아요?파이썬에서 알파 문자 만 허용 하시겠습니까?

name = str(input("What is the customers name? ")) 
while True: 
    if ??????????????????? : 
     print("You have entered an invalid character. Enter only name." 
     name = str(input("What is the customers name? ")) 
    else: 
      break 

누구나 ?????을 입력하여 프로그램을 작동시킬 수 있습니까?

+5

팀 오라일리 (Tim O'Reilly)는 기뻐하지 않을 것이다 그가 당신의 프로그램을 사용하려고합니다.毛澤東도 마찬가지이다. –

+0

@TimPietzcker 나는 이것이 과제를 제안한 교사에게 질문이 될 것이라고 생각한다. –

+0

샘플 코드에서 if 구문에 while 루프를 사용합니다. – Alex

답변

2

isalpha() 문자열 방법을 사용해보십시오.

  1. 분할 공간에 의해 입력 (사용 split())
  2. 는 예를 들어 string.letters

활용 : 사람이 공백 이름을 입력 것이기 때문에

, 당신은 두 가지 옵션이 있습니다 :

>>> import string 
    >>> string.letters 
    'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' 

허용 된 문자 목록을 얻으려면 ' '을 입력하십시오. 이것이 숙제이기 때문에 나머지는 당신에게 달려 있습니다.

+0

이름에 공백이 있으면 실패합니다. –

+0

이 코드를 제 코드로 복사 해 주시겠습니까? 나는 어디에 넣어야할지 모르겠습니다. –

+0

isalpha() 호출에 대해 들어 봤지만 어디에 넣어야할지 모르겠습니다. –

0

당신은 regular expressions로 볼 수도 있습니다 :

^[A-Za-z ]*$ 

은 ASCII 문자와 공간의 전체 구성 경우에만 문자열과 일치하는 정규식입니다.

는 현재 로케일의 문자를 허용하려면 :

숫자 (현재 로케일) 악센트 문자를 포함하여 문자를 뺀 숫자 및 밑줄의 설정은 기본적으로
^[^\W\d_]*$ 

.

+0

정규 표현식이 아직 코스의 일부가 아닐 수도 있습니다. –

+0

프로그래밍을 할 때 실용적인 접근 방법이 필요하다고 생각하면 – BlueTrin

-1

알파의 문자열을 확인하려면 일반적으로이 문자를 사용합니다. 희망이 당신을 도울 수 있습니다. 나는 팀의 표현을 사용하는 경우

import re 
def is_alpha_space(name): 
    name_nospace = ''.join((name.split())) 
    if re.search(r"\W", name_nospace) or len(name_nospace) < 1: 
     return False 
    return True 
name = "Mark Zumkoff" 
print(is_alpha_space(name)) # True 
name = "Mark [email protected]" 
print(is_alpha_space(name)) # False 
name = " " 
print(is_alpha_space(name)) # False 
+1

-1 : 숫자와 밑줄 허용. –

0

를 사용하여 정규 표현식, 그것은 이런 식으로 뭔가로 번역 할 [A-Za-z ]+

같은 뭔가 :

match = re.match(r'^[A-Za-z ]*$', name) 
if match : 
    print("Correct name"); 
else: 
    print("Invalid chars"); 
1

당신은 없애 문자열의 replace 방법을 사용할 수 있습니다 공백을 입력 한 다음 isalpha() 메서드를 사용하십시오.

예 :이 python3 비 아스키 문자로도 작동

>>> def get_name(): 
...  name = raw_input('name: ') # use a simple "input" in python3 
...  if not name.replace(' ', '').isalpha(): 
...    print('Bad name!!!') 
...  else: 
...    print('Good name!') 
... 
>>> get_name() 
name: My name 
Good name! 
>>> get_name() 
name: Bad Nam3 
Bad name!!! 
>>> get_name() 
name: Jon Skeet 
Good name! 

참고 :

#python3 
>>> get_name() 
name: Accented è 
Good name! 
>>> get_name() 
name: Bad Nam3 
Bad name!!! 

정규 표현식이 간단한 작업이 너무 복잡합니다. [A-Za-z ]+ 또는 유사 문자를 사용하면 비 ASCII 문자와 이름이 일치하지 않기 때문입니다. 그리고 \w에는 숫자가 포함됩니다. (예 : 'E'와 같은) 비 ASCII 문자와 일치하지 않는 경우

, 당신은 이런 식으로 뭔가를 시도 할 수 있습니다 :

>>> def get_name(): 
...  name = raw_input('name: ') #input in python3 
...  try: 
...    name.encode('ascii') 
...  except UnicodeDecodeError: 
...    print('Bad name!!!') 
...    return 
...  if not name.replace(' ', '').isalpha(): 
...    print('Bad name!!!') 
...  else: 
...    print('Good name!') 
... 
>>> get_name() 
name: Accented è 
Bad name!!! 
>>> get_name() 
name: The nam3 
Bad name!!! 
>>> get_name() 
name: Guido Van Rossum 
Good name! 

마지막으로 확인 할 수있는 다른 방법이 하나입니다 :

>>> import string 
>>> def good_name(name): 
...  return not set(name).difference(string.letters + ' ') 
... 
>>> good_name('Guivo Van Rossum') 
True 
>>> good_name('Bad Nam3') 
False 

그리고 당신은이 방법을 사용할 수 있습니다

name = raw_input('name: ') #input in python3 
if good_name(name): 
    #stuff for valid names 
else: 
    #stuff for invalid names 
+0

특히 숙제이기 때문에 OP 작문을하지 마십시오. –

+0

나는 그 말을 읽지 않았다 : S – Bakuriu

+0

그것은 숙제로 태그되었습니다 :) –

관련 문제