当我在解释器中运行这些命令时,我得到了我想要的结果。但是,当我尝试使用.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课程的练习。我从示例中得到了正确答案,并了解其工作原理。我只是不确定为什么我的代码不起作用。
感谢您的帮助。
答案 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