初学者问题:从 Python 中的函数返回布尔值

Posted

技术标签:

【中文标题】初学者问题:从 Python 中的函数返回布尔值【英文标题】:Beginner question: returning a boolean value from a function in Python 【发布时间】:2011-05-09 03:11:06 【问题描述】:

我试图让这个剪刀石头布游戏返回一个布尔值,如将 player_wins 设置为 True 或 False,这取决于玩家是否获胜,或者完全重构此代码以使其不t 使用 while 循环。 我来自世界的系统管理员,所以如果写错了,请保持温柔。 我已经尝试了一些事情,并且我了解 TIMTOWTDI,并且想要一些输入。

谢谢。

import random

global player_wins
player_wins=None

def rps():

    player_score = 0
    cpu_score = 0

    while player_score < 3 and cpu_score < 3:

        WEAPONS = 'Rock', 'Paper', 'Scissors'

        for i in range(0, 3):
          print "%d %s" % (i + 1, WEAPONS[i])

        player = int(input ("Choose from 1-3: ")) - 1
        cpu = random.choice(range(0, 3))

        print "%s vs %s" % (WEAPONS[player], WEAPONS[cpu])
        if cpu != player:
          if (player - cpu) % 3 < (cpu - player) % 3:
            player_score += 1
            print "Player wins %d games\n" % player_score
          else:
            cpu_score += 1
            print "CPU wins %d games\n" % cpu_score
        else:
          print "tie!\n"
rps()

我正在尝试做这样的事情:

   print "%s vs %s" % (WEAPONS[player], WEAPONS[cpu])
    if cpu != player:
      if (player - cpu) % 3 < (cpu - player) % 3:
        player_score += 1
        print "Player wins %d games\n" % player_score
        if player_score == 3:
            return player_wins==True
      else:
        cpu_score += 1
        print "CPU wins %d games\n" % cpu_score
        if cpu_score == 3:
            return player_wins==False
    else:
      print "tie!\n"

【问题讨论】:

平局应该返回什么布尔值? 因为它在一个while循环中,所以领带只会让你回到开头。重赛! 我认为这不是一个对编程有正确理解的好项目吗? matt,试着做一些能让你更多地思考这个过程的项目。请改用 Project Euler (projecteuler.net) 解决问题。 “我明白 TIMTOWTDI”——你一定把 Python 和 Perl 混淆了;)“应该有一种——最好只有一种——明显的方法。虽然这种方法可能并不明显一开始除非你是荷兰人。” (PEP 20 又名 Python 之禅);) 【参考方案1】:

您是否尝试过使用“return”关键字?

def rps():
    return True

【讨论】:

【参考方案2】:

忽略重构问题,您需要了解函数和返回值。你根本不需要全局。曾经。你可以这样做:

def rps():
    # Code to determine if player wins
    if player_wins:
        return True

    return False

然后,只需为该函数外部的变量赋值,如下所示:

player_wins = rps()

它将被分配你刚刚调用的函数的返回值(True 或 False)。


在 cmets 之后,我决定用惯用的方式添加,这样可以更好地表达:

 def rps(): 
     # Code to determine if player wins, assigning a boolean value (True or False)
     # to the variable player_wins.

     return player_wins

 pw = rps()

这会将player_wins(函数内部)的布尔值分配给函数外部的pw 变量。

【讨论】:

啊,我明白了。我明白了,谢谢。我将更新这篇文章以反映解决方案。 这段代码看得我眼花...应该是return player_wins 当然,Rafe,但为了说明目的,这并不那么清楚。 去掉if expression: return True会更清楚。 好的,我添加了惯用的 Python。我仍然认为它不太清楚,因为它需要对return 的了解比你对从未使用过它的人所能想象的要多。

以上是关于初学者问题:从 Python 中的函数返回布尔值的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Javascript 中的连续函数返回布尔值?

如何将从函数返回的布尔值分配给 PostgreSQL 9.4 中的变量?

strcmp返回值布尔类型的判断

始终返回相同布尔值的 Python 函数

从 Objective-C 中的 ColdFusion 布尔返回类型获取 BOOL 的更好方法?

从 SQL 函数返回布尔值