破碎的代码,需要帮助修复

时间:2015-08-17 11:15:08

标签: python

此代码正常运行一次,然后带来错误

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    paper
NameError: name 'paper' is not defined

我需要代码能够运行一个摇滚,纸张,蜥蜴,spock游戏,运行10次,显示10分结束时的分数(因为它去)和(或选择的数量) )比赛。 这是代码:

import random

numberofgames = raw_input("How many games do you want to play? ")

print "Please choose rock , paper , scissors , lizard, or spock (in lower case please)"
choice = raw_input("What do you choose? ")
player_choice = str(choice)
def name_to_number(name):
    if name == "rock":
        name = 0
        return name
    elif name == "spock":
        name = 1
        return name
    elif name == "paper":
        name = 2
        return name
    elif name == "lizard":
        name = 3
        return name
    elif name == "scissors":
        name = 4
        return name

def number_to_name(number):
    if number == 0:
        number = "rock"
        return number
    elif number == 1:
        number = "spock"
        return number
    elif number == 2:
        number = "paper"
        return number
    elif number == 3:
        number = "lizard"
        return number
    elif number == 4:
        number = "scissors"
        return number

try:
    computer_choice = random.randrange(5)
    player_number = name_to_number(player_choice)
    print "Player choice is: " + player_choice
    print "Computer choice is: " + number_to_name(computer_choice)
    difference = (int(player_number) - computer_choice) % 5
    draws = 0
    playerwins = 0
    computerwins = 0
    if difference in [1, 2]:
        print "Player wins!"
        playerwins = playerwins + 1
    elif difference == 0:
        print "Player and computer tie!"
        draws = draws + 1
    else:
        print "Computer wins!"
        computerwins = computerwins + 1

    print "Wins: " + str(playerwins) + "\n" + "Draws: " + str(draws) + "\n" + "Losses " + str(computerwins)

    while playerwins + draws + computerwins <= numberofgames:
        name_to_number()

except TypeError:
    print "Sorry, please read the directions and type rock, paper, scissors, spock, or lizard in lowercase."

1 个答案:

答案 0 :(得分:0)

您发布的代码会引发TypeError: name_to_number() takes exactly 1 argument (0 given)因为您在没有参数的情况下调用name_to_number函数。

顺便说一句,这是该功能的简单版本:

name_to_number_dict = dict(rock=0, spock=1, paper=2,lizard=3,scissors=4)

def name_to_number(name):
  if name not in name_to_number_dict:
    raise ValueError("illegal name")
  return name_to_number_dict[name]

修改

事实上,你根本不需要这样的功能。一种更简单的方法可能如下:

import random 

data = "rock", "spock", "paper", "lizard", "scissors"

def playgames():
  tally = dict(win=0, draw=0, loss=0)
  numberofgames = raw_input("How many games do you want to play? ")
  numberofgames = int(numberofgames)
  for _ in range(numberofgames):
    outcome = playgame()
    tally[outcome] += 1
  print """
  Wins: {win}
  Draws: {draw}
  Losses: {loss}
  """.format(**tally)

def playgame():
  choice = ""
  while (choice not in data):
    choice = raw_input("Enter choice (choose rock , paper , scissors , lizard, or spock):")
    choice = choice.lower()
  print "Player choice is:{}".format(choice)
  player_number = data.index(choice)
  computer_number = random.randrange(5)
  print "Computer choice is: {}".format(data[computer_number])
  difference = (player_number - computer_number) % 5
  if difference in [1, 2]:
    print "Player wins!"
    outcome = "win"
  elif difference == 0:
    print "Player and computer tie!"
    outcome = "draw"
  else:
    print "Computer wins!"
    outcome = "win"
  return outcome

playgames()