Return 列表超出范围时的特定值 Python

Return specific value when list is out of range in Python

如果列表超出范围,我如何 return 特定值?这是我目前的代码:

def word(num):
  return ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'][num-1]

word(1) 将 return 'Sunday',但是如果 num 不是 1-7 之间的整数,我怎么能 return 默认值?

因此,word(10) 会 return 类似于 "Error"

正常 if/else 应该足够了。

def word(num):
    l = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']
    return l[num-1] if 0<num<=len(l) else "Error"

#驱动代码

>>> word(7)
=> 'Saturday'

>>> word(8)
=> 'Error'

>>> word(-10)
=> 'Error'

使用具有 try-except.

的高度 pythonic EAFP 方法
daysofweek = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']
def getday(num):
    try:
        return daysofweek[num - 1]
    except IndexError:
        return "Error"

简单翻译你想要的Python:

def word(num):                                                                  
   return ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'][num-1] if 1 <= num <= 7 else 'Error'

您可以使用 enumerate(sequence, start=1):

将列表转换为字典
dict(enumerate(['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'], 1))
# {1: 'Sunday', 2: 'Monday', 3: 'Tuesday', 4: 'Wednesday', 5: 'Thursday', 6: 'Friday', 7: 'Saturday'}

那么,您的查询就很简单了 dict.get():

wdays = {1: 'Sunday', 2: 'Monday', 3: 'Tuesday', 4: 'Wednesday', 5: 'Thursday', 6: 'Friday', 7: 'Saturday'}

def word(num):
    return wdays.get(num, 'Error')

这是一个例子:

>>> word(3)
'Tuesday'
>>> word(10)
'Error'
>>> word('garbage')
'Error'

根据您想对字符串执行的操作,return 'Error' 而不是简单地抛出错误可能不是一个好主意。否则,您每次使用此函数时都必须检查字符串是否看起来像工作日或等于 'Error'

它应该处理任何不在您所需范围内的整数。

daysofweek = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']
def getday(num, len_range):
    if 0 < num <= len_range:
        return daysofweek[num - 1]
    else:
        return "Error"

num_index = int(input("Enter a value for num : "))
print(getday(num_index, len(daysofweek)))

你也可以像这样把getday()写成紧凑的形式:

def getday(num, len_range):
    return daysofweek[num - 1] if 0 < num <= len_range else "Error"