为什么我的输入错误陷阱不能按我预期的方式工作?

时间:2018-07-05 23:56:39

标签: python input error-handling

为什么此错误陷阱无法正常工作?我想让它出现在某个地方,如果有人键入一个单词或一个大于1的数字,则会出现错误陷阱并重复该问题,直到您键入正确的相应输入为止。有什么建议么??

gnuplot -p tmp.plt

2 个答案:

答案 0 :(得分:0)

您应该使用if语句而不是while循环来测试输入的长度。您也可以使用all(map('01'.__contains__, value))测试字符串是否仅由'0'或'1'字符组成。然后,您可以使xy成为变量名称的元组,并通过相同的代码进行迭代,以使用相同的逻辑来请求它们的值,并将该值分配为全局变量或a的值。字典。

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)

答案 1 :(得分:0)

我建议将您的代码放入函数中,以帮助将它们分成更小的部分,并使用正则表达式进行测试以查看是否存在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()