繁体   English   中英

接受来自输入用户的带有“/”的数字,当它是 python 中的字母时会出现异常

[英]Accept number with “/” from input user and exception when it is a letter in python

下面的代码适用于该数字,但当我在输入中添加破折号并且我不知道如何让它接受它时将不起作用。

我认为异常有效,但我不知道它是否正常工作,因为如果它是一封信,我想出错。

我的问题是如何让它接受输入中带有数字的破折号,并检查用户是否输入了字母而不是数字。

def main(day_number,month_number,month_name,date_,month_list,date_1,year,fulldate):              
    day_number = 0                                                                               
    month_number = 0
    month_name = ''                                                                              
    date_ = ''                                                                                  
    month_list = ['January','February','March',                                                  
                  'April','May','June','July',
                  'August','September','October',
                  'November','December']
    date_ = input("Enter a date in the format mm/dd/yyyy: ")
    while True:
        try:
            float(date_)
            date_1= date_.split('/')                                                                      
            month_number = (date_1[0])                                                                
            day_number = date_1[1]
            year = date_1[2]
            month_name = month_list[month_number - 0]                                                   
            fulldate = month_name + ' ' + day_number + ',' + year + '.'                                    
            print(fulldate)
            break
        except ValueError:
            print("""ops it's not a number, please try again""")
            date_ = input("Enter a date in the format mm/dd/yyyy: ")
            break
                                                                                

main("day_number","month_number","month_name","date_","month_list","date_1","year","fulldate")

如何创建一个采用日期格式并不断提示用户的 function,直到他们使用datetime. strftime ( format ) datetime. strftime ( format )datetime. strptime ( date_string, format ) datetime. strptime ( date_string, format )

from datetime import datetime

def get_valid_date_input(prompt, format):
    now = datetime(datetime.today().year, 1, 1)
    prompt_with_example = f"{prompt}, e.g., {now.strftime(format)}:\n"
    date_ = None
    while True:
        try:
            date_ = datetime.strptime(input(prompt_with_example), format)
            break
        except:
            print("Error: Input did not match required format, try again...")
    return date_

def suffix(d):
    # From https://stackoverflow.com/a/5891598/6328256 
    return 'th' if 11 <= d <= 13 else {
        1: 'st',
        2: 'nd',
        3: 'rd'
    }.get(d % 10, 'th')

def main():
    date_format = "%m/%d/%Y"
    date_ = get_valid_date_input(f"Enter a date in the format {date_format}",
                                 date_format)
    print(f"You entered a valid date: {date_.date()}")
    full_month, day_num, year = date_.strftime("%B"), date_.day, date_.year
    print(f"{full_month} {day_num}{suffix(day_num)}, {year}")

if __name__ == '__main__':
    main()

示例用法:

Enter a date in the format %m/%d/%Y, e.g., 01/01/2020:
11/26/20
Error: Input did not match required format, try again...
Enter a date in the format %m/%d/%Y, e.g., 01/01/2020:
26/11/2020
Error: Input did not match required format, try again...
Enter a date in the format %m/%d/%Y, e.g., 01/01/2020:
11/26/2020
You entered a valid date: 2020-11-26
November 26th, 2020

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM