有没有一种方法可以为同一行中的多个变量分配数字?

时间:2019-02-08 12:14:20

标签: python python-3.x

我正在从事与日历有关的学校项目。我想将输入(即月份的名称)分配给一个数字。一月到一月,二月到二月,依此类推。暂时,我只是用

if month == ('JANUARY'):
    month = 1
if month == ('FEBRUARY'):
    month = 2

,依此类推,但是每个月这样做很丑陋,并且会占用大量空间。是否可以将所有月份都放在一行中,并为所选月份分配对应​​的编号?

6 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点。这是一个:

month = ['JANUARY', 'FEBRUARY', ...].index(month) + 1

index将元素的位置返回到列表中,从0开始。

答案 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)

calendarenumerate进行救援(如果需要,请使用m.upper())

import calendar

m2num = {m: i for i, m in enumerate(calendar.month_name)}
print(m2num["January"])