如何在if-else语句中正确比较字典中的datetime.date值?
问题:如何正确比较字典中的datetime.date类型值与输入字符串?
我想在if-else语句中比较字典里的datetime.date类型值,但试了几种字符串格式都不对,代码如下:
import datetime dict = {'monday': datetime.date(2021, 8, 7)} day_input = input('Enter day: ')
字典里的值输出是2021-08-07,我尝试用'2021-08-07'和'2021, 8, 7'两种格式比较,结果都输出“No”,预期应该是“Yes”:
if dict[day_input] == '2021, 8, 7': print('Yes') else: print('No')
请问该怎么正确处理?
解决方案
核心问题是类型不匹配:字典里存储的是datetime.date对象,而你拿来比较的是字符串——不同类型的对象永远不会相等,所以不管字符串格式怎么写都会进入else分支。
有两种可行的解决方式:
方式1:将datetime.date对象转为字符串后比较
datetime.date对象的str()或isoformat()方法会默认输出YYYY-MM-DD格式的字符串,和你看到的输出格式完全一致,直接转换后再和目标字符串比较即可:
import datetime # 避免用dict作为变量名,它是Python内置类型,建议改成day_dict day_dict = {'monday': datetime.date(2021, 8, 7)} day_input = input('Enter day: ') if str(day_dict[day_input]) == '2021-08-07': print('Yes') else: print('No')
如果用户输入的就是日期字符串(比如输入2021-08-07),也可以直接和转换后的字符串对比:
if str(day_dict[day_input]) == day_input: print('Yes') else: print('No')
方式2:将输入字符串转为datetime.date对象后比较
如果希望逻辑更严谨(比如避免字符串格式不规范的问题),可以把输入的字符串解析成datetime.date对象,再和字典里的对象比较:
import datetime day_dict = {'monday': datetime.date(2021, 8, 7)} # 提示用户输入规范格式 day_input_str = input('Enter date (YYYY-MM-DD): ') try: # 把输入字符串解析为date对象 input_date = datetime.datetime.strptime(day_input_str, '%Y-%m-%d').date() # 这里假设你要对比的是字典中'monday'对应的值,可根据实际需求调整 if day_dict['monday'] == input_date: print('Yes') else: print('No') except ValueError: print('输入格式错误,请按YYYY-MM-DD格式输入')
内容的提问来源于stack exchange,提问作者kpop trash
相关产品推荐
相关产品推荐

