【问题标题】:How do I stop my python code from printing none after it prints the string? [duplicate]如何在打印字符串后停止我的 python 代码不打印? [复制]
【发布时间】:2021-12-29 21:49:37
【问题描述】:
str = input("Please enter y to start the program: ")
while str == 'y':
    def printNTimes(s, n):
        for i in range(n):
            print(s)

    phrase = input("Enter a string: ")
    number = int(input("Enter a positive number: "))

    allTogether = printNTimes(phrase, number)

    print(allTogether)
    print()    
    str = input("Please enter y if you want to continue: ")
print("DONE")

输出:

Please enter y to start the program: y
Enter a string: Hi
Enter a positive number: 3
Hi
Hi
Hi
None

Please enter y if you want to continue:

【问题讨论】:

  • printNTimes 已经进行了打印并且不返回任何内容,这意味着它将返回 None。您将该结果分配给allTogether,然后继续打印allTogether,这将打印None。只需调用printNTimes,不要将结果分配给变量,也不要打印它。
  • @Grismar, printNTimes 在 while 循环内。
  • 现在是,但不是我写评论的时候。
  • 为什么函数 printNTimes 可以做到这样简单 -> print(phrase*number)
  • 另一件事是函数 printNTimes 不返回任何值,但您正试图从中打印一个值。所以没有返回

标签: python


【解决方案1】:

您看到的问题是因为您的例程 printNTimes() 返回 None 值。你说:

allTogether = printNTimes(phrase, number)

print(allTogether)

allTogether 设置为 None 因为 printNTimes 不返回值。当您调用 print(allTogether) 时,这就是打印 None 的原因。

听起来您希望您的 printNTimes() 例程将所有输出组合成一个大字符串并将其返回,然后您将通过 print(allTogether) 调用将其打印出来。但是您的printNTimes() 例程正在调用 print() 方法并随后输出文本。所以,你需要重写你的printNTimes() 方法。另外,请注意,不需要在循环内定义该函数。一次就够了。所以这样的事情就足够了:

def printNTimes(s, n):
    s_out = ""
    for i in range(n):
        s_out += s + '\n'
    return s_out
str_ = input("Please enter y to start the program: ")
while str_ == 'y':

    phrase = input("Enter a string: ")
    number = int(input("Enter a positive number: "))

    allTogether = printNTimes(phrase, number)

    print(allTogether)
    print()    
    str_ = input("Please enter y if you want to continue: ")
print("DONE")

另请注意,我将您的 str 变量重命名为 str_str 是 Python 类型,是一个不应该重复使用的保留字。

【讨论】:

    【解决方案2】:

    你不需要print(allTogether),或者变量本身,因为当你打印它时,你会得到一个额外的None(因为函数返回None,即它不返回任何东西)。

    另外,将函数放在 while 循环之外,以便于阅读。

    def printNTimes(s, n):
        for i in range(n):
            print(s)
    
    str = input("Please enter y to start the program: ")
    while str == 'y':
        phrase = input("Enter a string: ")
        number = int(input("Enter a positive number: "))
    
        printNTimes(phrase, number)
        print()    
        str = input("Please enter y if you want to continue: ")
    print("DONE")
    

    只需调用该函数。您可以使用return,然后使用print 函数,但这可能更容易。

    【讨论】:

    • 好的,这很有帮助。感谢您的反馈以及将函数置于 while 循环之外的提示。我正在学习 Python 课程,所以我还在学习正确的编程礼仪。
    【解决方案3】:

    问题在于函数 printNtime 实际上被用作子例程,这意味着它不返回任何值。

    我不确定你想要什么作为最终输出,所以这里有两个解决方案。
    如果用作子程序:只需删除 print(allTogether)
    如果用作函数:您需要在函数中创建一个字符串变量并返回它。

    def printNTimes(s, n):
      mystring = ""
      for i in range(n):
        mystring = mystring + s + "\n"
      return mystring
    

    【讨论】:

    • 大概,一个名为“printNTimes”的函数会为您完成打印,因此子程序选项更有意义。
    猜你喜欢
    • 2014-11-29
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    相关资源
    最近更新 更多