Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 7, 2011 00:27:42

DoK
От:
Зарегистрирован: 2011-01-07
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Обращение

У меня есть 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 из второго файла к первому?



Офлайн

#2 Янв. 7, 2011 00:53:36

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

Обращение

перенести определение функции beg2 в модуль data12



Офлайн

#3 Янв. 7, 2011 00:54:59

guranvir
От:
Зарегистрирован: 2010-03-16
Сообщения: 186
Репутация: +  0  -
Профиль   Отправить e-mail  

Обращение

Так Вам надо сделать импорт main в data12.py



Офлайн

#4 Янв. 7, 2011 01:05:24

DoK
От:
Зарегистрирован: 2011-01-07
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Обращение

Вообщем вот полные исходники:
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, а после все должно повториться. Кто поможет - буду безмерно благодарен).



Отредактировано (Янв. 7, 2011 01:11:40)

Офлайн

#5 Янв. 7, 2011 01:27:30

bazooka
От:
Зарегистрирован: 2009-04-12
Сообщения: 165
Репутация: +  0  -
Профиль   Отправить e-mail  

Обращение

сори что не в тему но точку с запятой не обязательно ставить в конце строки



Офлайн

#6 Янв. 7, 2011 01:34:59

DoK
От:
Зарегистрирован: 2011-01-07
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Обращение

bazooka
сори что не в тему но точку с запятой не обязательно ставить в конце строки
Это издержка из других языков, уже привык). Без нее код глаза режит.



Отредактировано (Янв. 7, 2011 01:37:33)

Офлайн

#7 Янв. 7, 2011 09:11:19

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Обращение

Для начала уберите точку с запятой. А то глаз режет всем остальным. Теперь главное: у вас совершенно неправильный подход к задаче. Храните свои вопросы в виде, например, списка словарей в модуле data.py, что-то типа:

[
{ 'subject': u'Химия',
'levels': [
{'verbal': u'Легкий',
'questions': [
{'question': 'u'Какая валентность у водорода?', 'answers': ['1','2', '3', '4'], 'right': 1},
...
]
},
...
]
},
...
]
И в основном модуле процедуру которая будет опрашивать пользователя на основе этих данных, и никаких циклических импортов не понадобится. А со временем можно будет и данные в базу перенести ;)



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#8 Янв. 7, 2011 15:06:11

DoK
От:
Зарегистрирован: 2011-01-07
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Обращение

PooH
Для начала уберите точку с запятой. А то глаз режет всем остальным. Теперь главное: у вас совершенно неправильный подход к задаче. Храните свои вопросы в виде, например, списка словарей в модуле data.py, что-то типа:
[
{ 'subject': u'Химия',
'levels': [
{'verbal': u'Легкий',
'questions': [
{'question': 'u'Какая валентность у водорода?', 'answers': ['1','2', '3', '4'], 'right': 1},
...
]
},
...
]
},
...
]
И в основном модуле процедуру которая будет опрашивать пользователя на основе этих данных, и никаких циклических импортов не понадобится. А со временем можно будет и данные в базу перенести ;)
Можно, пожалуйста, поподробнее на этому тему. Питон изучаю третий день. Я понять не могу что это, как к этому обратиться и как это дополнять)



Отредактировано (Янв. 7, 2011 15:22:30)

Офлайн

#9 Янв. 7, 2011 17:39:59

bazooka
От:
Зарегистрирован: 2009-04-12
Сообщения: 165
Репутация: +  0  -
Профиль   Отправить e-mail  

Обращение

почитай че такое циклы



Офлайн

#10 Янв. 7, 2011 18:02:00

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Обращение

guranvir
Так Вам надо сделать импорт main в data12.py
это вредно, т.к. подключится не загруженный модуль main, а загрузиться дубль модуля

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version