【问题标题】:Writing a function that returns the index of an item in a list when the function parameter is the value of a list编写一个函数,当函数参数是列表的值时,返回列表中项目的索引
【发布时间】:2020-01-20 09:32:46
【问题描述】:

刚加入社区,最近接触了python3。我目前正在通过资源“如何像使用 Python3 的计算机科学家一样思考,第 3 版”进行学习。我正在完成第 4 章的一些练习:函数并遇到了这个问题: Problem in question

目前我对这个问题的尝试是这样的(请原谅格式):

print('-----------Ex 2-----------')

days_of_week = ('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday')


def day_name(n):

    if n >= 0 and n < 7:
        return str(days_of_week[int(n)])
    else:
        return 'None'


print(day_name(1))

print('-----------Ex 3-----------')


def num_day(day_name):

    for day in days_of_week:
        if day == day_name:
            return(days_of_week.index(day_name))
        else:
            return 'None'



print(num_day("Tuesday"))

对于练习 2,一切似乎都运行良好,但是对于练习 3,该函数返回当天的索引以及“无”,如下所示:Result

非常感谢任何解释为什么会发生这种情况以及如何删除“无”的存在

谢谢!

【问题讨论】:

  • 在 Ex 3 中,该方法不返回任何内容。因此无。返回值而不是 print()。
  • 除了下面给出的解释之外,您还可以将函数 def num_day(day_name): 主体简化为 1-liner return days_of_week.index(day_name) if day_name in days_of_week else None。这利用了三元表达式,参见例如here.

标签: python python-3.x list


【解决方案1】:

在 Python 中,如果你没有指定任何返回值,函数总是返回 None。所以不是

print(days_of_week.index(day_name))

你可以的

return days_of_week.index(day_name)

所以你想要的实际值由你的函数返回。

【讨论】:

  • 应该考虑到,如果day_name 不在days_of_week 中,return days_of_week.index(day_name) 将引发ValueError: tuple.index(x): x not in tuple
【解决方案2】:

调用 print(num_day("Tuesday")) 时发生的情况是 for 循环遍历一周中的几天。所以在循环的第一步,变量day 是“星期一”。然后 if 语句被评估为 false,因为 'Monday' != 'Tuesday',所以 else 块被执行,函数返回 none,这不是我们想要的。相反,我们只想在它遍历所有工作日后返回none。这意味着我们只需要删除 else 语句,并仅在输入与任何工作日名称不匹配时返回 None

def num_day(day_name):
    days_of_week = ('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday')
    for day in days_of_week:
        if day == day_name:
            return(days_of_week.index(day_name))
    return 'None'

print(num_day("Tuesday"))

最好在函数内部定义days_of_week 变量。

【讨论】:

  • 啊,我明白了,您的解释肯定有助于澄清一些误解。感谢您分享您的见解!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 2020-05-06
  • 1970-01-01
  • 2012-01-11
相关资源
最近更新 更多