Форум сайта python.su
0
И того вот что у меня вышло:
#coding: utf-8 import csv def bible(a): if a == 'выход': exit() if a == 'меню': vibor() #a = raw_input('Введите запрос: ') reader = csv.reader(open("data.csv", "rb",),delimiter=';') name = 'По заданому запросу иформации не найдено' for x in reader: if len(x) == 3 and a == x[2]: name = x[0], x[1] elif len(x) == 3 and a == x[0]: name = x[1], x[2] print name def writer(b): if b == 'выход': exit() if b == 'меню': vibor() writer = csv.writer(open('data.csv', 'a'), delimiter=';').writerow(raw_input('Внесите данные: ').split()) def vibor(): v = raw_input('Выберите режим работы (внести, найти, выход): ') if v == 'внести': while not writer(raw_input('Внесите данные: ')): pass elif v == 'найти': while not bible(raw_input('Введите запрос: ')): pass else: exit() vibor()
Введите запрос: 4 ('2', '3')
Офлайн
103
stasvoronили так:
Возникли следующие проблеммы:
- при поиске выводит “не красивый” ответ,
name = 'По заданому запросу иформации не найдено' for x in reader: if len(x) == 3 and a == x[2]: name = ' '.join(x[0], x[1]) elif len(x) == 3 and a == x[0]: name = ' '.join(x[1], x[2]) print name
name = 'По заданому запросу иформации не найдено', '' for x in reader: if len(x) == 3 and a == x[2]: name = x[0], x[1] elif len(x) == 3 and a == x[0]: name = x[1], x[2] print ' '.join(name)
stasvoron
- запись в файл получается со второго раза, точнее каждый втрой ввод - записывается в файл, побороть не смог.
csv.writer(open('data.csv', 'a'), delimiter=';').writerow(b.split())
if b == 'меню': vibor()
#coding: utf-8 import csv def bible(a): if a == 'выход': exit() if a == 'меню': return True reader = csv.reader(open("data.csv", "rb",),delimiter=';') name = 'По заданому запросу иформации не найдено', '' for x in reader: if len(x) == 3 and a == x[2]: name = x[0], x[1] elif len(x) == 3 and a == x[0]: name = x[1], x[2] print ''.join(name) def writer(b): if b == 'выход': exit() if b == 'меню': return True csv.writer(open('data.csv', 'a'), delimiter=';').writerow(b.split()) def vibor(): v = raw_input('Выберите режим работы (внести, найти, выход): ') if v == 'внести': while not writer(raw_input('Внесите данные: ')): pass elif v == 'найти': while not bible(raw_input('Введите запрос: ')): pass else: exit() while True: vibor()
Офлайн
0
Спасибо, по пробую, а можно с подробностятими почему нельзя и почему пишем именно так, а то я только учу python и новая информация очень полезна.
Спасибо.
Офлайн
103
stasvoronя не очень в объяснениях, эт пусть кто-то другой расскажет
а можно с подробностятими почему нельзя и почему пишем именно так
def a(): b() def b(): a() b()
Отредактировано terabayt (Дек. 17, 2014 08:49:04)
Офлайн
0
Консоль сразу выдаёт ошибку и это вродь логично, работает принцип очередности: типа неля в первом запустить второе, так как оно ещё не произошло в во времени, тогда возникает вопрос почему у меня работал возврат в меню?
Плюс здесь получается замкнутое кольцо, что не корректно, хотя это только мои догадки.
Отредактировано stasvoron (Дек. 17, 2014 09:12:08)
Офлайн
103
stasvoronнет, вы не поняли. вам выдало вот это ошибку
и это вродь логично
RuntimeError: maximum recursion depth exceeded
>>> sys.getrecursionlimit() 1000
Офлайн
103
stasvoronда, правильно, только не кольцо, а малек сложнее, но смысл похож. и это я просто убрал лишние строки, а теперь посмотрите на свой код, там такое же
Плюс здесь получается замкнутое кольцо, что не корректно, хотя это только мои догадки.
def writer(b): if b == 'выход': exit() if b == 'меню': vibor() #------------- !!! writer = csv.writer(open('data.csv', 'a'), delimiter=';').writerow(raw_input('Внесите данные: ').split()) def vibor(): v = raw_input('Выберите режим работы (внести, найти, выход): ') if v == 'внести': while not writer(raw_input('Внесите данные: ')): # ----------!!!! pass
Отредактировано terabayt (Дек. 17, 2014 09:19:16)
Офлайн
0
переделал код по вашим рекомендациям
#coding: utf-8 import csv def bible(a): if a == 'выход': exit() if a == 'меню': return True reader = csv.reader(open("data.csv", "rb",),delimiter=';') name = 'По заданому запросу иформации не найдено' for x in reader: if len(x) == 3 and a == x[2]: name = x[0], x[1] elif len(x) == 3 and a == x[0]: name = x[2] print ' '.join(name) def writer(b): if b == 'выход': exit() if b == 'меню': return True writer = csv.writer(open('data.csv', 'a'), delimiter=';').writerow(b.split()) def vibor(): v = raw_input('Выберите режим работы (внести, найти, выход): ') if v == 'внести': while not writer(raw_input('Внесите данные: ')): pass elif v == 'найти': while not bible(raw_input('Введите запрос: ')): pass else: exit() vibor()
Офлайн
103
да, забыл
while True: vibor()
Офлайн
0
с вовратом сделал, работает, спасибо
следующие проблеммы:
с этим кодом
name = 'По заданому запросу иформации не найдено' for x in reader: if len(x) == 3 and a == x[2]: name = ' '.join(x[0], x[1]) elif len(x) == 3 and a == x[0]: name = ' '.join(x[1], x[2]) print name
Введите запрос: 7 Traceback (most recent call last): File "bible.py", line 41, in <module> vibor() File "bible.py", line 36, in vibor while not bible(raw_input('Введите запрос: ')): File "bible.py", line 13, in bible name = ' '.join(x[0], x[1]) TypeError: join() takes exactly one argument (2 given)
name = 'По заданому запросу иформации не найдено', '' for x in reader: if len(x) == 3 and a == x[2]: name = x[0], x[1] elif len(x) == 3 and a == x[0]: name = x[1], x[2] print ' '.join(name)
Введите запрос: 9 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
Офлайн