Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 27, 2011 15:43:37

stil
От:
Зарегистрирован: 2010-07-28
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

словарь

помогите пожалуйста с кодировкой,вот весь код:

 
#! /usr/bin/env python3
# -*- coding: utf-8 -*-

slovo = True
while slovo:

b = "абвгдеёжзийклмнопрстуфхцчшщЪыьэюя"
spisok = dict(zip(b, map(str, range(1, len(b)+1)) ))

slovo = raw_input("введите пожалуйста слово\n")

if slovo[0] in spisok:
filek = __import__("filek%s" % (spisok[slovo[0]]) )

mydic = filek.slovar
reload(filek)

if slovo in mydic:
print (mydic[slovo])
else:
print ("нет такого слова")
————————————————————-
я ввожу русскую букву: а
выдает ошибку:
Traceback (most recent call last):

filek = __import__(“filek%s” % (spisok[slovo]) )
Import Error: No module named filek55 #откуда берется 55 номер файла я не пойму,
#должен быть номер 1.
————————————————
линукс работает в кодировке utf-8
как мне исправить проблему???



Отредактировано (Янв. 27, 2011 15:46:12)

Офлайн

#2 Янв. 27, 2011 19:56:48

stil
От:
Зарегистрирован: 2010-07-28
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

словарь

проблема решилась,оказывается нужно было дописать:
….(“введите пожалуйста слово\n”).decode('utf8')
———————————————-
а как можно разом весь словарь,его (ключ-значение) представить в юникоде?

slovar = {“а”:“прочное”,“б”:“хрупкое”,“в”:“горит”}



Офлайн

#3 Янв. 27, 2011 20:19:08

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

словарь

Как-то всё здесь уныло. Словарь: slovar = {“металл”:“прочное”,“стекло”:“хрупкое”,“дерево”:“горит”}. Металл - “прочное” и стекло - “хрупкое”, речь видимо не о самих предметах и о их свойстве, качестве. Но при этом дерево … “горит”. По логике здесь даже лучше будет смотреться “деревянное”, хотя первое ассоциация о дереве что оно “зелёное”.

Или я понимаю конечно дерево зелёное звучит не так аццки как металл прочное. Ну хорошо, раз горит пусть горит, тогда это его состояние в текущий момент, и что же тогда такое металл - прочное а стекло хрупкое? Я уже 4 день внимательно читаю тему, и никак не могу понять что же такое в этом словаре?



Офлайн

#4 Янв. 27, 2011 21:12:19

stil
От:
Зарегистрирован: 2010-07-28
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

словарь

…Ёпрст, причем здесь содержание словаря? я писал от фонаря,там нет никакой логики,содержание будет конечно другим!
————-
в словаре будет содержаться 4 тыс слов, если вы знается как сделать хороший словарь с быстрым поиском то подскажите,буду рад.
и если не сложно,подскажите как можно разом весь словарь,его (ключ-значение) представить в юникоде?

s = {“ааа”:“что то”,“ббб”:“что то”,“ввв”:“что то”}



Офлайн

#5 Янв. 27, 2011 21:17:47

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

словарь

dict2 = { a.decode('utf8') : b.decode('utf8') for a, b in dict1.items() }



Офлайн

#6 Янв. 28, 2011 09:44:21

stil
От:
Зарегистрирован: 2010-07-28
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

словарь

Isem
болшое спасибо,но у меня выдает ошибку,указывая на цикл for. а код был такой:

 
slovar = {"а":"Ёмае","б":"не может быть","в":"как же так"}
dict2 = { a.decode('utf8') : c.decode('utf8') for a, c in slovar.items() } # тут важный момент,а можно ли
# представления в юникод
# сделать до загрузки slovar ?



Отредактировано (Янв. 28, 2011 09:46:49)

Офлайн

#7 Янв. 28, 2011 13:41:00

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

словарь

Попробуйте вот это:

#! /usr/bin/env python3
# -*- coding: utf8 -*-

alphabet = "абвгдежзийклмнопрстуфхцчшщъыьэюя"

while True:
slovo = input("введите слово: ")
if not slovo:
break
if slovo[0] in alphabet:
filek = __import__("filek%s" % alphabet.index(slovo[0]))
print(filek.slovar.get(slovo, "нет такого слова"))
else:
print("ошибка: нерусское слово")
Но вообще ваша организация данных оставляет желать лучшего, мягко говоря.



Офлайн

#8 Янв. 28, 2011 18:46:27

stil
От:
Зарегистрирован: 2010-07-28
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

словарь

Спасибо большое,этот код интереснее.
>>Но вообще ваша организация данных оставляет желать лучшего, мягко говоря.
я честно сказать не знаю как лучше организовать,в данном примере сейчас происходит загрузка модуля относительно первой буквы,в котором все слова начинаются на одну букву.Вот думаю,может внутри модуля сделать несколько объектов словарей,где каждый будет отличаться уже по второй букве. в общем я не профессионал и не знаю как лучше,может что то посоветуете?



Офлайн

#9 Янв. 28, 2011 20:31:47

stil
От:
Зарегистрирован: 2010-07-28
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

словарь

примерно вот что я описывал,но код конечно не работает:

 
alphabet = u"абвгдежзийклмнопрстуфхцчшщъыьэюя"

while True:
slovo = raw_input("введите слово: ").decode('utf8')
if not slovo:
break
if slovo[0] in alphabet:
filek = __import__("filek%s" % int(1+ alphabet.index(slovo[0]) ))
x = filek.slovar%s % int(1+ alphabet.index(slovo[1]) ) #вот в этом месте как то надо перейти на нужный
# объект-словарь,но не знаю как подставить цифры


print(filek.x.get(slovo, "нет такого слова"))
else:
print("ошибка: нерусское слово")
——————————————————————–
в модуле содержится:
slovar1 = {u“ба”:“впопоп”,“}

slovar2 = {u”бб“:”длджлдж"}



Отредактировано (Янв. 28, 2011 20:32:44)

Офлайн

#10 Янв. 28, 2011 23:09:19

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

словарь

Зачем вам эти импорты? Напишите все ваши слова и переводы в обычный текстовый файл по паре слово-перевод на строку. Читайте его в питоновый словарь, а потом с ним работайте. 4000 слов скажем по 100 байт на строку - это 500 килобайт. Все будет просто летать. Если все-таки планируется нечто большее - положите в sqlite, благо он вместе с питоном сейчас из коробки.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version