python - 十二生肖日历样本中日期的意外输入值检测
问题描述
我正在用 Python 做一个任务,即根据输入的月份和日期来创建一个生肖日历。
我已经制作了一个成功的日历,但是,如果我输入了错误的月份名称或不存在的日期,我不知道如何解决这个问题。
我尝试了很多事情:创建不同的层次结构,或者在我写的每个星座下else: print ('Entering an incorrect date')
。我什至尝试过注册if day <0 and day> 31 or month! = 'March' or month! = 'April'
,等等...结果证明这是一个巨大的无用功能,也没有任何效果。
我觉得这里有一个单行解决方案来检测days < 0 and > 31 和不正确的月份名称,但我就是无法理解。有人可以帮忙吗?
month = input('Enter the month: ')
day = int(input ('Enter the date of month: '))
if day >= 21 and day <= 31 and month.lower() == 'march' or day >=1 and day <= 19 and month.lower() == 'april':
zodiac='Aries'
if day >= 20 and day <= 30 and month.lower() == 'april' or day >=1 and day <= 19 and month.lower() == 'may':
zodiac='Taurus'
if day >= 21 and day <= 31 and month.lower() == 'may' or day >=1 and day <= 20 and month.lower() == 'june':
zodiac='Gemini'
if day >= 21 and day <= 30 and month.lower() == 'june' or day >=1 and day <= 22 and month.lower() == 'july':
zodiac='Cancer'
if day >= 23 and day <= 31 and month.lower() == 'july' or day >=1 and day <= 22 and month.lower() == 'august':
zodiac='Leo'
if day >= 23 and day <= 31 and month.lower() == 'august' or day >=1 and day <= 22 and month.lower() == 'september':
zodiac='Virgo'
if day >= 23 and day <= 30 and month.lower() == 'september' or day >=1 and day <= 22 and month.lower() == 'october':
zodiac='Libra'
if day >= 23 and day <= 31 and month.lower() == 'october' or day >=1 and day <= 21 and month.lower() == 'november':
zodiac='Scorpio'
if day >= 22 and day <= 30 and month.lower() == 'november' or day >=1 and day <= 21 and month.lower() == 'december':
zodiac='Sagittarius'
if day >= 22 and day <= 31 and month.lower() == 'december' or day >=1 and day <= 19 and month.lower() == 'january':
zodiac='Capricorn'
if day >= 20 and day <= 31 and month.lower() == 'january' or day >=1 and day <= 18 and month.lower() == 'february':
zodiac='Aquarius'
if day >= 19 and day <= 28 and month.lower() == 'february' or day >=1 and day <= 20 and month.lower() == 'march':
zodiac='Pisces'
print('Conclusion:')
print(zodiac)
解决方案
您可能想查看datetime模块。有了它,您可以轻松地比较日期和时间,而无需额外的 if 语句。
例如,如果要执行以下操作:
import datetime
dt = datetime.datetime.today()
print dt.month
然后你会得到:
3
因此,您无需以字符串格式读取月份的输入,您可以简单地询问月份的编号,以帮助更轻松地创建日期时间对象。或者,您可以执行以下操作:
month_input = input("What is the month?")
months = ["january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december"]
month_input = month_input.lower().strip() #convert to lowercase and remove whitespace
month_num = months.index(month_input) + 1 #Add one because lists start at index 0
这样,您可以获得月份数,以使用datetime对象从那里进行比较和评估。
推荐阅读
- javascript - 如何将内联 CSS 添加到使用 Javascript 动态创建的元素?
- c# - EF Core 中的 SaveChanges() 在预期不会被调用时调用
- docker - 在 PHP 7.4 FPM Aplpine (Docker) 上安装 GMP 扩展
- javascript - 通过 GET 下载的 Ajax 文件在 Opera 中不起作用
- javascript - React js diff2html无法读取未定义的属性'getJsonFromDiff'
- javascript - 在 Office.onReady 上运行 Office 加载项失败
- oracle - 以下哪三个是最优的 Oracle SQL 计划?
- postgresql - 用数组值更新表中的记录
- arrays - 将数组/映射从 awk 返回到 bash
- css - 按键样式