【问题标题】:Why does it keep returning false positive? [duplicate]为什么它一直返回误报? [复制]
【发布时间】:2017-11-24 02:22:50
【问题描述】:

为什么我的代码在我写的代码中总是返回 yes?

def alphaToPhone(alpha):
    for i in range(len(alpha)):
        if i=="b" or "k" or "c":
            phone="yes"
        else:
            phone="no"
    return phone

print(alphaToPhone("23ht"))

【问题讨论】:

  • 这个问题已经被问过很多次了......
  • !从 range(len(alpha)) 中删除 range(len,因为 range(len(alpha)) = [1,2,3,4] for alpha = "23ht"
  • 因为您正在短路 or 运算符,所以语句 1 == "b" or "k" or "c" 导致 'k' 因为第一个值是错误的

标签: python string loops if-statement letter


【解决方案1】:

你错过了支票

  def alphaToPhone(alpha):
        for i in alpha:
            if i == "b" or i == "k" or i == "c":
                phone="yes"
            else:
                phone="no"
        return phone

  print(alphaToPhone("23ht"))

【讨论】:

  • 他在范围内迭代。您正在将索引与字母进行比较。
  • @Nurzhan:我已经更新了答案。
【解决方案2】:

因为在 Python 中非空字符串的计算结果为 True。您的问题的解决方案可能是以下之一

if i=="b" or i == "k" or i == "c":

if i in ["b", "k", "c"]:

除此之外,您正在迭代一组错误的值。将您的 for 替换为

for i in alpha:

【讨论】:

  • 他在范围内迭代。您正在将索引与字母进行比较。
  • 是的,这也是错误的 - for i in alpha: 会更好。
【解决方案3】:

你的代码应该是这样的:

def alphaToPhone(alpha):
    for ch in alpha:
        if ch == "b" or ch=="k" or ch=="c":
            phone="yes"
        else:
            phone="no"
    return phone

print(alphaToPhone("23ht"))

【讨论】:

    【解决方案4】:

    您的状况i=="b" or "k" or "c" 可能不是您想要的。它总是返回 true,因为 "k"(和 "c" 也是如此)为 true。你想要的是:

    if i=="b" or i=="k" or i=="c":
    

    或者,更好:

    if i in {"b", "c", "k"}:
    

    【讨论】:

    • 他在范围内迭代。您正在将索引与字母进行比较。
    猜你喜欢
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    相关资源
    最近更新 更多