2017-02-17 79 views
0

我對編碼相當陌生,目前正在使用「Learn Python the Hard Way」一書學習我的第一語言(python),但這不是書中的特定練習,而我正在練習閱讀代碼練習23,我目前我只是想弄清楚,如果這甚至有可能...如何從導入的文件中的raw_input導入已定義的變量?

我的第一個文件是pr1.py:

def func(): 
    a = float(raw_input("Enter Your Age:")) 
    b = float(raw_input("Enter Your Weight:")) 
    c = float(raw_input("Enter Your Height:")) 

age = "a" 
weight = "b" 
height = "c" 


if __name__ == "__main__": 
    print("This is pr1.py") 

else: 
    print("%s is being imported to another file") % __name__ 

我的第二個文件是pr2.py

import pr1 

def func(): 
    x = raw_input("Enter Your Race:") 
    y = raw_input("Enter Your Gender:") 
    z = raw_input("Enter Your Language:") 

print "Lets find your numbers" 
pr1.func() 

print "Lets find your identity" 
func() 

race = "x" 
gender = "y" 
language = "z" 

if __name__ == "__main__": 
    print("This is pr2.py") 

else: 
    print("%s is being imported into another file") % __name__ 

這是我的第三文件pr3.py

import pr1 

print "%s = a %s = b %s = c" % (age, weight, height) 

import pr2 

print "%s = x, %s = y, %s = z" % (race, gender, language) 

當我運行pr3.py並註釋掉腳本來「打印」 3號線和7號線這是我得到:

python pr3.py 
pr1 is being imported to another file 
Lets find your numbers 
Enter Your Age:25 
Enter Your Weight:224 
Enter Your Height:76 
Lets find your identity 
Enter Your Race:white 
Enter Your Gender:male 
Enter Your Language:english 
pr2 is being imported into another file 

我期待pr3.py文件用先前定義的變量來打印這些語句。

,而是談到了這個錯誤:

pr1 is being imported to another file 
Traceback (most recent call last): 
    File "pr3.py", line 3, in <module> 
    print "%s = a %s = b %s = c" % (age, weight, height) 
NameError: name 'age' is not defined 

現在,當我的命令來運行我的最後一個文件,我期待它導入之前的2個文件,這樣我就可以輸入數據,我把到raw_input中,然後在其他文件中使用它......但是好像一旦兩個文件都被導入並且我將數據輸入到它們各自的raw_input中,看起來好像pr3.py忘記了原始輸入和它們相應的變量。

請原諒我,如果我完全缺乏可以解決所有這些問題的明顯知識,但是我對編碼非常陌生,甚至在一個月前,我甚至都不知道您可以在終端中創建一個目錄。

感謝您的閱讀,我將不勝感激任何幫助。

回答

0

奧基,這裏有幾件事。
首先我會說你的代碼有哪些明顯的錯誤。
之後,我將向您展示一個使用類的代碼示例。

所以,首先:
age, weight, height都在pr1.py定義,所以eiter你需要把它們稱爲pr1.age, pr1.weight, pr1.height,或者你from pr1 import age, weight, height。同樣適用於race, gender, languagepr2.py
也就是說,您可能會希望得到您輸入的內容以便打印出來。但您只將這些字符分配給那些變量'a','b','c','x','y''z'
還您打印age, weight and height,你甚至在pr2.py

所以第二運行func()前:我們如何解決這個問題。首先,當你進口產品時,你需要考慮事情發生的順序。你也需要考慮一下,如果你引用的變量真的被設置在任何地方。
在這種情況下,您將raw_input的變量設置爲函數中的變量,並且它們只能在該函數內部訪問。
這可以通過使用全局變量或通過一個對象來解決。我會推薦使用對象(類)。
既然你說你對編程相當陌生,現在類可能看起來頭腦發熱,但當你得到它時,它解決了很多這些問題。
你也很快就會到Learn Python The Hard Way就足夠了。

爲了把你的代碼,例如:

pr1.py:

class Numbers: 

    def func(self): 
     self.age = float(raw_input("Enter Your Age:")) 
     self.weight = float(raw_input("Enter Your Weight:")) 
     self.height = float(raw_input("Enter Your Height:")) 


if __name__ == "__main__": 
    print("This is pr1.py") 

else: 
    print("%s is being imported to another file") % __name__ 

pr2.py:

from pr1 import Numbers 

class Identity: 

    def func(self): 
     self.race = raw_input("Enter Your Race:") 
     self.gender = raw_input("Enter Your Gender:") 
     self.language = raw_input("Enter Your Language:") 


print "Lets find your numbers" 
nrs = Numbers() 
nrs.func() 

print "Lets find your identity" 
ids = Identity() 
ids.func() 


if __name__ == "__main__": 
    print("This is pr2.py") 

else: 
    print("%s is being imported into another file") % __name__ 

pr3.py:

from pr2 import * 

print "%s = a %s = b %s = c" % (nrs.age, nrs.weight, nrs.height) 

print "%s = x, %s = y, %s = z" % (ids.race, ids.gender, ids.language) 
+0

感謝您抽出寶貴深入解釋的時間,真的幫助了很多! – Niles

+0

@Niles你很好。 – EL3PHANTEN

相關問題