Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Клавиатурный тренажер  (Прочитано 7344 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Phlya

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #15 : 03 Апреля 2013, 21:27:18 »
С русскими буквами несложно, найду.

А curses здесь конечно не нужны, мощности компа вполне хватает и на работу с ANSI.
Я буду очень благодарен. Надо бы запилить где-то нормальную систему контроля версий, чтобы все желающие могли код править... Думаю, просто на ланчпаде сделаю.
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #16 : 03 Апреля 2013, 21:53:29 »
(Нажмите, чтобы показать/скрыть)

Не знаю, то ли это, что вам надо. Посмотрите.

Кстати, это некорректно работает с gxneur! Почему — долго объяснять,
но так и должно быть :(
Делюсь знаниями, но их у меня мало!

Оффлайн Phlya

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #17 : 03 Апреля 2013, 22:10:41 »
Код: (Python) [Выделить]
if lett in ('\xD0', '\xD1'):
    lett = lett + getch()

Это с чем Вы сравниваете?.. И зачем такое прибавление странное? Но на вид правда работает!

Попробовал вставить в код, ругается вот так:
keyboard train unstable.py:83: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
  if answer == letter:

http://bazaar.launchpad.net/~flyamer/keytrain/trunk/files/1 - вот тут лежит код.
« Последнее редактирование: 03 Апреля 2013, 22:27:22 от Phlya »
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн Ankor

  • Активист
  • *
  • Сообщений: 324
  • Ubuntu 7.10
    • Просмотр профиля
    • Подкасты AnotherAnkor
Re: Клавиатурный тренажер
« Ответ #18 : 03 Апреля 2013, 22:30:17 »
Просто личный опыт обучения.. Typing Reflex идеален. Если уже что и делать, то только подобный. Не напрягает долгими паузами и переходами от упражнения к упражнению как в Соло; нет таких убогих звуков, кричащих об ошибке и тыкающих пользователя каждый раз в ошибку, как в соло.
Советую скачать и сделать ровно те же упражнения. Я благодаря ему только и научился печатать.
Много лет работаю админом и пишу код.

Оффлайн Phlya

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #19 : 03 Апреля 2013, 22:34:22 »
Просто личный опыт обучения.. Typing Reflex идеален. Если уже что и делать, то только подобный. Не напрягает долгими паузами и переходами от упражнения к упражнению как в Соло; нет таких убогих звуков, кричащих об ошибке и тыкающих пользователя каждый раз в ошибку, как в соло.
Советую скачать и сделать ровно те же упражнения. Я благодаря ему только и научился печатать.
Он же только для винды, нет?
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #20 : 03 Апреля 2013, 22:53:53 »
Код: (Python) [Выделить]
if lett in ('\xD0', '\xD1'):
    lett = lett + getch()

Это с чем Вы сравниваете?.. И зачем такое прибавление странное? Но на вид правда работает!
...

Код: (Python) [Выделить]
print '\xD0\x90' -> А
print '\xD0\x91' -> Б
...
print '\xD0\xAF' -> Я
print '\xD0\xB0' -> а
...
print '\xD0\xBF' -> п
print '\xD1\x80' -> р
...
print '\xD1\x8F' -> я

;

print '\xD0\x81' -> Ё
print '\xD1\x91' -> ё
А в вашей программе не работает вероятно потому, что какая-то из переменных имеет не тот тип.

Код: (Python) [Выделить]
>>> print '\xD0\x91'
Б
>>> print u'Б'
Б
>>> print u'Б' == '\xD0\x91'
False
>>> print 'Б'
Б
>>> print 'Б' == '\xD0\x91'
True
>>>

Следовательно, надо перевести lett в правильную кодировку.


Ага, вот в чем дело. В моём примере lett — это строка из двух байтов, а надо её перевести в Юникод.
« Последнее редактирование: 03 Апреля 2013, 22:56:55 от inkblack »
Делюсь знаниями, но их у меня мало!

Оффлайн Phlya

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #21 : 03 Апреля 2013, 23:03:51 »
Кажется, я справился, добавив в начало программы две строки:
Код: (Python) [Выделить]
reload(sys)
sys.setdefaultencoding('utf-8')
Идея отсюда: http://habrahabr.ru/post/117236/
Правда, автор наоборот уходит от решения подобной проблемы таким способом к более изощренному...

Осталась проблема в том, что при выходе при печати всех спрошенных символов они предстают в виде своих кодов...
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #22 : 03 Апреля 2013, 23:43:55 »
А можно посмотреть тут.

Получаем:
Код: (Python) [Выделить]
>>> print '\xD0\x91'.decode("utf-8") == u'Б'
True
>>>

Пользователь решил продолжить мысль 03 Апреля 2013, 23:46:18:
ИМХО, правильно делать именно так.
Т.е., прочитали ввод — последовательность двух байтов,
перекодировали в Юникод,
сравнили.
« Последнее редактирование: 03 Апреля 2013, 23:46:18 от inkblack »
Делюсь знаниями, но их у меня мало!

Оффлайн Phlya

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #23 : 03 Апреля 2013, 23:56:52 »
Только при чтении из stdin это почему-то не помогает, я пробовал...
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #24 : 04 Апреля 2013, 00:01:57 »
Принципиальных сложностей быть не должно, проблемы могут возникать, вероятно,
из-за смешивания raw_input() и sys.stdin.read()
Делюсь знаниями, но их у меня мало!

Оффлайн Phlya

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #25 : 04 Апреля 2013, 00:12:27 »
Принципиальных сложностей быть не должно, проблемы могут возникать, вероятно,
из-за смешивания raw_input() и sys.stdin.read()

raw_input используется только во всяких меню, в самом приеме символов при работе только sys.stdin.read()...
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #26 : 04 Апреля 2013, 00:16:18 »
Если выложите «ночную сборку», с утра попробую глянуть  :)
Делюсь знаниями, но их у меня мало!

Оффлайн Phlya

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #27 : 04 Апреля 2013, 01:00:23 »
Вроде, на ланчпаде последняя версия.
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #28 : 04 Апреля 2013, 01:19:13 »
Всё, увидел, просто не знал, как им пользоваться.
Вроде, в unstable русский работает?

Но ни код, ни stable не смотрел. Завтра.
Делюсь знаниями, но их у меня мало!

Оффлайн Phlya

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #29 : 04 Апреля 2013, 01:21:55 »
Всё, увидел, просто не знал, как им пользоваться.
Вроде, в unstable русский работает?

Но ни код, ни stable не смотрел. Завтра.
Не помню, перенес ли я работу русского в stable, но в unstable должен. Комментариев там не особо, но я старался код попроще писать, надеюсь, разобраться можно.

Пользователь решил продолжить мысль 04 Апреля 2013, 21:23:34:
Добавил вывод средней скорости печати. Опять же, замечу, что ошибки ее уменьшают. Все выложено в ланчпад.
« Последнее редактирование: 04 Апреля 2013, 21:23:57 от Phlya »
Ubuntu 14.04 (Unity), MSI GE40

 

Страница сгенерирована за 0.017 секунд. Запросов: 19.