麻烦得到if语句在def中工作,但在解释器中没有

时间:2015-02-09 01:26:15

标签: python string if-statement function

当我在解释器中运行这些命令时,我得到了我想要的结果。但是,当我尝试使用.py文件运行它时,我没有。我是编码的新手,在我的大脑中,我不明白为什么这段代码不起作用。

解释器中的

>>> a = 'This dinner is not that bad!'
>>> n = a.find('not')
>>> b = a.find('bad')
>>> if n < b:
      a.replace(a[n:], 'good')
'This dinner is good'

这是我想要的结果。

当我运行此代码时,我没有得到我想要的结果。我做错了什么,为什么这段代码不起作用?

def test(s):
  n = s.find('not')
  b = s.find('bad')

  if n < b:
    s.replace(s[n:], 'good')
print test('This dinner is not that bad!')

这是从谷歌介绍到python课程的练习。我从示例中得到了正确答案,并了解其工作原理。我只是不确定为什么我的代码不起作用。

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

def test(s):
  n = s.find('not')
  b = s.find('bad')

  if n < b:
    return s.replace(s[n:], 'good')
print test('This dinner is not that bad!')

您应该return来自函数test的结果。

答案 1 :(得分:1)

因为在函数版本中,您将获得None作为默认值,您没有返回值:

def test(s):
  n = s.find('not')
  b = s.find('bad')
  return_res = ''

  if n < b:
    return_res = s.replace(s[n:], 'good')

  return return_res

print test('This dinner is not that bad!')

输出:

This dinner is good

或者不使用return_res

def test(s):
  n = s.find('not')
  b = s.find('bad')

  if n < b:
    return s.replace(s[n:], 'good')

  return "something else"

print test('This dinner is not that bad!')

答案 2 :(得分:0)

大多数(或所有?)IDE中的解释器,如果我没有弄错(我用Sublime执行我的代码,在执行时保存并运行文件),你得到你上一个表达式打印的结果自动,给你一个python代码以这种方式表现的错误印象。它没有。

换句话说:您的代码在解释器和文件中的工作方式相同。你遇到的问题是误解,即代码在解释器中做了不同的事情。真正发生的事情是,在两个代码片段中,您实际上捕获结果并将其打印出来;在翻译的情况下,它会自动打印出来作为一种视觉辅助,但你不能依赖它。

在你的第二个片段中,你必须写:

return s.replace(s[n:], 'good')

请注意在这种情况下使用返回。在您的第一个示例中,您应该捕获它或至少显式打印结果。但由于它不包含在函数中,因此等效于:

if n < b:
    print a.replace(a[n:], 'good')

或:

if n < b:
    newString = a.replace(a[n:], 'good')

print newString