【问题标题】:Function always returns none instead of printed statement函数总是返回 none 而不是打印的语句
【发布时间】:2015-11-14 02:26:12
【问题描述】:

我正在尝试用 Python 创建一个石头、纸、剪刀游戏。我是新手,所以请原谅看似简单的问题。我正在创建一个可以运行用户选择的函数,并将其与计算机的随机选择进行比较。我希望将结果显示为打印语句,但是我一直收到 None 作为反馈。另请注意,我知道还有更多潜在的结果,到目前为止,我只在用户选择“摇滚”时测试结果。

下面是这段代码:

import random

rkprsr = ['rock', 'paper', 'scissors']

random.shuffle(rkprsr)

def gameplay (user_choice):
    dealer_choice = rkprsr.pop()
    if user_choice == 'rock' and dealer_choice == 'paper':
        print ('You selected rock and I selected paper. My paper covers your rock. You lose.')
    elif user_choice == 'rock' and dealer_choice == 'scissors':
        print ('You selected rock and I selected scissors. Your rock crushes my scissors. You win!')
    elif user_choice == 'rock' and dealer_choice == 'rock':
        print ('You selected rock and I selected rock. Stalemate. We tied.')
    return


user_choice = input ('Please type rock, paper, or scissors:')

print('')
print('')

user_choice = user_choice.lower

print (gameplay(user_choice))

【问题讨论】:

  • 'print' != 'return',它们是完全不同的两个东西。

标签: python function printing nonetype


【解决方案1】:
user_choice = user_choice.lower

print (gameplay(user_choice))

我看到了两个问题。首先,lower 需要括号,否则user_choice 将是一个函数对象而不是字符串。这就是为什么即使用户输入“rock”,您的if 条件都没有通过。其次,打印gameplay 的结果将始终打印None,因为这是当您有一个return 语句之后没有任何内容时返回的内容。 (或者如果您根本没有退货声明)。

user_choice = user_choice.lower()

gameplay(user_choice)

【讨论】:

  • 太棒了。我在测试周期中删除了 return 语句,仍然得到“None”,lower() 是缺少的键。一旦我改变了它并删除了空返回,程序就会按预期运行。
【解决方案2】:

您有一个空的return 语句,它将返回None。所有打印都在函数本身内完成,因此您不需要打印gameplay(user_choice),也不需要在函数中包含return 语句。只需调用它,它就会按照您的预期进行。 None 是该函数调用的返回值,因此会被打印出来。

编辑:正如其他海报所注意到的,user_choice.lower 需要括号才能正常工作

【讨论】:

    【解决方案3】:

    您可能正在尝试执行以下操作:

    def gameplay (user_choice):
        dealer_choice = rkprsr.pop()
        if user_choice == 'rock' and dealer_choice == 'paper':
            return 'You selected rock and I selected paper. My paper covers your rock. You lose.'
        elif user_choice == 'rock' and dealer_choice == 'scissors':
            return 'You selected rock and I selected scissors. Your rock crushes my scissors. You win!'
        elif user_choice == 'rock' and dealer_choice == 'rock':
            return 'You selected rock and I selected rock. Stalemate. We tied.'
    

    函数gameplay返回一个字符串,如果您愿意,可以在外部范围内打印。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-10
      • 2018-03-08
      • 2015-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多