-3

主程序

# import statements
import random
import winning

# Set constants
win = 0
lose = 0
tie = 0

ROCK = 1
PAPER = 2
SCISSOR = 3

# Main Program for the Rock Paper Scissor game.
def main():
    # set variable for loop control
    again = 'y'

    while again == 'y':
        # Display menu
        display_menu()
        # prompt for user input
        userSelection = input('Which would you like to play with (1, 2, 3)?: ') 
        computerSelection = random.randint(1, 3) 

        # Call winner module to decide the winner!
        print(winning.winner(userSelection, computerSelection))

        # Ask to play again and make selection
        again = input('Would you like to play again (y/n)?')


def display_menu():
    print('Please make a selection: ')
    print(' 1) Play Rock')
    print(' 2) Play Paper')
    print(' 3) Play Scissor')



# Call main
main()

第二个文件:wining.py:

# This module will decide on who won based on input from Main

def winner(userInput, computerInput):
    if userInput == ROCK and computerInput == SCISSOR:
        print('You win!  Rock crushes Scissor!')
        win += 1
    elif userInput == SCISSOR and computerInput == PAPER:
        print('You win!  Scissor cuts Paper!')
        win += 1
    elif userInput == PAPER and computerInput == ROCK:
        print('You win!  Paper covers Rock!')
        win += 1
    elif userInput == computerInput:
        print('You tied with the computer! Please try again!')
        tie += 1
    else:
        print('You lost! Please try again!')
        lose += 1

错误

Traceback (most recent call last):
  File "C:/Python32/RPS_Project/Main.py", line 14, in <module>
    ROCK = r
NameError: name 'r' is not defined

我已经尝试过引号和所有,但无法弄清楚!有什么帮助吗?谢谢,麻烦您了!

4

1 回答 1

2

不要以错误的方式接受负面评论。请务必将您的作业标记为作业,并确保粘贴您发布的代码生成的实际错误。此错误与您发布的代码不匹配。

你也可以用一种看起来稍微平静的方式问你的问题:)

问题很简单。您在主程序中定义全局变量,但不在 中winning.py,因此行

if userInput == ROCK and computerInput == SCISSOR:
    print('You win!  Rock crushes Scissor!')
    win += 1

将导致 NameErrors,因为ROCKSCISSOR未定义win。在每个模块中,您必须定义或导入所有要使用的名称;名称不会在模块之间自动共享——这是有充分理由的!

我会告诉你,你还必须return有一个来自的值,从而为你省去一些麻烦winning.winner——否则,你将不会得到你期望的输出。

于 2011-07-01T03:32:23.430 回答