2017-09-21 38 views
0

我正在爲我的辦公室中的新起始者構建一個非常簡單的基於文本的RPG。目前,我正嘗試使用用戶輸入來創建一個類的實例。使用自己的輸入定義玩家。在Python類屬性上使用用戶輸入的名稱錯誤

這是我當前的代碼:

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

的目標是類「球員」的實例與屬性名稱和部門用戶輸入創建的。

但是運行代碼目前給出了一個NameError:名字「(無論輸入)」沒有定義

我敢肯定,這東西真的基本的,因爲我是新來的蟒蛇。任何幫助非常歡迎!

回答

0

Python documentation

input([prompt]) -> value

Equivalent to eval(raw_input(prompt)).

如果你不想被評估在輸入的文本,使用raw_input()代替。

正如評論中所建議,這僅適用於Python2,但是您的錯誤表明這是您正在使用的Python版本。

我建議你添加下面的家當給您的文件:#!/usr/bin/env python3

然後用./mypythongame.py啓動程序你允許腳本執行後

此外,您Character類必須從object在繼承爲了可以用super(Character, self).__init__()或(在Python3中)來調用:super().__init__()

+0

請注意,問題標記爲「python-3.x」,它表明提交者至少*意欲*在Python 3中編寫它。'raw_input()'在Python 3中無效。 – glibdud

+0

感謝您的回覆,你能解釋你最後一句話中的含義嗎? (我用Python 3編寫,順便說一句,我在Python2中執行起來很愚蠢) – Neb

+0

@Neb這仍然只對Python2有效 – gogaz

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()input()在Python 3相當於raw_input()在Python 2

+1

對* why *的解釋會很有用。 – SiHa

+0

謝謝。我在Python3中編寫,但在Python2中執行。很高興知道我不會生氣! – Neb