2016-03-24 11 views
0

私が習っていることを練習するために私はいくつかのスクリプトを作ろうとしていますが、次のスクリプトに関するいくつかの問題があります。Pythonスクリプトのエラー "関数オブジェクトの属性がfirstNameではありません

#!/usr/bin/python 
def empInfoEntry(): 
    firstName = input("Enter Employee's First Name: ") 
    lastName = input("Enter Employee's Last Name: ") 
    address = input("Enter Employee's Address: ") 
    city = input("Enter Employee's City: ") 
    state = input("Enter Employee's Complete State: ") 
    zip = input("Enter Employee's Zip Code: ") 

def empInfo(): 
    empFirstName = empInfoEntry.firstName 
    empLastName = empInfoEntry.lastName 
    print (empFirstName + " " + empLastName) 
    empAddress = empInfoEntry.address 
    print (empAddress) 
    empCity = empInfoEntry.city 
    empState = empInfoEntry.state 
    empZip = empInfoEntry.zip 
    print (empCity + ", " + empState + " " + empZip) 


empInfoEntry() 
empInfo() 

エラー「未処理はAttributeError「による「機能;オブジェクトには属性がありません 『firstNameの』」

私はそれを見てきたが、私は見つけるの結果のほとんどが把握するのは非常に複雑で混乱している私ここで問題を起こす。

私はこのスクリプトを実行するとき、それは私はすべての情報を入力することができますので、それは動作しますempInfoEntry()

で始まっていることを知っている。

しかし、empInfo()は私にその関数のエラーを与えているようです。私は単純なprint (firstName)を使ってみましたが、それは関数の外にあることがわかりました。 (empInfoEntry.firstName)を印刷してもエラーになります。

返品はありませんので、私は想像することができますが、私はまだ人々が主張するように返品について少し混乱しています。

すべてのeli5応答は理解できますが、完全な説明も同様に機能します。

ありがとうございました。また、Windows 8の

+2

あなたはいない関数、クラスを使用する必要があります。https://docs.python.org/3.4/tutorial/classes.html –

+0

は、なぜあなたはempInfoEntry.firstName'が動作するために '期待していますか? 'empInfoEntry'は呼び出すことができる関数です(複数回) - そのデータはどこに格納されますか? – poke

+0

マニアック、ありがとう、私はクラスをもっと見て、よりよく理解する必要があります。 Poke、私は 'empInfoEntry.firstName'が動作することを期待しました。なぜなら、私はそれをクラスではなく関数にする必要があることを理解していなかったからです。 私が述べたように、私は自分の練習用のスクリプトを作り、料理本に従うのではなく、それを当然と考えています。 ご回答いただきありがとうございます。 – James

答えて

1

で、raw_input()を使用するようにしてくださいinput()の代わりに。 official documentationによれば、input()は、実際には、eval(raw_input())である。 eval()が何であるかを知りたい場合は、ドキュメントをチェックしてください。ここではそれについては説明しません。私はそれがPython 2だと思って申し訳ありません。

Pythonの学習を始めるには遠くないと思われるので、私はあなたのためのクラスを書いていません。関数と基本的なデータ構造を使用するだけです。

もし興味があれば、pep8にPythonの命名規則をチェックしてください。

#!/usr/bin/python 

def enter_employee_info_and_print(): 
    # use a dictionary to store the information 
    employee_info = {} 

    employee_info['first_name'] = input("Enter Employee's First Name: ") 
    employee_info['last_name'] = input("Enter Employee's Last Name: ") 
    employee_info['address'] = input("Enter Employee's Address: ") 
    employee_info['city'] = input("Enter Employee's City: ") 
    employee_info['state'] = input("Enter Employee's Complete State: ") 
    employee_info['zip'] = input("Enter Employee's Zip Code: ") 

    first_name = employee_info['first_name'] 
    last_name = employee_info['last_name'] 
    # pay attention that there is no space between `print` and `(` 
    print(first_name + " " + last_name) 
    address = employee_info['address'] 
    print(address) 
    city = employee_info['city'] 
    state = employee_info['state'] 
    zip = employee_info['zip'] 
    print(city + ", " + state + " " + zip) 

# use this statement to run a main function when you are directly running the script. 
if __name__ == '__main__': 
    enter_employee_info_and_print() 
0

上のpython 3.4とエリック6を使用して

はこれを試してみてください。私はこれがあなたの探しているものだと思います。

class InfoEntry(object): 
    def __init__(self): 
    self.first_name = input("Enter your first name:") 
    self.last_name = input("Enter your last name:") 

    def __str__(self): 
    return self.first_name + " " + self.last_name 

me = InfoEntry() 
print(me) 

機能canが属性を持っていますが、あなたが情報を保持するために何か、あなたが演繹的に知っているのフォーマットをするとき、あなたが望む事はまずclass

+0

これらの 'first_name'と' last_name'の参照はすべて、それらの前に 'self.'が必要です。 – poke

+0

これは、テキストメッセージのようにコードを書くときに起こります。 = cD – Scott

+0

私はこの方法も好きですが、これはまだ準備が整っているよりも少し進んだと思います。あなたの答えをありがとう。それはもっと意味をなさない。 – James

関連する問題