【问题标题】:Where could the error be in this programme, please?请问这个程序的错误在哪里?
【发布时间】:2020-03-24 14:24:53
【问题描述】:

我被分组为一个项目,我被期望找到尽可能多的著名科学家,他们的名字的第一个字母和我一样。但我需要知道是我必须自己想出答案,还是我的团队中有可以与我一起工作的人?

输入是一串我的组成员的姓名,用空格分隔,然后是我的姓名。

预期输出: 一个字符串,如果我有一个名字伙伴,则显示"Compare notes",或者如果我必须独自工作,则显示"No such luck"。

group_members = input().split()
my_name = input()
for fellow in group_members:
    if fellow[0] is my_name[0]:
        print("Compare notes")
        break
    else:
        print("No such luck")
        break

我的程序对除一个测试用例外的所有测试用例都运行良好。请问,这个bug可能在哪里?感谢您的支持。

【问题讨论】:

  • 欢迎堆栈溢出。请edit您的问题包括样本输入和预期输出,以及实际输出与预期有何不同。 “适用于除一个测试用例之外的所有测试用例”不是特别有用,除非您提供测试用例
  • 欢迎来到 SO。您可能需要阅读 How to Ask 和 minimal reproducible example 并相应地编辑您的问题。注意:minimal reproducible example 表示我们可以复制粘贴您的代码,运行它并获得与您完全相同相同的结果。
  • 删除第一个break。
  • 我回应了之前 cmets 所说的所有内容,并且我还猜测您想在循环之后打印“没有这样的运气”,如果第一个字母不匹配,则不是每次迭代。
  • 虽然有两个明显的问题:1/如果你的代码确实是这样缩进的,那么它将在第一个失败的测试中退出循环,2/你想使用相等测试 (== ),而不是身份测试 (is) - 由于 CPython 缓存了一些字符串,它目前只有“某种”工作,但这是一个你不能依赖的实现细节。

标签: python string split


【解决方案1】:

试试这个

group_members = input().split()
my_name = input()
for fellow in group_members:
    if fellow[0] == my_name[0]:
        print("Compare notes")
        break
else:
    print("No such luck")

更多关于elsefor循环的信息在docs中。

【讨论】:

  • 相等运算符是== - is 是恒等运算符
  • 绝对不相关,is 和 == 产生完全相同的结果,除了顽固的隐藏测试之外,所有测试都通过了
  • @mko77 尝试为边缘情况添加一些代码,例如空的goup_members 列表、空的my_name 等
猜你喜欢
  • 1970-01-01
  • 2020-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
相关资源
最近更新 更多