| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [Python] Ввод данных |
| Автор: Paranorma 8.8.2007, 23:54 |
| Очень нужна помощь. Задание такое: вводится информация о людях в таком формате - имя, фамилия, пол, профессия, после ввода задается вопрос продолжать ввод или нет. Насколько я поняла препода, программа будет работать так: вылезает подсказка "имя", ввожу имя, потом в raw_input появляется подсказка "фамилия", ввожу фамилию, появляется подсказка "профессия", ввожу профессию, потом подсказка "пол", указываю пол, наконец, появляется вопрос остановить ли ввод. Ответ "да" или "нет". И этот вопрос должен появляться после ввода инфы о каждом человеке. Вся инфа о людях должна запихиваться в словарь, потом добавляться в список. От препода четкого объяснения не добилась, но и словарь и список тут точно будут использованы. Рспечатываться будет так: Лоскутова Нина жен студентка Мицкевич Артур муж программист Котов Михаил муж студент То есть вся инфа в 4 столбика, буковка под буковкой, столбики все выравниваем, ясно, что будет использован оператор формата % И еще: пожалуйста, если можно, то напишите без использования оператора lambda. Я его не изучала, о его использовании знаю поверхностно. Всем заранее спасибо. |
| Автор: doomik 9.8.2007, 02:13 | ||||
Не доработал правльный вывод данных ( с % ) т.к не помню как он работает в словаре данные хранятся в таком образе;
|
| Автор: Paranorma 9.8.2007, 12:17 |
| Спасибо, с процентом я соображу. |
| Автор: Guedda 9.8.2007, 12:20 | ||
|
| Автор: Paranorma 10.8.2007, 00:53 | ||
| Да, вопрос увы, не решен еще. doomik, не хотела вас расстраивать, но вариант этот не работает. И дело не в том, что ф-ции не связанны меж собой оператором return... Я это сама дописать могу. Сегодня, наконец-то добилась от препода нормального объяснения: Программа должна работать так: while True: # это первый цикл Ввести данные о человеке и запомнить их. Спросить надо ли продолжить ввод # Это второй цикл if not продолжить: break Данные о каждом человеке запоминаются в словаре, словари в свою очередь сохраняются в списке. Печать нас пока не интересует, можете печатать как хотите, исключительно для отладочных целей. Начало, я так понимаю, будет таким:
То есть никаких функций здесь не будет. Еще раз поясню, что у меня проблема в создании словарей. Я лишь поняла, что здесь используются вложенные циклы. Еще раз у всех прошу прощения, что у всех отнимаю время своими совершенно глупыми вопросами, но все мне дается с трудом и очень медленно. Заранее всем спасибо. |
| Автор: doomik 10.8.2007, 01:44 | ||||||
Paranorma,
А зачем спициальный цикл для вопроса 'Продолжить ввод ?' Кстати можно и на 'ты' хотя это как вы хотите.
А что в первый раз он не хотел обьяснять ? интересно а тогда он то знал что хотел сказать Вариант без функцей:
Как можно увидить и без вложеных циклов обошлось. |
| Автор: Damarus 10.8.2007, 13:26 |
ИМХО, чтобы обрабатывать не верный ответ. |
| Автор: Paranorma 24.8.2007, 21:16 | ||||||
Я немного видоизменила программу, так как назначение некоторых строк мне было непонятно.
Препод говорит, что опять я его неверно поняла. Написал мне: Что требовалось: "Данные о каждом человеке запоминаются в словаре, словари в свою очередь сохраняются в списке. Печать нас пока не интересует, можете печатать как хотите, исключительно, для отладочных целей." Вы вводите данные о человеке и создаете из них словарь {'First name': firstName, ...} именно этот словарь и надо сохранить в dataList. То есть получается инфа об одном человеке - 1 словарь, инфа о другом - другой словарь, но все они сохраняются в списке. Этот вариант, что написал doomik как раз и работает подобным образом.
Но в своем варианте я как всегда упустила какую-то тонкость и у меня нет здесь фамилии. К тому же схематически должно выглядеть так, как я понимаю: [{инфо о 1 человеке}, {инфо о 2 человеке}, {инфо о 3 человеке}] а тут распечатывается, как ["joy: {'First name': 'joy', 'Profession'.... то есть немного не так. Я поняла, что такой результат происходит и-за этой строки
Как мне все это переделать, чтоб не было ["joy: а после квадратной скобки сразу шла фигурная... Помогите, плиз... Очень важно. |
| Автор: setq 24.8.2007, 22:45 | ||
| Возможно тебе(вам) имеет смысл отказаться от добавления записей в dataDict и сразу заталкивать словарь {'First name': ... и т.д } в dataList? Например методом .append(...) . Второй вариант, вместо последнего цикла for написать
|
| Автор: Paranorma 7.9.2007, 17:54 | ||||||
| Помогите, плиз! Хоть поясните, что я опять упустила? Мы с преподом уговорились, что задачу можно оставить в таком виде.
Сегодня получила задание чуточку видоизменить это задание. Выделите в программе часть вводящую информацию об человеке и оформите в виде функции. Параметром должен быть список названий полей которые надо ввести на выходе должен быть словарь с введенными полями. Функция должна вызываться в цикле, а результат вызова должен добавляться к списку dataList. По идее тогда должно начинаться как-то так
Но куда и как дальше двигаться? сбивает с толку фраза Функция должна вызываться в цикле, а результат вызова должен добавляться к списку dataList Был еще и такой бредовый вариант, но я и сама вижу, что не очень-то он условию соответствует.
Подскажите, хоть что-нибудь. |
| Автор: doomik 7.9.2007, 19:24 | ||||||||
Paranorma,
Угу, только нужно убрать параметры входящие в функцию, ты же читаешь данные внутри функции а ещё надо добавить return как ты сделала в другом коде ниже.
Т.е твоя функция main ( она играет роль чтения данных ) вызывается в цикле while, а её результат помещается в массив. вот полный код:
|
| Автор: Paranorma 7.9.2007, 21:18 |
| Спасибо!!! |
| Автор: Paranorma 12.9.2007, 20:11 | ||
| Препод мой сновавсем недоволен... А я уже просто не понимаю, как все это записать. Его спрашивала. Он говорит, это все изученный мною материал, должна справиться, но все равно ничего не понимаю Вот чего он пишет мне, что функция должна иметь параметр: def inputPersonData( infoList ) # У функции всего один параметр !!!!!!!!!!!!!!!! # infoList - список названий данных которые нас интересуют # например: ("firstName", "lastName", "gender", "profession") # или: ("personal number", "address") # Функция вызывается так: # res = inputPersonData( ("firstName", "lastName", "gender", "profession") ) # функция запрашивает у пользователя данные перечисленные # infoList и в качестве результата возвращает словарь # в котором строки перечисленные infoList вляются ключами.
а вот это уже я навертела, но не работает.В чем проблема? почему прога ругается на строку append? Почему пишет, что pData не существует? понятно, что это локальная переменная, но я же для того и return использовала. HELP!!! SOS!!! СРОЯНО НУЖНО!!! ВСЕМ ЗАРАНЕЕ СПАСИБО. Конечно, ориентироваться надо не на мой кривой вариант, а на то, что написал препод. |
| Автор: Paranorma 13.9.2007, 00:09 |
| Параметром должен быть список названий полей которые надо ввести на выходе должен быть словарь с введенными полями. Функция должна вызываться в цикле, а результат вызова должен добавляться к списку dataList. Вот еще из рекомендаций препода по этому же заданию. |
| Автор: doomik 13.9.2007, 03:57 | ||||||
Paranorma,
pData не существует потому что не существует, ты сделала return pData т.е функция возвращает значение и чтобы его не потерять мы его сохраняем в переменной. Если в return ты возвращаеш pData тогда это незначит что в главной программе она будет у тебя видна.
В переменной res сохраняем результат функции а потом добавляем его в список. [имхо] Прежде чем посмотреть внизу ответ попробуй сама опят решить эту проблему ещё лучше пройдись по правилам как работают циклы. как построены функции и т.д, всё таки далеко не уедешь если задачи будут решать за тебя. Не сдавайся\убегай от проблемы так легко. [/имхо]
|