我正在从事与日历有关的学校项目。我想将输入(即月份的名称)分配给一个数字。一月到一月,二月到二月,依此类推。暂时,我只是用
if month == ('JANUARY'):
month = 1
if month == ('FEBRUARY'):
month = 2
,依此类推,但是每个月这样做很丑陋,并且会占用大量空间。是否可以将所有月份都放在一行中,并为所选月份分配对应的编号?
答案 0 :(得分:1)
答案 1 :(得分:1)
如果您使用的是python 3,则可以用一个月的时间Enum Documentation
from enum import Enum, auto
class Months(Enum):
JAN = auto()
FEB = auto()
...
auto()
将自动增加每个月的值,因此您不必担心可能会导致我的编号错误的错误
因此您可以像访问它们一样
Months.JAN
或
Months(1) # returns <Months.JAN: 1>
将常量分组为Enum是一个好主意,因为它们成为整个程序的唯一事实来源。为此目的使用字符串可能会由于输入错误而导致许多错误。
也不建议将其存储在字典或数组中,因为任何人都可以在运行时对其进行变异,这可能很难调试。枚举值是不可变的,因此无法重新分配。
答案 2 :(得分:0)
您还可以使用以下字典:
Time.at(0, your_epoch_milliseconds, :millisecond)
然后执行:
names_to_int = {'January': 1, 'February': 2, ...}
答案 3 :(得分:0)
您可以在此处使用字典:
d={"JANUARY":1,"FEBRUARY":2,"MARCH":3,"APRIL":4,"MAY":5,"JUNE":6,"JULY":7,"AUGUST":8,"SEPTEMBER":9,"OCTOBER":10,"NOVEMBER":11,"DECEMBER":12}
print(d[input()])
这给您直接答案
答案 4 :(得分:0)
带有.index(month)的代码(请参阅其他答案)每次要获取一个月的索引(可能是O(log n),并且在幕后有一些不错的字符串索引)时,都需要O(n)时间,不知道这是否适用于python)。我建议使用几个月的字典(那么它平均为O(1),即运行速度更快):
months = ['JANUARY', 'FEBRUARY' ...]
months_map = {month: i for i,month in enumerate(months)}
a_month_idx = months['a month name']
答案 5 :(得分:0)
calendar
和enumerate
进行救援(如果需要,请使用m.upper())
import calendar
m2num = {m: i for i, m in enumerate(calendar.month_name)}
print(m2num["January"])