使用默认参数的Python函数及子函数

0 投票
2 回答
1139 浏览
提问于 2025-04-17 21:30

我正在尝试解决这个作业,当我运行代码时,它输出了一些多余的内容。谁能告诉我我哪里出错了,怎么修复它呢?谢谢!还有,我有时想同时缩进和退格几行,该怎么做呢?

作业要求
创建一个程序,里面有一个主函数和一个叫做 tester 的子函数。主函数会提示用户输入内容,提示信息是 "写点东西(输入 quit 结束): ",然后把这个输入作为参数传给子函数。

定义子函数 tester,它有一个参数叫 givenstring,默认值是 Too short。如果用户输入的内容少于10个字符,程序就会使用默认值;如果输入的内容有10个字符或更多,就会打印出用户输入的内容。如果用户输入 "quit",程序就会结束。当程序正常工作时,输出应该像这样:

>>> 
Write something (quit ends): what?
Too short
Write something (quit ends): What do you mean?
What do you mean?
Write something (quit ends): Ok thats it
Ok thats it
Write something (quit ends): I am out of here
I am out of here
Write something (quit ends): quit
>>> 

测试字符串长度最简单的方法是使用 len() 函数。

示例输出:

写点东西(输入 quit 结束): 什么?
太短了
写点东西(输入 quit 结束): 你是什么意思?
你是什么意思?
写点东西(输入 quit 结束): 好吧,就这样
好吧,就这样
写点东西(输入 quit 结束): 我走了
我走了
写点东西(输入 quit 结束): quit

我的代码:

while True: 
def tester(givenstring="Too short"):
    result=len(wrote)
    if result<10:
        print(givenstring)
    else:
        print(wrote)

wrote=input("Write something (quit ends): ")


if wrote=="quit":
    break
else:
    tester(wrote)

if __name__ == "__main__":

    tester()

我的代码输出:

Write something (quit ends): what?
what?
Too short
Write something (quit ends): What do you mean?
What do you mean?
What do you mean?
Write something (quit ends): Ok thats it
Ok thats it
Ok thats it
Write something (quit ends): I am out of here
I am out of here
I am out of here
Write something (quit ends): quit

输出应该像下面这样:

Write something (quit ends): what?
Too short
Write something (quit ends): What do you mean?
What do you mean?
Write something (quit ends): Ok thats it
Ok thats it
Write something (quit ends): I am out of here
I am out of here
Write something (quit ends): quit

2 个回答

-1

看起来你的代码结构可能不太对,而且你想用raw_input来代替input。试试这个 -

def tester(givenstring):
    result=len(givenstring)
    if result>10:
        print(givenstring)
    else:
        print("Too short")

def main():
    while True:
        wrote=raw_input("Write something (quit ends): ")
        if wrote=="quit":
            break
        else:
            tester(wrote)

if __name__ == "__main__":
    main()
1

你在调用 tester 时,只能传一个参数:

def tester(givenstring="Too short"):

所以当你调用

tester(wrote)

时,你把 givenstring 替换成了 wrote

接下来,修改一下函数的定义:

def tester(wrote, givenstring="Too short"):

把函数的定义放到 while 循环外面会更高效。

另外,在 if __name__ == "__main__" 这部分,你调用 tester 时没有传任何参数。你可以把整个 while True 循环放在 def main(): 里面,然后调用这个 main 函数:

def tester(...):
    ...

def main():
    while True:
        ...

if __name__ == "__main__":
    main()

撰写回答