2017-02-17 19 views
0

Я довольно новичок в кодировании, и в настоящее время изучаю свой первый язык (python), используя книгу «Learn Python the Hard Way», но это не конкретное упражнение в книге, и я просто тренируюсь, пока я читаю код для Упражнение 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

Okey, вот несколько вещей.
Сначала я скажу, какие очевидные вещи не соответствуют вашему коду.
После этого я покажу вам пример вашего кода, используя классы.

Итак, первое:
age, weight, height все определены в pr1.py, так Eiter вам нужно обратиться к ним, как pr1.age, pr1.weight, pr1.height, или вы from pr1 import age, weight, height. То же самое относится к race, gender, language в pr2.py
Это означает, что вы можете рассчитывать на то, что вы ввели для распечатки. Но вы присвоили этим переменным только 'a', 'b', 'c', 'x', 'y' и 'z'.
Также вы печатаете age, weight and height, прежде чем вы даже запустить func() в pr2.py

Так второй: как мы это исправить. Сначала вам нужно подумать о том, в каком порядке происходят события, когда вы импортируете. Также вам нужно подумать, если переменные, на которые вы ссылаетесь, действительно установлены где угодно.
В этом случае вы установите для параметра raw_input значение переменной insde, и они будут доступны только внутри этой функции.
Это может быть исправлено с помощью глобалов или путем создания объекта. Я буду рекомендовать использовать объект (классы).
Поскольку вы говорите, что вы довольно новичок в программировании, классы теперь могут казаться вам над головой, но когда вы его получите, он решает многие из этих проблем.
Также вы скоро доберетесь до классов в 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

@ Нильс, ты добрый. – EL3PHANTEN