2012-12-19 3 views
0

사용자 입력을 글자 형식으로 지정합니다. 문자는 이어야하며 A-H이고 숫자는 1-7 사이 여야합니다. 예 : A4 또는 H7입니다. 나는 사용자 입력을 예를 들어 AA, AAA, 2B 또는 22으로하고 싶지 않습니다. 이것은 내가 지금까지 한 일이다 : 나는 regular expression 경기를 함께 할 것입니다글자에 대한 문자열 입력 유효성 검사 후 숫자

x=input("Write something:") 

if len(x) !=2: 
    print("Wrong") 

letter=x[0] 
number= x[1] 

if number >=8: 
    print("Wrong") 

if letter not ["A","B","C","D","F","G"]: 
    print("Wrong") 

if letter == int: 
    print("Wrong") 

if number == str: 
    print("Wrong") 

else: 
    print("Perfect") 
+1

정확한 문제는 무엇을 사용 하는가? – sean

+5

왜 이것을 파이썬 3과 파이썬 2 모두에 태그를 붙이고 있습니까? 하나를 선택. 특히'input' 함수가 다르게 작동하기 때문에 그렇습니다. – interjay

+0

[A-H] [1-7]이 왜 효과가 없을까요? –

답변

4

:

import re 

x=input("Write something: ") 

if re.match('^[A-H][1-7]$',x): 
    print('Perfect!') 
else: 
    print ('Wrong') 

정규 표현식 '^[A-H][1-7]$'x 맞게해야하는 패턴이다.

^  # This character matches the start of the string 
[A-H] # After the start of the string we allow the group A-H (A,B,C,D,E,F,G,H) 
[1-7] # The next character must be a digit between 1 and 7 
$  # This character matches the end of the string 

앵커 ^,$의 사용은 x의 길이가 2 있어야한다는,이 그래서 우리는이에 대해 별도의 검사가 필요하지 않습니다 암시 적 의미합니다.

올바른 값이 수신 될 때까지 루프 개선점 :

import re 

while not re.match('^[A-H][1-7]$',input("Write something: ")): 
    print('Wrong') 

print('Perfect!') 

데모 :

Write something: 11 
Wrong 
Write something: AA 
Wrong 
Write something: a1 
Wrong 
Write something: A9 
Wrong 
Write something: A1 
Perfect! 
+0

감사합니다. @sudo_O – user1847307

0

이 정규 표현식을위한 완벽한 유스 케이스이며,

import re 
x = input("Write something") 
if re.match("^[A-H][1-7]$", x): 
    print("Perfect") 
+1

이것은 'A1junk'가 일치하는 경우에 충분하지 않습니다. 문자열의 시작과 끝 부분에 앵커가 너무 필요합니다. –

+1

좋은 지적, @ sudo_O - 내 대답을 고쳤습니다! – Kimvais

+0

고마워요! :) @Kimvais – user1847307

1
if letter == int: 
    print("Wrong") 

if number == str: 
    print("Wrong") 

두 가지 이유로 작동하지 않습니다. 첫째,이 경우 문자와 숫자는 모두 기술적으로 문자열입니다. 키보드의 모든 입력은 숫자 인 경우에도 문자열입니다. 둘째, == 연산자는 두 객체 (문자열 또는 정수 또는 클래스를 포함하여 여기에있는 "객체")의 동등성을 비교하기위한 연산자이며 "이 객체가이 클래스의 인스턴스입니까?"라는 질문과 다릅니다.

나는 다른 정규 표현식이 제공하는 것이 가장 좋지만 조건문을 사용하여 문자열이 단일 문자 숫자인지 문자인지 알려주고 싶다면 문자열 메소드를 사용하면된다. :

if not letter.isalpha(): 
    print("Wrong") 

if not number.isdigit(): 
    print("Wrong") 
+0

고마워!, 너와 @ 앤드류 고스터 – user1847307

0

완벽한 시나리오는 정규 표현식

import re 
x=input("Write something: ") 
print("Perfect" if re.match('^[A-H][1-7]$', x) else "Wrong") 
+0

안녕, 나 초심자, 왜 내가 다시 가져올 필요합니까? 이게 뭐야? – user1847307

+0

@ user1847307,'re'는 파이썬을위한 내장 정규 표현식 모듈입니다. 're.match'를 사용하기 전에 현재 네임 스페이스에로드해야합니다. –