Найти - Пользователи
Полная версия: Вопрос о списке
Начало » Python для новичков » Вопрос о списке
1
Protoss
Всем привет!
Ребят, не подскажите, как в списке выводить не только значение переменной, но и ее саму?
Например:
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
doza_and
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)]
4kpt
Зачем Вам в этом случае списки. Попробуйте лучше словари…
Нужен пример, могу привести…
Protoss
Просто дело в том, что у меня куча переменных. И в одном месте по желанию пользователя они должны быть пересчитаны. Например
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
dimy44
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)
Protoss
Это круто!)Правда я слегка не понимаю, как это работает)
doza_and
Есть еще один подход:
Делаете ваши микроэлементы объектами класса и переопределяете для них необходимые арифметические операции и оператор __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”.
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