使用python类属性上的用户输入命名错误

时间:2017-09-21 11:57:55

标签: python python-3.x

我正在办公室为新手启动一个非常简单的基于文本的RPG。目前,我正在尝试使用用户输入来创建类的实例。使用自己的输入定义播放器。

这是我目前的代码:

# DEFINE CLASSES #
class Character:
    def __init__(self, name, dept):
        self.name=name
        self.dept=dept
class Player(Character):
    def __init__(self, name, dept, level):
        super().__init__(name, dept)
        self.level = level
class Item:
    def __init__(self, name, position, unlocked):
        self.name=name
        self.position = position
        self.unlocked = unlocked
# USER INPUT # 
User = Player(str(input("What is your name?")),str(input("What dept do you work for?")),1)

目标是使用属性名称和部门的用户输入创建“Player”类的实例。

但是,运行代码当前会产生NameError:name'(无论输入是什么)'未定义

我确信它是非常基本的东西,因为我是python的新手。非常欢迎任何帮助!

2 个答案:

答案 0 :(得分:0)

我猜你正在使用python 2运行脚本。我能够在python 3中运行脚本而不会出错。请使用python 3运行脚本。

python3 your-script.py

在python 2中,您将使用raw_input()内置函数将用户输入作为字符串。 raw_input()函数接受用户输入并将其转换为字符串(声明为here)。 调用python 2内置input()函数与在raw_input()函数的输出上调用eval()相同。因此这两个电话是相同的:

a = input("Enter a number: ")  
b = eval(raw_input("Enter a number: ")

在python 3中,raw_input()内置函数不存在。要获得用户输入,您可以使用input()内置函数。 python 3中的input()相当于python 2中的raw_input()

答案 1 :(得分:0)

来自Python documentation

  

输入([提示]) - >值

     

相当于eval(raw_input(prompt))。

如果您不想评估输入的文本,请改用raw_input()

正如评论中所建议的,这仅适用于Python2,但是您的错误表明您使用的是Python版本。

我建议您将以下shebang添加到您的文件中:#!/usr/bin/env python3

然后在允许执行脚本后使用./mypythongame.py启动程序

此外,您的Character类必须继承object才能使用super(Character, self).__init__()或(在Python3中)调用:super().__init__()