Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 26, 2014 23:58:48

stasvoron
Зарегистрирован: 2014-07-19
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

телефонный справочник

Добрый день.
Начал писать тел. справочник, и столкунулся с проблемой, первое это не хочет воспринимать телефон начинающийся с 0, и второе не хочет находить имя и филмилию по номеру.

файл сделан в .csv

Stas;Voron;0631234567
ivan;ivanov;0931234567   
vasya;vasya;0661234567 

код
import csv
a = int(input('Vvedite nomer '))
reader = csv.reader(open("data2.csv", "rb"), delimiter=';')
for row in reader:
    if a == row[2]:
        print row[0], row[1]
    else:
        print "Phone not found"
такую ошибку выдает если номер пишу через 0

python bible3.py
Vvedite nomer 0931234567
Traceback (most recent call last):
  File "bible3.py", line 2, in <module>
    a = int(input('Vvedite nomer '))
  File "<string>", line 1
    0931234567
             ^
SyntaxError: invalid token

а такой резултать без 0.

 python bible3.py
Vvedite nomer 931234567
Phone not found
Phone not found
Phone not found

Отредактировано stasvoron (Сен. 26, 2014 23:59:42)

Офлайн

#2 Сен. 27, 2014 00:23:02

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10014
Репутация: +  857  -
Профиль   Отправить e-mail  

телефонный справочник

Используй raw_input()



Офлайн

#3 Сен. 27, 2014 02:54:58

stasvoron
Зарегистрирован: 2014-07-19
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

телефонный справочник

спасибо, помогло, но при этом показывает и две оставншихся строки

python bible3.py
Vvedite nomer 0631234567
Stas Voron
Phone not found
Phone not found

как сделать, что бы видело только ту строку с которой совпал номер.

п.с. хочу паралельно сделать скрипт скрипт для домашней библиотеки

Отредактировано stasvoron (Сен. 27, 2014 03:18:02)

Офлайн

#4 Сен. 27, 2014 04:52:45

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10014
Репутация: +  857  -
Профиль   Отправить e-mail  

телефонный справочник

stasvoron
как сделать, что бы видело только ту строку с которой совпал номер.
Там может быть множество таких строк.

found = False
 
for i in lst:
    if p(i):
       found = True
       print(i)
 
if not found:
    print('not found')



Отредактировано py.user.next (Сен. 27, 2014 04:54:03)

Офлайн

#5 Сен. 27, 2014 07:29:06

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

телефонный справочник

stasvoron
вот код демонстрирующий это

>>> a=08
  File "<stdin>", line 1
    a=08
       ^
SyntaxError: invalid token
>>> a=07
Лидирующий ноль в данном случае это указание воспринимать запись как восьмеричное число:
>>> print 010
8
>>> print 0x10
16
>>> print 0b10
2
>>> print 10
10



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#6 Сен. 30, 2014 00:11:04

stasvoron
Зарегистрирован: 2014-07-19
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

телефонный справочник

сделал вот так.

import csv
a = raw_input('Vvedite nomer ')
reader = csv.reader(open("data2.csv", "rb"), delimiter=';')
name = None
for row in reader:
    if a == row[2]:
        name = row[0], row[1]
if name:
    print name
else:
    print 'Phone not found'

спасибо за помощь,

правда теперь выводит с кавычками
 python bible3.py
Vvedite nomer 0631234567
('Stas', 'Voron')

нашел проблему. находит тьлько номер записаный в первой строке в двух следующих пришет
Vvedite nomer 0931234567
Phone not found

Отредактировано stasvoron (Сен. 30, 2014 00:29:03)

Офлайн

#7 Сен. 30, 2014 09:25:27

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10014
Репутация: +  857  -
Профиль   Отправить e-mail  

телефонный справочник

stasvoron
сделал вот так.
Находит только последний из подходящих номеров, тогда как несколько человек могут иметь один и тот же номер.

py.user.next
правда теперь выводит с кавычками
>>> t = 'a', 'b'
>>> t
('a', 'b')
>>> print t
('a', 'b')
>>> print '{} {}'.format(*t)
a b
>>>



Отредактировано py.user.next (Сен. 30, 2014 09:27:50)

Офлайн

#8 Сен. 30, 2014 23:27:17

stasvoron
Зарегистрирован: 2014-07-19
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

телефонный справочник

Да, но у меня в csv файле нет кавычек, все данные написаны в шапке. Опять таки я все же не понимаю почему по номеру из первой строки находит фамилию и имя (первую и вторую ячейку) а по телефону второй или третей стоки не находится соответствующих им ячеек данных

П.с. подскажите где модно подробней почитать про работу с csv и другими подобными библиотеками, а то на вики и офф. Питоне есть только прочитать файл и внести запись в файл. Я про raw тут от вас узнал.

Офлайн

#9 Окт. 1, 2014 00:44:54

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10014
Репутация: +  857  -
Профиль   Отправить e-mail  

телефонный справочник

stasvoron
Да, но у меня в csv файле нет кавычек
Это не из-за csv происходит, а из-за print. Его надо правильно использовать, чтобы он правильно выводил.

stasvoron
Опять таки я все же не понимаю почему по номеру из первой строки находит фамилию и имя (первую и вторую ячейку) а по телефону второй или третей стоки не находится соответствующих им ячеек данных

Выполни:
list(csv.reader(open("data2.csv", "rb"), delimiter=';'))
и вывод сюда скопируй.


stasvoron
П.с. подскажите где модно подробней почитать про работу с csv
python.org. csv. examples

stasvoron
Я про raw тут от вас узнал.
Если нет разницы, ставь третий питон. Там нет raw_input(), потому что input() и raw_input() превратили в input().
Если же есть разница, тогда используй основную документацию. Документация также разделена по версиям. Для второго - docs.python.org/2/ , для третьего - docs.python.org/3/ .

В частности, raw_input() (как и input() ) находится в секции Built-in Functions .



Отредактировано py.user.next (Окт. 1, 2014 00:54:15)

Офлайн

#10 Окт. 1, 2014 01:34:54

stasvoron
Зарегистрирован: 2014-07-19
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

телефонный справочник

import csv
>>> list(csv.reader(open("data2.csv", "rb"), delimiter=';'))
[['Stas', 'Voron', '0631234567'], ['Ivan', 'Ivanov', '0931234567   '], ['Vasya', 'Vasya', '0661234567   ']]


оказывается вся проблемма была в лишних пробелах в .csv всем спасибо за помощь, буду дальше разбиратся.

Отредактировано stasvoron (Окт. 1, 2014 01:41:00)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version