Найти - Пользователи
Полная версия: Использование if в модуле
Начало » Python для новичков » Использование if в модуле
1 2 3
totiks
Решил изучить 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 не принимает нужные ему значения?
Budulianin
totiks

Код в теги

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

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

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

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

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

как все стало прозрачно и понятно
from  modul1 import q,rez

totiks
Доброго вечера всем,и вот снова у меня возник вопрос по модулям,мной созданы два модуля в одном такой код:
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,подскажите пожалуйста, как это выглядит для этой части кода,и мои извинения за столь элементарные вопросы…не нашел кусочков кода отвечающих за перезагрузку модуля.Спасибо.
Budulianin
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)
totiks
Budulianin
Спасибо,но почему-то интерпретатор, не хочет это исполнять из скрипта,пишет line 11, in <module>
reload(m1)
NameError: name ‘m1’ is not defined, то есть как и в прошлом случае он не получил имя модуля ,хотя я в скрипте написал его так
reload(m1)
reload(m2)
, в конечнеом итоге меня удоволетворило что второй раз команда import не импортирует а прочитывает его из пространства имен,большое вам спасибо!
Budulianin
totiks
NameError: name ‘m1’ is not defined
Чтобы что-то перезагрузить, нужно это сначала загрузить.

Импорт сначала надо сделать, он же пишет тебе, что m1 не определена.
totiks
он так отреагировал вот на этот код :
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()
вроде импорт был в начале программы,…
Budulianin
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
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