【问题标题】:python string evaluation not giving proper output [closed]python字符串评估没有给出正确的输出[关闭]
【发布时间】:2013-05-11 22:33:22
【问题描述】:

我有一个 python 函数测试来测试我的代码。 '得到的字符串和预期的字符串是一样的,但是当我通过下面的方法检查它时,它给出的是X而不是OK

编辑:也包括父函数和调用

def donuts(count):
  if count <=10 :
    print 'Number of donuts:',count
  else :
    print 'Number of donuts: many'
    return 

def test(got, expected):
    if got == expected:
       prefix = ' OK '
    else:
       prefix = '  X '
       print '%s got: %s expected: %s'  % (prefix, repr(got), repr(expected))
       return

在我看来,得到和预期的地方都一样,我错过了什么吗? 删除了 O/p,因为它具有误导性: 函数声明如下:

test(donuts("11"), "Number of donuts: many")

【问题讨论】:

  • 使用print repr(got), repr(expected) 看看可能有什么不同。显然,它们相同。
  • 另外,return 语句实际上什么也没做。
  • 也试试 type(got) 和 type(expected)。
  • 这不可能是您的代码的输出。一个有:,一个有=repr() 输出应该有某种引号。
  • 鉴于您似乎已经在使用repr() 调用,并且假设gotexpected 是字符串,因此您的示例输出似乎确实很可能。除非您有带有自定义 __repr__ 方法的自定义类型,否则您的输出会缺少引号,并且应该有 not 换行符。这甚至没有提到您的代码打印got:,但您的示例输出有got =

标签: python string python-2.7


【解决方案1】:

donuts("11") 将打印 "Number of donuts: many" 但它返回 None

test(donuts("11"), "Number of donuts: many") 正在比较不相等的 None"Number of donuts: many"。如果您想让这段代码正常工作,请将您的 donuts() 函数更改为:

def donuts(count):
  if count <=10 :
    return 'Number of donuts: %s' % count
  else :
    return 'Number of donuts: many'

您的 test() 函数中还有一个缩进错误,导致打印仅在 else 条件下运行。

【讨论】:

  • 您能否详细说明测试中的缩进错误可能是打印具有适当缩进的功能?
  • 看看你的 'print' 函数是如何直接出现在 'prefix = " X "' 下的?这意味着它将在与前缀行相同的块中运行,在这种情况下是 else: 块。 Python 使用缩进的方式与 C 风格语言(如 Java 和 PHP)使用 {} 的方式相同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
  • 1970-01-01
  • 2019-07-30
  • 1970-01-01
  • 1970-01-01
  • 2010-12-17
相关资源
最近更新 更多