Форум сайта python.su
Пишу консольное приложение.
У меня есть много переменных, которым нужно присвоить значения (int, str). Возникла идея это сделать с помощью цикла for, но я не знаю как это реализовать.
Собственно идея выглядит вот так (в текущем варианте не работает):
#массив переменных b= None c = None d = None a = [b, c, d] #цикл для массового присв. for i in a: i = str(i) print('b: {}, c: {}, d: {}'.format(b, c, d))
b: None, c: None, d: NoneСамо собой, код не работает как нужно. И проблема в том, что при выполнении цикла ‘i’ не становится переменной, а только ссылается на объект переменной находящейся в списке ‘a’. А при присваивании ей значения (i = str(i)), теряет даже связь с объектом. Но наверняка есть другие (рабочие) способы массового присваивания через цикл?
Отредактировано oreol (Окт. 28, 2016 09:23:12)
Офлайн
oreolПомоему в трейсбеке ясно написано что у вас первая строка кода неправильная. До цикла тут вообще дело не доходит.
И проблема в том, что при выполнении цикла ‘i’
Офлайн
doza_andПеременным присваивается None, чтобы в цикле (который работает со списком а) не ругался интерпретатор. Может, я неправильно задал вопрос.
Если вы массово присваиваете одно значение None то почему не воспользоваться одной переменной?
Приведите пример как вы собираетесь это использовать, без этого вам ничего и не посоветуешь. Сейчас ваш код не делает ничего полезного.
print('Введите значение переменной а') a = input('..') ... print('введите значeние переменной z') z = input('..')
Отредактировано oreol (Окт. 28, 2016 10:02:40)
Офлайн
Не нужно циклов.
>>> locals().update({"a":1, "b":2, "c":3}) >>> a 1 >>> b 2 >>> c 3
Офлайн
oreolНадо просто список сделать, и туда через append() добавлять результат каждого input().
И возникает вопрос, можно ли что-то подобное сделать с помощью цикла по такой схеме:
n = a, b,c, … z
цикл
n(i) = ввод с клавиатуры
Результат: пользоватлем присвоены индивидуальные значения для всех переменных
>>> lst = [] >>> >>> for i in range(3): ... s = input('enter: ') ... lst.append(s) ... enter: a enter: b enter: c >>> >>> lst ['a', 'b', 'c'] >>> >>> a, b, c = lst >>> >>> a 'a' >>> b 'b' >>> c 'c' >>>
Отредактировано py.user.next (Окт. 28, 2016 11:41:57)
Офлайн
RodegastБольшое спасибо. Отличный способ.
Не нужно циклов.
my_dictionary = {} #создаю словарь my_dictionary variables_list = ["a", "b", "c", "d", "e"] #список содержащий имена будущих переменных и порядок ввода for i in variables_list: #цикл перебора содержимого списка variables_list print('Введите: {}'.format(i)) #форматированный вывод текста с указанием что пользователь должен ввести user_input = input('..') #input my_dictionary[i] = user_input #создается ключ 'i' с введенным значением print('Содержимое словаря:', my_dictionary) #проверка содержимого словаря my_dictionary locals().update(my_dictionary) #!здесь затаилась ошибка print('a: {a}, b: {b}, c: {c}, d: [d], e: {e}'.format(a, b, c, d, e)) #попытка вывести значения переменных
Введите: aПрямо волшебство) не работает:
..1
Введите: b
..2
Введите: c
..3
Введите: d
..4
Введите: e
..5
Содержимое словаря: {'b': ‘2’, ‘c’: ‘3’, ‘a’: ‘1’, ‘e’: ‘5’, ‘d’: ‘4’}
Traceback (most recent call last):
File “*/MyTest.py”, line 9, in <module>
print('a: {a}, b: {b}, c: {c}, d: , e: {e}'.format(a, b, c, d, e))
KeyError: ‘a’
Process finished with exit code 1
locals().update(my_dictionary)
locals().update({'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5})
Отредактировано oreol (Окт. 28, 2016 16:39:14)
Офлайн
oreol
a = ['name','age','sex'] dic={} def pris(i): v = raw_input("What is your " + str(i)+ ' ') dic[i]= v print dic for i in a: pris(i) print dic['name']
{'age': '100', 'name': 'wallet', 'sex': 'man'}
Офлайн
wallet
на выходе
{'age': ‘100’, ‘name’: ‘wallet’, ‘sex’: ‘man’}
oreolА такая форма работает
my_dictionary = {'a': 1, ‘b’: 2, ‘c’: 3, ‘d’: 4, ‘e’: 5}
locals().update(my_dictionary)
oreol
locals().update({'a': 1, ‘b’: 2, ‘c’: 3, ‘d’: 4, ‘e’: 5})
Отредактировано oreol (Окт. 29, 2016 02:23:53)
Офлайн
oreol
Вы не правильно поняли где у вас ошибка - именно в форматировании строки. Сделайте так:
print('a: {a}, b: {b}, c: {c}, d: {d}, e: {e}'.format(**locals())
print('a: {a}, b: {b}, c: {c}, d: {d}, e: {e}'.format(a=a, b=b, c=c, d=d, e=e))
print('a: {}, b: {}, c: {}, d: {}, e: {}'.format(a, b, c, d, e))
Отредактировано JOHN_16 (Окт. 29, 2016 02:23:39)
Офлайн
JOHN_16Большое спасибо! Помогло.
Вы не правильно поняли где у вас ошибка - именно в форматировании строки. Сделайте так:
Офлайн