2010-11-12 38 views
8

Tôi đang cố gắng lấy trò chơi kéo giấy bằng đá này để trả về giá trị Boolean, như trong tập hợp player_wins thành True hoặc False, tùy thuộc vào người chơi thắng hay để cấu trúc lại mã này hoàn toàn để nó không sử dụng vòng lặp while. Tôi đến từ phía sysadmin của thế giới, vì vậy hãy nhẹ nhàng nếu điều này được viết theo phong cách sai. Tôi đã thử một vài điều, và tôi hiểu TIMTOWTDI, và chỉ muốn một số đầu vào.Câu hỏi mới bắt đầu: trả về giá trị boolean từ một hàm trong Python

Cảm ơn.

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() 

Tôi đang cố gắng để làm một cái gì đó như thế này:

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" 
+1

Giá trị boolean nào sẽ được trả lại cho cà vạt? –

+0

Bởi vì nó nằm trong một vòng lặp while, các mối quan hệ chỉ đưa bạn trở lại ngay từ đầu. REMATCH! – matt

+0

Tôi lấy nó đây không phải là một dự án tốt để đạt được một sự hiểu biết đúng đắn về lập trình? – matt

Trả lời

24

Bỏ qua các vấn đề về tái cấu trúc, bạn cần hiểu chức năng và trả về giá trị. Bạn không cần toàn cầu chút nào. Không bao giờ. Bạn có thể làm điều này:

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

    return False 

Sau đó, chỉ cần gán giá trị cho biến bên ngoài chức năng này như sau:

player_wins = rps() 

Nó sẽ được gán giá trị trả về (hoặc Đúng hay Sai) của hàm bạn vừa gọi.


Sau các ý kiến, tôi quyết định thêm rằng idiomatically, điều này sẽ được thể hiện tốt hơn như sau:

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() 

này gán giá trị boolean của player_wins (bên trong hàm) vào biến pw ngoài chức năng.

+1

Ah, tôi hiểu rồi. Tôi hiểu rồi. Tôi sẽ cập nhật bài đăng này để phản ánh giải pháp. – matt

+2

Mã này làm đau mắt tôi ... nó phải là 'return player_wins' –

+0

Chắc chắn, Rafe, nhưng điều đó sẽ không rõ ràng cho các mục đích minh họa. – syrion

2

Có bạn cố gắng sử dụng các từ khoá 'trở lại'?

def rps(): 
    return True 
Các vấn đề liên quan