【问题标题】:Python2.7: What is wrong with this program? It runs but the weird traceback errorPython2.7:这个程序有什么问题?它运行但奇怪的回溯错误
【发布时间】:2026-02-19 04:10:01
【问题描述】:

程序运行良好。但是有这个错误(截图)。它只是空白。它的Python 2.7。我也将 Python 添加到环境变量中,但 shell 上也没有显示任何内容。

石头剪刀布密码

import random
import time

rock = 1
paper = 2
scissors = 3

names = { rock: "Rock" , paper: "Paper" , scissors: "Scissors" }
rules = { rock: scissors , paper :rock , scissors: paper }

player_score = 0
computer_score = 0

def start():

    print "Let's play a game of rock paper and scissors"
    while game():
        pass
    scores()


def game():
    player = move()
    computer = random.randint(1,3)
    result(player, computer)
    return play_again()

def move():
    while True:
        print
        player = raw_int("Rock = 1\nPaper = 2\nScissors =3\nMake a move: ")

        try:
            player = int(player)
            if player in (1,2,3):
                return player
        except ValueError:
            pass
            print "Oops! I didn't understand that. Please enter 1,2 or 3."

def result(player, computer):
    print "1..."
    time.sleep(1)
    print "2..."
    time.sleep(1)
    print "3..."
    time.sleep(0.5)

    print "Computer threw {0)!".format(names[computer])

    global player_score,computer_score

    if player == computer:
        print "Tie game."


    else:
        if rules[player] == computer:
            print "Your victory has been assured."
            player_score += 1

        else:
            print" The computer laughs as you realise you have been defeated."
            computer_score += 1


        def play_again():
            answer = raw_input("Would you like to play again? y/n: ")
            if answer in ("Y", "Y" , "yes" , "Yes" , "Of course!"):
                return answer
            else:
                print "Thank you very much for playing our game.See your next time!"

        def scores():
            global player_score,computer_score
            print "High Scores"
            print "Player:" , player_score
            print "Computer:", computer_score

        if _name_ == '_main_':
          start()

错误:

Traceback(最近一次调用最后一次):文件 “C:/Users/Sarthak/Desktop/RPS.py”,第 80 行,在 如果 name == 'main': NameError: name 'name' is not defined

【问题讨论】:

  • 您的if __name__ == '__main__' 没有正确缩进,现在它在您的scores 函数的范围内
  • @MaxNoe 感谢它现在运行,但回溯错误。上面添加了截图。
  • Traceback(最近一次调用最后一次):文件“C:/Users/Sarthak/Desktop/RPS.py”,第 80 行,在 如果 name == 'main': NameError: name 'name' is not defined
  • "pleaseSuggest a..." ---这个问题与你的主要问题完全无关。通常,我会告诉您为每个新主题创建一个新问题,但 this 类型的问题在Help Center 的“ What topics can I ask about here?" 页面(禁止主题#4),所以删除它。 Googling "Python tutorial" 会告诉你具体去哪里。
  • 请不要编辑您的问题以包含新问题。相反,创建一个新问题。我还建议您在问下一个问题之前阅读*.com/help/how-to-ask,因为您似乎还没有掌握在 Stack Overflow 上提问的一些规则。

标签: python python-2.7


【解决方案1】:

您应该修复缩进和所有其他错误:

import random
import time

rock = 1
paper = 2
scissors = 3

names = { rock: "Rock" , paper: "Paper" , scissors: "Scissors" }
rules = { rock: scissors , paper :rock , scissors: paper }

player_score = 0
computer_score = 0

def start():

    print "Let's play a game of rock paper and scissors"
    while game():
        pass
    scores()


def game():
    player = move()
    computer = random.randint(1,3)
    result(player, computer)
    return play_again()

def move():
    while True:
        print #this is not how you could get int input in Python
        player = raw_int("Rock = 1\nPaper = 2\nScissors =3\nMake a move: ")

        try:
            player = int(player)
            if player in (1,2,3):
                return player
        except ValueError:
            pass
        print "Oops! I didn't understand that. Please enter 1,2 or 3." #note the indentation here

def result(player, computer):
    print "1..."
    time.sleep(1)
    print "2..."
    time.sleep(1)
    print "3..."
    time.sleep(0.5)

    print "Computer threw {0)!".format(names[computer])

    global player_score,computer_score

    if player == computer:
        print "Tie game."


    else:
        if rules[player] == computer:
            print "Your victory has been assured."
            player_score += 1

        else:
            print" The computer laughs as you realise you have been defeated."
            computer_score += 1


def play_again(): #again, indentation
    #and this is not how you could get string input in Python
    answer = raw_input("Would you like to play again? y/n: ")
    if answer in ("Y", "Y" , "yes" , "Yes" , "Of course!"):
        return answer
    else:
        print "Thank you very much for playing our game.See your next time!"

def scores(): #note the indentation here
    global player_score,computer_score
    print "High Scores"
    print "Player:" , player_score
    print "Computer:", computer_score

if __name__ == '__main__': #note the underscores here
  start()

【讨论】:

  • 我是 Python 新手。如何调用 start()?我确实打电话给它。但是然后有这个错误 uni dented doesn't match the outer indentation level
  • 如回答者所示,您只需将start() 粘贴在程序底部即可。
  • @BHouwens 我确实把它贴在了底部。但随后出现错误 Unidented doesn't match external identation level。
  • @SarthakBhatia 在你的程序底部调用它并且不要任何缩进
  • @BHouwens 现在有一个 Traceback(最近一次调用最后一次):文件“C:/Users/Sarthak/Desktop/RPS.py”,第 80 行,在 if name == 'main': NameError: name 'name' is not defined