Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 3, 2014 20:11:56

totiks
Зарегистрирован: 2014-09-03
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование if в модуле

Решил изучить python.Переменые освоил операторы if и while освоил,вот решил добратся до функций и модулей…для обучения выбрал написание игры в кости,для этого написал модуль который генерирует комбинацию из трех костей,назвал его modul1,поместил в /usr/lib/python2.7,потом написал скрипт вот с таким содержанием :

from  modul1 import z
print'combination '+str(q)+' ockov '+str(rez)
при выполнении консоль ругается таким вот содержанием
line 2, in <module>
print'combination ‘+str(q)+’ ockov ‘+str(rez)
NameError: name ’q' is not defined

ниже привожу текст модуля:

import random
rez=0
x=int(random.random()*7)
y=int(random.random()*7)
z=int(random.random()*7)
#x=int(input('x:'))
#y=int(input('y:'))
#z=int(input('z:'))
q= (x*100)+(y*10)+z
if q==111:
	rez=x*100
elif q==222:
	rez=x*100
elif q==333:
	rez=x*100
elif q==444:
	rez=x*100
elif q==555:
	rez=x*100
elif q==666:
	rez=x*100
elif q==123 or q==231 or q==321 or q==213 or q==312 or q==132:
	rez=30
elif q==234 or q==342 or q==423 or q==324 or q==342 or q==432:
	rez=40
elif q==345 or q==354 or q==453 or q==435 or q==543 or q==534:
	rez=50
elif q==456 or q==465 or q==564 or q==546 or q==654 or q==645:
	rez=60
elif x==1 and y!=1 and y!=5 and z!=1 and z!=5  or x!=1 and x!=5 and y==1 and z!=1 and z!=5  or\
x!=1 and x!=5 and y!=1 and y!=5 and z==1 or x==5 and y==5 and z!=1 and z!=5:
	rez=10
elif x==5 and y!=5 and y!=1 and z==5 or x!=1 and x!=5 and y==5 and z==5 or x==5 and y==5 and z!=1 and z!=5:
	rez=10
elif x==1 and y==5 and z!=1 and z!=5 or x==5 and y==1 and z!=1 and z!=5 or x==5 and y!=1 and y!=5 and z==1\
or x!=1 and x!=5 and y==1 and z==5 or x!=1 and x!=5 and y==5 and z==1 or x==1 and y!=1 and y!=5 and z==5:
	rez=15
elif x==1 and y!=1 and y!=5 and z==1 or x!=1 and x!=5 and y==1 and z==1 or x==1 and y==1 and z!=1 and z!=5 or\
x==1 and y==5 and z==5 or x==5 and y==5 and z==1:
	rez=20
elif x==1 and y==1 and z==5 or x==1 and y==5 and z==1 or x==5 and y==1 and z==1:
	rez=25
elif x==5 and y!=1 and y!=5 and z!=1 and z!=5 or x!=5 and y==5 and y!=1 and z!=1 and z!=5 or x!=5 and y!=1 and y!=5 and z!=1 and z==5:
	rez=5
else:
	print''
print''

мои извинения за не приведеный текст программ под кат,я на этом форуме впервые,и еще не освоился,извините за кривой код, я только учусь.Подскажите пожалуйста почему Q и rez не принимает нужные ему значения?

Отредактировано totiks (Сен. 3, 2014 21:14:27)

Офлайн

#2 Сен. 3, 2014 20:24:08

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Использование if в модуле

totiks

Код в теги

totiks
при выполнении консоль ругается таким вот содержанием
line 2, in <module>
print’combination ‘+str(q)+’ ockov ‘+str(rez)
NameError: name ’q' is not defined

Не консоль, а интерпретатор.
Переведи текст и ты поймёшь, что нужно сначала рассказать интепретатору про ’q' и только потом ей пользоваться.



Отредактировано Budulianin (Сен. 3, 2014 20:27:10)

Офлайн

#3 Сен. 3, 2014 20:25:26

bs0d
Зарегистрирован: 2014-02-01
Сообщения: 76
Репутация: +  2  -
Профиль   Отправить e-mail  

Использование if в модуле

а перевести текст ошибки религия не позволяет? прошу в гугл.транслейт.

в вашем случае надо использовать такой импорт:

from modul1 import *
хоть такое делать категорически не рекомендуется (чтобы узнать почему - советую прочитать одну из книг, вроде М.Лутц Изучаем Python, 4е издание, которая доступна в сети)

или такой:
from modul1 import z,x,y

конкретно в вашем примере из модуля импортируется только переменная z

Отредактировано bs0d (Сен. 3, 2014 20:28:09)

Офлайн

#4 Сен. 3, 2014 20:47:10

totiks
Зарегистрирован: 2014-09-03
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование if в модуле

Спасибо вам всем,я и переводил , и по сайтам про python искал ,и в книгах,ничего не удалось найти,днем на джаббер конференции вашего форума подсказали, и сегодня вот здесь, спасибо вам еще раз!

как все стало прозрачно и понятно

from  modul1 import q,rez

Отредактировано totiks (Сен. 3, 2014 20:53:40)

Офлайн

#5 Сен. 9, 2014 19:55:52

totiks
Зарегистрирован: 2014-09-03
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование if в модуле

Доброго вечера всем,и вот снова у меня возник вопрос по модулям,мной созданы два модуля в одном такой код:

a='XXXXXXXXXXXXXXXXXXX'
в другом :
b='YYYYYYYYYYYYYYYYYYY'
,в программе в которой мной изучается работа импорта модулей 1 и 2,я написал такой код :
from mod1 import a
from mod2 import b
print a
print b
raw_input()
a=0
b=0
print a
print b
raw_input()
from mod1 import a
from mod2 import b
print a
print b
raw_input()

и таким образом програма работает,но в книге Лутца я прочитал,что некоректно каждый раз импортировать этот модуль,а правильно его просто перезагрузить,используя reload,подскажите пожалуйста, как это выглядит для этой части кода,и мои извинения за столь элементарные вопросы…не нашел кусочков кода отвечающих за перезагрузку модуля.Спасибо.

Отредактировано totiks (Сен. 9, 2014 19:56:52)

Офлайн

#6 Сен. 9, 2014 20:14:29

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Использование if в модуле

totiks
некоректно каждый раз импортировать этот модуль,
Фактически, он не будет импортироваться второй раз. Интепретатор куда-то посмотрит(а вот куда интерересно?) и увидет импортированный ранее модуль.

создали модуль modmod
импортируем его:
>>> import modmod
>>> modmod.a
3
в это время изменили в модуле переменную a
но в оболочке всё ещё загружен старый вариант модуля(пробуем импортировать второй раз и видим, что изменений не происходит)
>>> import modmod
>>> modmod.a
3
по какой-то глупой причине, мы не хотим перезапускать интепретатор,
но модуль обновить хотим, тогда:
>>> reload
<built-in function reload>
>>> reload(modmod)
<module 'modmod' from 'modmod.py'>
>>> modmod.a
5

В итоге интепретатор не перезапускали, но меняли код в модуле и видели эти изменения(после reload)



Отредактировано Budulianin (Сен. 9, 2014 20:28:56)

Офлайн

#7 Сен. 9, 2014 20:47:38

totiks
Зарегистрирован: 2014-09-03
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование if в модуле

Budulianin
Спасибо,но почему-то интерпретатор, не хочет это исполнять из скрипта,пишет line 11, in <module>
reload(m1)
NameError: name ‘m1’ is not defined, то есть как и в прошлом случае он не получил имя модуля ,хотя я в скрипте написал его так

reload(m1)
reload(m2)
, в конечнеом итоге меня удоволетворило что второй раз команда import не импортирует а прочитывает его из пространства имен,большое вам спасибо!

Отредактировано totiks (Сен. 9, 2014 20:48:54)

Офлайн

#8 Сен. 9, 2014 21:00:18

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Использование if в модуле

totiks
NameError: name ‘m1’ is not defined
Чтобы что-то перезагрузить, нужно это сначала загрузить.

Импорт сначала надо сделать, он же пишет тебе, что m1 не определена.



Офлайн

#9 Сен. 9, 2014 21:09:05

totiks
Зарегистрирован: 2014-09-03
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование if в модуле

он так отреагировал вот на этот код :

from m1 import a
from m2 import b
print a
print b
raw_input()
a=0
b=0
print a
print b
raw_input()
reload(m1)
reload(m2)
print a
print b
raw_input()
вроде импорт был в начале программы,…

Отредактировано totiks (Сен. 9, 2014 21:10:12)

Офлайн

#10 Сен. 9, 2014 21:17:31

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Использование if в модуле

totiks
вроде импорт был в начале программы,…

Ты импортировал переменную, a не модуль.
Прочитай, как происходит импорт(в книге).


>>> locals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None}
>>> from modmod import a
>>> locals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, 'a': 999999999999999, '__package__': None}
>>> modmod
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'modmod' is not defined



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version