Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 30, 2012 19:53:25

Protoss
От: Айур
Зарегистрирован: 2012-11-24
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос о списке

Всем привет!
Ребят, не подскажите, как в списке выводить не только значение переменной, но и ее саму?
Например:

a= 10
b=20
c=30
list=[a*1,b*2,c*3]
for x in list:
     print x
так вот писаться это будет так:
10
40
90
Собственно вопрос, как можно назвать их?Например, чтоб ответ был
a1=10
b1=40
c1=90

Отредактировано Protoss (Ноя. 30, 2012 19:53:46)

Офлайн

#2 Ноя. 30, 2012 21:17:27

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Вопрос о списке

1 не надо переопределять одну из основных функций - list

после выполнения инструкции

list=[a*1,b*2,c*3]
никаких следов a b c в списке нет.
a=30
b=20
c=a
for i in ["a","b","c"]:
    print i,locals()[i]
Заметьте - a и c одна переменная.

Как должно печататься для случая?
[a*1,b*10,a*b*c+math.sin(33)]



Отредактировано doza_and (Ноя. 30, 2012 21:19:16)

Офлайн

#3 Ноя. 30, 2012 21:27:17

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Вопрос о списке

Зачем Вам в этом случае списки. Попробуйте лучше словари…
Нужен пример, могу привести…



Офлайн

#4 Ноя. 30, 2012 22:13:46

Protoss
От: Айур
Зарегистрирован: 2012-11-24
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос о списке

Просто дело в том, что у меня куча переменных. И в одном месте по желанию пользователя они должны быть пересчитаны. Например

def sf(prompt):
    error_message = "Value must be integer and greater or equal than zero"
    while True:
        val = raw_input(prompt)
        try:
            val = float(val)
        except ValueError:
            print(error_message)
            continue
        if val <= 0:
            print(error_message)
            continue
        return val
def MicroElements ():
    print "Please enter microelements"
    
    Sc = sf("Sc: ")    
    V  = sf("V: ")    
    Cr = sf("Cr: ")    
    Co = sf("Co: ")    
    Ni = sf("Ni: ")      
    Rb = sf("Rb: ")   
    Sr = sf("Sr: ")    
    Ba = sf("Ba: ")       
    Zr = sf("Zr: ")   
    Hf = sf("Hf: ")    
    Nb = sf("Nb: ")
    Ta = sf("Ta: ")   
    Th = sf("Th: ")  
    U =  sf("U: ")   
    Be = sf("Be: ")      
    Li = sf("Li: ") 
    B= sf("B: ")    
    W  = sf("W: ")    
    Mo = sf("Mo: ")    
    Sn = sf("Sn: ")    
    Cd = sf("Cd: ")      
    Sc = sf("Sc: ")  
    Ag = sf("Ag: ")
    Cu = sf("Cu: ")
    Pb = sf("Pb: ")
    Zn = sf("As: ")
    Bi = sf("Bi: ")
    Ce = sf("Ce: ")
    Sb = sf("Sb: ")
    As = sf("As: ")
    Ge = sf("Ge: ")
    Ga = sf("Ga: ")
    Y = sf("Y: ")
    Cs = sf("Cs: ")
    
    print" CLARCS of micro_elements"
    Clark_Vinogradov62 = [Sc/10,V/90,Cr/83,Co/18,Ni/58,Rb/150,Sr/340,Ba/650,Zr/170,Hf/1,Nb/20,Ta/2.5,Th/13    ,
                 U/2.5,Be/3.8,Li/32,B/12,W/1,3,Mo/1,1,Sn/2,5,Cd/5,Ag/0.1,Cu/47,Pb/16,Zn/83,Bi/3,8,Ce/70,
                 Sb/0.5,As/1.7,Ge/8,Ga/19,Y/29,Cs/3.7]
    for x in Clark_Vinogradov62:
        if x>1.5:
            print x

Так вот ответ выглядит;
1.58
5.256
65.2
1.79
…. итд
то есть очень не удобно, просто не разобраться к какому элементу это относиться,
надо бы так(Если например деление Ванадия,Урана,Серебра при деление на их кларки больше 1,5
V = 1.58
U= 2.56
Ag = 5.02

Офлайн

#5 Ноя. 30, 2012 23:12:22

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Вопрос о списке

def sf(prompt):
    ....
def MicroElements():
    print 'bla-bla....'
    elements = (
        ('Sc', 10),
        ('V', 90), 
        ('Cr', 83), 
        ('Co', 18),
        ...
        ...
        )
    Clark_Vinogradov62 = []    
    for a, b in elements:
        exec('%s = sf("%s:")\nClark_Vinogradov62.append(%s/%s)\n' % (a, a, a, b))
    for a, b in zip(elements, Clark_Vinogradov62):
        if b > 1.5:
            print '%s = %s' % (a[0], b)

Отредактировано dimy44 (Дек. 1, 2012 01:21:20)

Офлайн

#6 Дек. 1, 2012 18:07:29

Protoss
От: Айур
Зарегистрирован: 2012-11-24
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос о списке

Это круто!)Правда я слегка не понимаю, как это работает)

Офлайн

#7 Дек. 1, 2012 20:41:49

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Вопрос о списке

Есть еще один подход:
Делаете ваши микроэлементы объектами класса и переопределяете для них необходимые арифметические операции и оператор __str__, который позволит получить вывод в том виде который вам необходим.

class MicroElement(object):
def __init__(self,name,mass):
self.name=name
self.mass=mass
def __str__(self):
return "{}={}".format(self.name,self.mass)
def __mul__(self,v):
return MicroElement(self.name,self.mass*v)

>>> v=MicroElement("aa",23)
>>> z=v*3
>>> print z
aa=69

Я делал такие конструкции для смеси веществ. Очень скоро эти классы обрастают полезным функционалом - расчет молярной массы, установка ядерной или массовой плотности, смешивание веществ и т.п. Подход с классами оказывается более гибким чем подходы с “exec”.



Отредактировано doza_and (Дек. 1, 2012 20:48:12)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version