>

이 오류 트랩이 왜 제대로 작동하지 않습니까? 누군가가 1 이상의 단어 또는 숫자를 입력하면 오류를 포착하고 올바른 해당 입력을 입력 할 때까지 질문을 반복합니다. 어떤 제안?

valid = 0
    while valid ==0:
        x = input('Enter 4 digits for X(0 or 1): ')
        while len(x)!=4:
            print('Try Again. Remember 4 digits and only use binary 1 or 0')
            x = input('Enter 4 digits for X: ')
        valid = 1
        for i in x:
            if i !='1' and i !='0':
                print('Try Again. Remember 4 digits and only use binary 1 or 0')
                valid=0

    valid = 0
    while valid ==0:
        y = input('Enter 4 digits for Y(0 or 1): ')
        while len(y)!=4:
            print('Try Again. Remember 4 digits and only use binary 1 or 0')
            y = input('Enter 4 digits for y: ')
        valid = 1
        for i in y: 
            if i !='1' and i !='0':
                print('Try Again. Remember 4 digits and only use binary 1 or 0')
                valid=0

  • 답변 # 1

    if 를 사용하여 입력 길이를 테스트해야합니다   while 대신 진술  고리. all(map('01'.__contains__, value)) 를 사용할 수도 있습니다  문자열이 '0'또는 '1'문자로 구성되어 있는지 테스트합니다. 그리고 당신은 x 를 만들 수 있습니다  그리고 y  변수 이름의 튜플과 동일한 코드를 반복하여 동일한 논리를 사용하여 값을 요청하고 전역 변수 또는 dict의 값으로 값을 할당합니다.

    for variable in 'x', 'y':
        while True:
            value = input('Enter 4 digits for %s (0 or 1): ' % variable)
            if len(value) == 4 and all(map('01'.__contains__, value)):
                globals()[variable] = value
                break
            print('Try Again. Remember 4 digits and only use binary 1 or 0')
    print(x, y)
    
    

  • 답변 # 2

    작은 것을 작은 조각으로 나누고 정규 표현식을 사용하여 1 또는 0 이외의 문자가 있는지 테스트하기 위해 코드를 함수에 넣는 것이 좋습니다. 코드를 기반으로 한 제안은 다음과 같습니다. 제공했습니다 (여기의 코드는 Python3 + 용입니다) :

    import re
    def check_input(input_str):
        # Regex for function, look for any single char not 1 or 0
        regex = r"[^10]"
        # Check if input is 4 bits
        if len(input_str) != 4:
            print('Sorry, input must only be 4 bits')
            return False
        # Check if characters are only 1 or 0
        if re.search(regex, input_str):
            print('Sorry, input must be composed of only 1s or 0s')
            return False
        return True
    def get_binary_input():
        good_input = False
        input_str = ""
        while not good_input:
            input_str = input('Enter 4 digits for X(0 or 1): ')
            good_input = check_input(input_str)
        return input_str
    def main():
        binary_str = get_binary_input()
        print('Got binary string: {}'.format(binary_str))
        return
    if __name__ == '__main__':
        main()
    
    

  • 이전 swift - 동적으로 크기를 조정하지 않는 테이블 뷰 셀
  • 다음 Wordpress 페이지에 함수 추가