Найти - Пользователи
Полная версия: Обращение
Начало » Python для новичков » Обращение
1 2
DoK
У меня есть 2 файла: main.py и data12.py. Из файла мейн я обращаюсь к дате:

import data12 

print u'Начинаем';
data12.begin1();

def beg2():
print u'Продолжаем';
Все идет нормально, но вот где проблема, файл data12.py:

def begin1(): 
print 'Its work';
beg2();
Он мне пишет: NameError: global name ‘beg2’ is not defined.

Как правильно обратиться к блоку def из второго файла к первому?
dimabest
перенести определение функции beg2 в модуль data12
guranvir
Так Вам надо сделать импорт main в data12.py
DoK
Вообщем вот полные исходники:
main.py:
# -*- coding: utf-8 -*-

import time
import random
import data12

x=0;

def ea1():
test1 = random.choice([1,2,3,4]);
if (test1 == 1):
data12.ea1_1();
elif (test1 == 2):
data12.ea1_2();
elif (test1 == 3):
data12.ea1_3();
elif (test1 == 4):
data12.ea1_4();

def chimia1():
print '';
print u'Выберите сложность:';
print '-------------------------';
print u'(1) - Легко';
print u'(2) - Средний';
print u'(3) - Сложно';
print '-------------------------';
ch2 = input('----> ');
if (ch2 == 1):
ea1();
elif (ch2 == 2):
ea2();
elif (ch2 == 3):
ea3();
else:
print u'Ошибка!';
start1();

def start1():
print '';
print u'Выберите раздел:';
print '-------------------------';
print u'(1) - Химия';
print '-------------------------';
ch1 = input('----> ');
if (ch1 == 1):
chimia1();
else:
print u'Ошибка!';

print u'Тесты.';
start1();
data.py:
# -*- coding: utf-8 -*-

import time
import random

x=0;

def ea1_1():
print '';
print u'Какая валентность у водорода?';
print '1) 1';
print '2) 2';
print '3) 3';
print '4) 4';
an1 = input('----> ');
if (an1 == 1):
print u'Верно!';
time.sleep(1);
global x;
x += 1;
ea1();
else:
print u'Неверно!';
print u'Ваш счет: ' + `x`;
time.sleep(1);
start1();

def ea1_2():
print '';
print u'Высшая степень окисления азота?';
print '1) -3';
print '2) -1';
print '3) +4';
print '4) +5';
an1 = input('----> ');
if (an1 == 4):
print u'Верно!';
time.sleep(1);
global x;
x += 1;
ea1();
else:
print u'Неверно!';
print u'Ваш счет: ' + `x`;
time.sleep(1);
start1();

def ea1_3():
print '';
print u'Какая степень окисление у серы в молекуле: H2S';
print '1) -1';
print '2) -2';
print '3) +1';
print '4) +2';
an1 = input('----> ');
if (an1 == 2):
print u'Верно!';
time.sleep(1);
global x;
x += 1;
ea1();
else:
print u'Неверно!';
print u'Ваш счет: ' + `x`;
time.sleep(1);
start1();

def ea1_4():
print '';
print u'Связь в молекуле O2:';
print u'1) Ковалентная';
print u'2) Ионая';
print u'3) Металлическая';
print u'4) Водородная';
an1 = input('----> ');
if (an1 == 1):
print u'Верно!';
time.sleep(1);
global x;
x += 1;
ea1();
else:
print u'Неверно!';
print u'Ваш счет: ' + `x`;
time.sleep(1);
start1();
После выбора рандомного значение в параметр test1 должен пойти соотвествующий вопрос из data.py, а после все должно повториться. Кто поможет - буду безмерно благодарен).
bazooka
сори что не в тему но точку с запятой не обязательно ставить в конце строки
DoK
bazooka
сори что не в тему но точку с запятой не обязательно ставить в конце строки
Это издержка из других языков, уже привык). Без нее код глаза режит.
PooH
Для начала уберите точку с запятой. А то глаз режет всем остальным. Теперь главное: у вас совершенно неправильный подход к задаче. Храните свои вопросы в виде, например, списка словарей в модуле data.py, что-то типа:
[
{ 'subject': u'Химия',
'levels': [
{'verbal': u'Легкий',
'questions': [
{'question': 'u'Какая валентность у водорода?', 'answers': ['1','2', '3', '4'], 'right': 1},
...
]
},
...
]
},
...
]
И в основном модуле процедуру которая будет опрашивать пользователя на основе этих данных, и никаких циклических импортов не понадобится. А со временем можно будет и данные в базу перенести ;)
DoK
PooH
Для начала уберите точку с запятой. А то глаз режет всем остальным. Теперь главное: у вас совершенно неправильный подход к задаче. Храните свои вопросы в виде, например, списка словарей в модуле data.py, что-то типа:
[
{ 'subject': u'Химия',
'levels': [
{'verbal': u'Легкий',
'questions': [
{'question': 'u'Какая валентность у водорода?', 'answers': ['1','2', '3', '4'], 'right': 1},
...
]
},
...
]
},
...
]
И в основном модуле процедуру которая будет опрашивать пользователя на основе этих данных, и никаких циклических импортов не понадобится. А со временем можно будет и данные в базу перенести ;)
Можно, пожалуйста, поподробнее на этому тему. Питон изучаю третий день. Я понять не могу что это, как к этому обратиться и как это дополнять)
bazooka
почитай че такое циклы
o7412369815963
guranvir
Так Вам надо сделать импорт main в data12.py
это вредно, т.к. подключится не загруженный модуль main, а загрузиться дубль модуля
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB