Python 删除短输入功能中的冗余线路

Python 删除短输入功能中的冗余线路,python,function,dry,Python,Function,Dry,我正在尝试对24小时时钟的输入进行消毒,下面的代码就是我想到的。有几行重复了,我想知道是否有更好的模式来避免它 def inputHour(): startHour = input("Starting time (hour): ") while not startHour.isdigit(): startHour = input("Please enter numbers only (0 - 23): ") whil

我正在尝试对24小时时钟的输入进行消毒,下面的代码就是我想到的。有几行重复了,我想知道是否有更好的模式来避免它

def inputHour():
    startHour = input("Starting time (hour): ")
    while not startHour.isdigit():
        startHour = input("Please enter numbers only (0 - 23): ")
    while 0 < int(startHour) > 23:
        startHour = input("Invalid hour. Please enter value from 0 to 23: ")
        while not startHour.isdigit():
            startHour = input("Please enter numbers only (0 - 23): ")
    return startHour
def inputHour():
开始时间=输入(“开始时间(小时):”)
而不是开始。isdigit():
startHour=输入(“请仅输入数字(0-23):”)
而023:
startHour=输入(“无效小时。请输入0到23之间的值:”)
而不是开始。isdigit():
startHour=输入(“请仅输入数字(0-23):”)
返回星空

您总共有2个选项;它是非数字不在所需范围内为整数。因此,也许您可以按如下方式合并它们:

def inputHour():
    startHour = input("Starting time (hour): ")
    while not startHour.isdigit() or 0 < int(startHour) > 23:
        startHour = input("Invalid input. Please enter numbers only (0 - 23): ")
    return startHour
def inputHour():
开始时间=输入(“开始时间(小时):”)
而不是startHour.isdigit()或023:
startHour=input(“无效输入。请仅输入数字(0-23):”)
返回星空

您可以使用while循环,该循环仅在输入在给定范围内时才会中断:

def inputHour():
    while True:
        startHour = input("Starting time (hour, numbers only): ")
        if startHour.isdigit() and (0 <= int(startHour) <= 23):
            break
    return startHour
def inputHour():
尽管如此:
startHour=输入(“开始时间(小时,仅限数字):”)

如果startHour.isdigit()和(0)非常感谢!我现在意识到我在“正确”错误消息上进行隧道透视。非常感谢!我还将采用您简洁的提示样式。