【问题标题】:def function producing incorrect outputdef 函数产生不正确的输出
【发布时间】:2020-06-08 13:23:46
【问题描述】:

我的任务是:

编写一个函数starts_with(word, chs),它返回字符串单词是否以列表chs中的一个字符开头。

如果 word 为空字符串,则返回False。

如果chs 是一个空列表,则返回False。

我通过了 6/7 个测试用例,除了一个显示断言错误的测试用例,但是,我不知道每个测试用例中使用了什么输入,所以我无法找出问题所在。可能是什么问题?

def starts_with(word, chs):
    x = 0
    if (len(chs)== 0) or (word == ""):
        return (False)
    while x < len(chs):
        s = word[0]
        if s == chs[x]: {
        }
        x += 1
        return (True)

word = ()
chs = ()

【问题讨论】:

  • 第二个 if 语句后面的大括号是什么?
  • while 循环内的整个部分很不稳定。 Python 不像其他语言那样使用{} 来指示范围,而且if 内也没有任何内容。只要第一次检查是 False ,这看起来无论如何都会返回 True
  • 另请注意:最后两个作业 word = ... 和 chs = ... 毫无意义。

标签: python python-3.x function


【解决方案1】:

尝试使用适当的 Python 内置函数来完成此任务,而不是应用 C/Java 风格的编程。它更具可读性。

使用string.startswith():

def starts_with(word, chs):
    for c in chs:
        if word.startswith(c):
            return True
    return False #you can avoid this line, it will return None by default

另一种方法是检查word 的第一个字母是否在chs 中:

def f(word, chs):
    if word and chs and word[0] in chs:
        return True
    return False

【讨论】:

    【解决方案2】:

    试试这个:

    def starts_with(word, chs):
            if (len(chs)== 0) or (word == ""):
                return False
            elif word[0] in chs:
                return True
    

    更新:

    def starts_with(word, chs):
        if not word: return False
        elif word[0] in chs:
            return True
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-20
      • 1970-01-01
      • 2019-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多