Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Python] Ввод данных 
:(
    Опции темы
Paranorma
Дата 8.8.2007, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 1.1.2007

Репутация: 1
Всего: 1



 smile 
Очень нужна помощь. Задание такое: вводится информация о людях в таком формате - имя, фамилия, пол, профессия, после ввода задается вопрос продолжать ввод или нет.
Насколько я поняла препода, программа будет работать так:
вылезает подсказка "имя", ввожу имя, потом в raw_input появляется подсказка "фамилия", ввожу фамилию, появляется подсказка "профессия", ввожу профессию, потом подсказка "пол", указываю пол, наконец, появляется вопрос остановить ли ввод. Ответ "да" или "нет". И этот вопрос должен появляться после ввода инфы о каждом человеке. Вся инфа о людях должна запихиваться в словарь, потом добавляться в список. От препода четкого объяснения не добилась, но и словарь и список тут точно будут использованы. Рспечатываться будет так:
Лоскутова  Нина    жен студентка
Мицкевич  Артур   муж программист
Котов        Михаил муж студент

То есть вся инфа в 4 столбика, буковка под буковкой, столбики все выравниваем, ясно, что будет использован оператор формата %
И еще: пожалуйста, если можно, то напишите без использования оператора lambda. Я его не изучала, о его использовании знаю поверхностно. Всем заранее спасибо.

PM MAIL Skype Jabber MSN   Вверх
doomik
Дата 9.8.2007, 02:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Одинокий волк
**


Профиль
Группа: Участник
Сообщений: 360
Регистрация: 25.10.2005
Где: #vingrad

Репутация: 3
Всего: 15



Код

dataDict = {}
dataList = []

def AddToDict(dataDict, firstName, lastName, gender, profession):    # загружаем данные в словарь
    dataDict[lastName] = {}
    dataDict[lastName]['First Name'] = firstName
    dataDict[lastName]['Gender'] = gender
    dataDict[lastName]['Profession'] = profession


def AddToList(dataDict, dataList): # загружаем данные из словаря в лист
    for i in dataDict.iterkeys():
        dataList.append(i)
        dataList.append(dataDict[i]['First Name'])
        dataList.append(dataDict[i]['Gender'])
        dataList.append(dataDict[i]['Profession'])

 def PrintData(dataList): # печатаем данные
    j = 1
    for i in dataList:
        print i,
        if j % 4 == 0: # каждые 4 раза будет печататся новая строка
            print '\n'
        j += 1

# main
# вводим данные
while True:
    firstName = raw_input("Enter first name: ")
    lastName = raw_input("Enter last name: ")
    gender = raw_input("Enter your gender: ")
    profession = raw_input("enter you profession:")
    choice = raw_input(r"Do you wish to continue: ? (y\n): ")
    AddToDict(dataDict,firstName,lastName,gender,profession,)
    if choice == 'n':
        break


AddToList(dataDict, dataList)
PrintData(dataList)

Не доработал правльный вывод данных ( с % )  т.к не помню как он работает smile 

в словаре данные хранятся в таком образе;
Код

dataDict = {
   'Фамилия1' : {
                         'Имя': 'ТутИмя'
                         'Пол': 'ТутПол'
                         'Профессия ' : ' ТутПрофессия '
     .
     .
     .
                         }
}


Это сообщение отредактировал(а) doomik - 9.8.2007, 02:16


--------------------
"Единственный способ изучать новый язык программирования - писать на нем 
программы." 
- Brian Kernighan

Remember, st1ng3r 
/server irc.ircline.ru /j #vingrad
PM   Вверх
Paranorma
Дата 9.8.2007, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 1.1.2007

Репутация: 1
Всего: 1



Спасибо, с процентом я соображу. smile 
PM MAIL Skype Jabber MSN   Вверх
Guedda
Дата 9.8.2007, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 6
Всего: 78




M
Guedda
Модератор: Не забываем отмечать вопрос решенным!



--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Paranorma
Дата 10.8.2007, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 1.1.2007

Репутация: 1
Всего: 1



Да, вопрос увы, не решен еще. 

doomik, не хотела вас расстраивать, но вариант этот не работает. И дело не в том, что ф-ции не связанны меж собой оператором return... Я это сама дописать могу. Сегодня, наконец-то добилась от препода нормального объяснения:
Программа должна работать так:
while True: # это первый цикл
   Ввести данные о человеке и запомнить их.
   Спросить надо ли продолжить ввод # Это второй цикл
   if not продолжить:
     break
 
Данные о каждом человеке запоминаются в словаре, словари 
в свою очередь сохраняются в списке. Печать нас пока не 
интересует, можете печатать как хотите, исключительно
для отладочных целей.

Начало, я так понимаю, будет таким:
Код

lst = []
dict = {}
while True:
    s = raw-input("Enter information")
    if not s:
        break
    lst.append(s)

То есть никаких функций здесь не будет. Еще раз поясню, что у меня проблема в создании словарей. Я лишь поняла, что здесь используются вложенные циклы. Еще раз у всех прошу прощения, что у всех отнимаю время своими совершенно глупыми вопросами, но все мне дается с трудом и очень медленно. Заранее всем спасибо.

Это сообщение отредактировал(а) Paranorma - 10.8.2007, 01:05
PM MAIL Skype Jabber MSN   Вверх
doomik
Дата 10.8.2007, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Одинокий волк
**


Профиль
Группа: Участник
Сообщений: 360
Регистрация: 25.10.2005
Где: #vingrad

Репутация: 3
Всего: 15



Paranorma,
Цитата
Спросить надо ли продолжить ввод # Это второй цикл

А зачем спициальный цикл для вопроса 'Продолжить ввод ?'  smile 
Кстати можно и на 'ты' хотя это как вы хотите.

Цитата
Сегодня, наконец-то добилась от препода нормального объяснения:

А что в первый раз он не хотел обьяснять ? интересно а тогда  он то знал что хотел сказать  smile 

Вариант без функцей:
Код

dataDict = {}
dataList = []
# main
# вводим данные
while True:
    firstName = raw_input("Enter first name: ")
    lastName = raw_input("Enter last name: ")
    gender = raw_input("Enter your gender: ")
    profession = raw_input("enter you profession:")
    dataDict[lastName] = {}
    dataDict[lastName] = {'First name': firstName, 'Gender': gender, 'Profession': profession } # добавляем данные в словарь
    choice = raw_input(r"Do you wish to continue: ? (y\n): ")
    if choice == 'n':
        break

for i in dataDict.iterkeys():# проходим по словарю и добавляем данные из словаря в лист
    s = str(i) + ': ' + str(dataDict[i]) 
    dataList.append(s)


print dataList, '\n'
print dataDict



Как можно увидить и без вложеных циклов обошлось.  smile 


--------------------
"Единственный способ изучать новый язык программирования - писать на нем 
программы." 
- Brian Kernighan

Remember, st1ng3r 
/server irc.ircline.ru /j #vingrad
PM   Вверх
Damarus
Дата 10.8.2007, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: 7
Всего: 29



Цитата(doomik @  10.8.2007,  02:44 Найти цитируемый пост)
А зачем спициальный цикл для вопроса 'Продолжить ввод ?' 

ИМХО, чтобы обрабатывать не верный ответ.
PM MAIL ICQ Jabber   Вверх
Paranorma
Дата 24.8.2007, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 1.1.2007

Репутация: 1
Всего: 1



Я немного видоизменила программу, так как назначение некоторых строк мне было непонятно.
Код

dataDict = {}
dataList = []
while True:
    firstName = raw_input("Enter first name: ")
    lastName = raw_input("Enter last name: ")
    gender = raw_input("Enter your gender: ")
    profession = raw_input("enter you profession:")
    dataDict[lastName] = {'First name': firstName, "Last name" : lastName, 'Gender': gender, 'Profession': profession }
    choice = raw_input(r"Do you wish to continue: ? (y\n): ")
    if choice == 'n':
        break
for i in dataDict.keys():
    s = str(i) + ': ' + str(dataDict[i]) 
    dataList.append(s)
print dataList, '\n'

Препод говорит, что опять я его неверно поняла. Написал мне:
Что требовалось:
"Данные о каждом человеке запоминаются в словаре, словари 
в свою очередь сохраняются в списке. Печать нас пока не 
интересует, можете печатать как хотите, исключительно,
для отладочных целей."

Вы вводите данные о человеке и создаете из них словарь
{'First name': firstName, ...}
именно этот словарь и надо сохранить в dataList.

То есть получается инфа об одном человеке - 1 словарь, инфа о другом - другой словарь, но все они сохраняются в списке. Этот вариант, что написал doomik как раз и работает подобным образом.
Код

["joy: {'First name': 'joy', 'Profession': 'joy', 'Gender': 'joy'}", "werty: {'First name': 'terry', 'Profession': 'werty', 'Gender': 'werty'}"] 

Но в своем варианте я как всегда упустила какую-то тонкость и у меня нет здесь фамилии. К тому же схематически должно выглядеть так, как я понимаю:
[{инфо о 1 человеке}, {инфо о 2 человеке}, {инфо о 3 человеке}] 
а тут распечатывается, как ["joy: {'First name': 'joy', 'Profession'.... то есть немного не так. Я поняла, что такой результат происходит и-за этой строки
  
Код

dataDict[lastName] = {'First name': firstName, "Last name" : lastName, 'Gender': gender, 'Profession': profession }

Как мне все это переделать, чтоб не было ["joy: а после  квадратной скобки сразу шла фигурная...
Помогите, плиз... Очень важно.
PM MAIL Skype Jabber MSN   Вверх
setq
Дата 24.8.2007, 22:45 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Возможно тебе(вам) имеет смысл отказаться от добавления записей в dataDict и сразу заталкивать словарь {'First name': ... и т.д } в dataList? Например методом .append(...) .

Второй вариант, вместо последнего цикла for написать
Код

dataList = dataDict.values()

  Вверх
Paranorma
Дата 7.9.2007, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 1.1.2007

Репутация: 1
Всего: 1



Помогите, плиз!
Хоть поясните, что я опять упустила?
Мы с преподом уговорились, что задачу можно оставить в таком виде.
Код

dataList = []
while True:
    firstName = raw_input("Enter first name: ")
    lastName = raw_input("Enter last name: ")
    gender = raw_input("Enter your gender: ")
    profession = raw_input("enter you profession:")
    dataList.append({'First name': firstName, 'Last name':lastName, 'Gender':gender, 'Profession': profession })

    choice = raw_input("Do you wish to continue: ? (y\n): ")
    if choice == 'n':
        break
print dataList

 Сегодня получила задание чуточку видоизменить это задание.

Выделите в программе часть вводящую информацию 
об человеке и оформите в виде функции.
Параметром должен быть список названий полей
которые надо ввести на выходе должен быть словарь с введенными полями.
Функция должна вызываться в цикле, а результат
вызова должен добавляться к списку dataList.


По идее тогда должно начинаться как-то так

Код

def main(firstName, lastName, gender, profession):
    firstName = raw_input("Enter first name: ")
    lastName = raw_input("Enter last name: ")
    gender = raw_input("Enter your gender: ")
    profession = raw_input("enter you profession:")


Но куда и как дальше двигаться? сбивает с толку фраза Функция должна вызываться в цикле, а результат
вызова должен добавляться к списку dataList


Был еще и такой бредовый вариант, но я и сама вижу, что не очень-то он условию соответствует.

Код

def main(firstName, lastName, gender, profession):
    firstName = raw_input("Enter first name: ")
    lastName = raw_input("Enter last name: ")
    gender = raw_input("Enter your gender: ")
    profession = raw_input("enter you profession:")
    return {'First name': firstName, 'Last name':lastName, 'Gender':gender, 'Profession': profession}

def func (dataList):
    dataList = []
    dataList.append({'First name': firstName, 'Last name':lastName, 'Gender':gender, 'Profession': profession })
    choice = raw_input("Do you wish to continue: ? (y\n): ")
    if choice == 'n':
        break
print func (dataList)


Подскажите, хоть что-нибудь. smile 
PM MAIL Skype Jabber MSN   Вверх
doomik
Дата 7.9.2007, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Одинокий волк
**


Профиль
Группа: Участник
Сообщений: 360
Регистрация: 25.10.2005
Где: #vingrad

Репутация: 3
Всего: 15



Paranorma,

Цитата

По идее тогда должно начинаться как-то так
Код

def main(firstName, lastName, gender, profession):
    firstName = raw_input("Enter first name: ")
    lastName = raw_input("Enter last name: ")
    gender = raw_input("Enter your gender: ")
    profession = raw_input("enter you profession:")


Угу, только нужно убрать параметры входящие в функцию, ты же читаешь данные внутри функции а ещё надо добавить return как ты сделала в другом коде ниже.


Цитата

Но куда и как дальше двигаться? сбивает с толку фраза Функция должна вызываться в цикле, а результат
вызова должен добавляться к списку dataList

Т.е твоя функция main ( она играет роль чтения данных ) вызывается в цикле while, а её результат помещается в массив.


вот полный код:

Код

def main():
    firstName = raw_input("Enter first name: ")
    lastName = raw_input("Enter last name: ")
    gender = raw_input("Enter your gender: ")
    profession = raw_input("enter you profession:")
    return {'First name': firstName, 'Last name':lastName, 'Gender':gender, 'Profession': profession}

dataList = []
while True:
    dataList.append(main()) # сохраняем результат функции main в массив
    choice = raw_input("Do you wish to continue: ? (y\n): ")
    if choice == 'n':
        break

print dataList



Это сообщение отредактировал(а) doomik - 7.9.2007, 19:25


--------------------
"Единственный способ изучать новый язык программирования - писать на нем 
программы." 
- Brian Kernighan

Remember, st1ng3r 
/server irc.ircline.ru /j #vingrad
PM   Вверх
Paranorma
Дата 7.9.2007, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 1.1.2007

Репутация: 1
Всего: 1



 smile 
Спасибо!!!
PM MAIL Skype Jabber MSN   Вверх
Paranorma
Дата 12.9.2007, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 1.1.2007

Репутация: 1
Всего: 1



Препод мой сновавсем недоволен... А я уже просто не понимаю, как все это записать. Его спрашивала. Он говорит, это все изученный мною материал, должна справиться, но все равно ничего не понимаю
Вот чего он пишет мне, что функция должна иметь параметр:
def inputPersonData( infoList )
   # У функции всего один параметр !!!!!!!!!!!!!!!!
   # infoList - список названий данных которые нас интересуют
   # например: ("firstName", "lastName", "gender", "profession")
   # или: ("personal number", "address")
   # Функция вызывается так:
   # res = inputPersonData( ("firstName", 
                             "lastName",
                             "gender",
                             "profession")
                          )
   # функция запрашивает у пользователя данные перечисленные
   # infoList и в качестве результата возвращает словарь
   # в котором строки перечисленные infoList вляются ключами.
   

Код

def inputPersonData(infoList):
    pData = {}
    i = 0
    while(i < len(infoList)):
        pData[infoList[i]] = raw_input("Enter "+infoList[i]+":")
        i = i + 1
    return pData
dataList = []
dataList.append(pData)
choice = raw_input("Do you wish to continue: ? (y\n): ")
if choice == 'n':
    break

res = inputPersonData(("firstName", "lastName", "gender", "profession"))
print res

а вот это уже я навертела, но не работает.В чем проблема? почему прога ругается на строку append? Почему пишет, что pData не существует? понятно, что это локальная переменная, но я же для того и return использовала. 
HELP!!! SOS!!! СРОЯНО НУЖНО!!!
ВСЕМ ЗАРАНЕЕ СПАСИБО.
Конечно, ориентироваться надо не на мой кривой вариант, а на то, что написал препод.
PM MAIL Skype Jabber MSN   Вверх
Paranorma
Дата 13.9.2007, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 1.1.2007

Репутация: 1
Всего: 1



Параметром должен быть список названий полей
которые надо ввести на выходе должен быть словарь с введенными полями.
Функция должна вызываться в цикле, а результат
вызова должен добавляться к списку dataList.  

Вот еще из рекомендаций препода по этому же заданию.
PM MAIL Skype Jabber MSN   Вверх
doomik
Дата 13.9.2007, 03:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Одинокий волк
**


Профиль
Группа: Участник
Сообщений: 360
Регистрация: 25.10.2005
Где: #vingrad

Репутация: 3
Всего: 15



Paranorma,
Цитата

В чем проблема? почему прога ругается на строку append? Почему пишет, что pData не существует? понятно, что это локальная переменная, но я же для того и return использовала. 

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


Код

res = inputPersonData(("firstName", "lastName", "gender", "profession"))
dataList.append(res)

 
В переменной res сохраняем результат функции а потом добавляем его в список.

[имхо]
Прежде чем посмотреть внизу ответ попробуй сама опят решить эту проблему ещё лучше пройдись по правилам как работают циклы. как построены функции и т.д, всё таки далеко не уедешь если задачи будут решать за тебя. Не сдавайся\убегай от проблемы так легко.
[/имхо]



Код

def inputPersonData(infoList):
    d = {}
    firstName = raw_input("Enter first name:")
    lastName = raw_input("Enter last name:")
    gender = raw_input("Enter gender:")
    prof = raw_input("Enter profession:")
    d[firstName] = {}
    for i in infoList: # добавляем параметры в словарь ( получается вложенный словарь )
        d[firstName][i] = lastName #  { 'myname': {'lastName': 'mylast', 'gender: 'mygen', 'prof': 'myprof'  } }
        d[firstName][i] = gender
        d[firstName][i] = prof
    return d

dataList = []
infoList = ('firstName', 'lastName', 'Gender', 'Profession')
choice = ''

while choice != "y":
    res = inputPersonData(infoList)
    dataList.append(res) # результат функции добавляется в dataList
    choice = raw_input("Quit ? y/n:")

print dataList   



--------------------
"Единственный способ изучать новый язык программирования - писать на нем 
программы." 
- Brian Kernighan

Remember, st1ng3r 
/server irc.ircline.ru /j #vingrad
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0671 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.