Python 使用函数返回None
用英文(filename,character\u limit)编写一个函数文件,该文件采用文件名(str)和字符限制(int)。文件名是要从Cat拉丁语转换为英语的文件名,字符限制是可以转换的最大字符数。限制为输出中的字符总数(包括换行字符) 函数应返回一个字符串,该字符串包含与文件相同顺序的所有转换行-记住每行末尾的换行符(即确保在每个转换行的末尾包含一个换行符,以便将其包含在行的长度中) 如果超出限制(即,转换后的句子将使输出超出限制),则不应将字符计数超过限制的句子添加到输出中。应改为在输出的末尾添加带“”的行。然后应停止对行的处理 文件中的每一行都是一个奇怪的拉丁语句子,你的程序应该打印出每个句子的英文版本 函数应不断添加句子,直到文件输入用完或打印的字符总数(包括空格)超过限制为止 答案必须包括你对英语句子的定义及其辅助功能——我应该称之为英语单词或类似的功能 您必须在文件中使用while\u in\u英语函数 每个函数只能使用一条返回语句。 示例中使用的测试文件(test1.txt)具有以下数据:Python 使用函数返回None,python,python-3.x,Python,Python 3.x,用英文(filename,character\u limit)编写一个函数文件,该文件采用文件名(str)和字符限制(int)。文件名是要从Cat拉丁语转换为英语的文件名,字符限制是可以转换的最大字符数。限制为输出中的字符总数(包括换行字符) 函数应返回一个字符串,该字符串包含与文件相同顺序的所有转换行-记住每行末尾的换行符(即确保在每个转换行的末尾包含一个换行符,以便将其包含在行的长度中) 如果超出限制(即,转换后的句子将使输出超出限制),则不应将字符计数超过限制的句子添加到输出中。应改为在输
impleseeoow estteeoow aseceeoow
impleseeoow estteeoow aseceeoow ineleeoow 2meeoow
impleseeoow estteeoow aseceeoow ineleeoow 3meeoow
impleseeoow estteeoow aseceeoow ineleeoow 4meeoow
我觉得这个程序运行得很好,只是有时候它不会返回任何结果
def english_sentence(sentence):
"""Reverse Translation"""
consonants = 'bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ'
eng_sentence = []
for coded_word in sentence.split():
if coded_word.endswith("eeoow") and (coded_word[-6] in consonants):
english_word = coded_word[-6] + coded_word[:-6]
if (coded_word[-6] == 'm') and (coded_word[0] not in consonants):
english_word = '(' + english_word + ' or ' + coded_word[:-6] + ')'
eng_sentence.append(english_word)
return " ".join(eng_sentence)
def file_in_english(filename, character_limit):
"""English File"""
newone = open(filename)
nowline = newone.readline()
characters = 0
while characters < character_limit and nowline != "":
process = nowline[0:-1]
print(english_sentence(process))
characters += len(nowline)
nowline = newone.readline()
if characters > character_limit:
return("<<Output limit exceeded>>")
ans = file_in_english('test1.txt', 20)
print(ans)
但我必须在每个函数中只使用一个return语句。如何才能对第二个函数执行此操作并避免输出中的“无”?您执行的操作与:
def f():
print('hello')
print(f())
所以基本上缩小到:
print(print('hello world'))
顺便说一句:
>>> type(print('hello'))
hello
<class 'NoneType'>
>>>
>>键入(打印('hello'))
你好
>>>
要解决代码问题,请执行以下操作:
def file_in_english(filename, character_limit):
s=""
"""English File"""
newone = open(filename)
nowline = newone.readline()
characters = 0
while characters < character_limit and nowline != "":
process = nowline[0:-1]
s+=english_sentence(process)+'\n'
characters += len(nowline)
nowline = newone.readline()
if characters > character_limit:
s+="<<Output limit exceeded>>"
return s
ans = file_in_english('test1.txt', 20)
print(ans)
def文件的英文版本(文件名、字符限制):
s=“”
“英文文件”
newone=open(文件名)
nowline=newone.readline()
字符=0
而字符<字符\限制和nowline!="":
进程=nowline[0:-1]
s+=英语句子(过程)+'\n'
字符+=len(nowline)
nowline=newone.readline()
如果字符数>字符数限制:
s+=“”
返回s
ans=英文文件('test1.txt',20)
打印(ans)
您必须确保,任何应该返回某些内容的函数都会以各种方式执行此操作,以确保函数可以结束
您的函数file\u(英文版)
仅返回大小写if characters>character\u limit:
如果charachter==
或charachter
不是这种情况,则函数不显式返回任何内容
任何一个函数如果不从它的调用方返回某个内容,那么当它返回到它的调用方时,它会隐式地返回None
def something(boolean):
"""Function that only returns something meaninfull if boolean is True."""
if boolean:
return "Wow"
print(something(True)) # returns Wow
print(something(False)) # implicitly returns/prints None
您可以在python教程中找到这一事实:
来自其他语言,您可能会反对fib不是一种语言
函数是一个过程,因为它不返回值。事实上
即使没有return语句的函数也会返回一个值,尽管是一个
相当无聊的一个。此值称为None(它是一个内置名称)。
写入值None通常会被解释器抑制,如果
将是唯一写入的值。如果你真的想看,你可以看
使用print():
资料来源:-在第二个绿色示例框之后不久似乎有效。谢谢虽然我仍然不清楚我在哪里把它搞砸了。@JD1978这是因为有一个打印,外部也是一个打印,但我知道你需要打印,因为多重
返回s不起作用。你必须确保,任何应该返回某物的函数,在所有情况下都会这样做。您的函数file\u(英语)
仅返回大小写的内容如果字符>字符限制:
-如果不是这样,函数将不返回任何内容。任何一个函数如果不从它的调用方返回某个内容,那么当它返回到它的调用方时,它会隐式地返回None
。
def something(boolean):
"""Function that only returns something meaninfull if boolean is True."""
if boolean:
return "Wow"
print(something(True)) # returns Wow
print(something(False)) # implicitly returns/prints None