Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 18, 2014 21:42:06

Cell
Зарегистрирован: 2014-06-18
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

кодировка

Уважаемые коллеги!
Простая программа в таком виде работает:

message= input(“введите текст: ”)
new_message=“”
vowels=“euyoai”
print()
for letter in message:
if letter.lower() not in vowels:
new_message+=letter
print (“строка: ”, new_message)
print(“итог: ”, new_message)

но в таком нет:

message= input(“введите текст: ”)
new_message=“”
vowels=“йуеэоаыяию”
print()
for letter in message:
if letter.lower() not in vowels:
new_message+=letter
print (“строка: ”, new_message)
print(“итог: ”, new_message)

Это как-то связано с кодировкой? Как это исправить?

(Python3 IDLE, Linux - lubuntu)

Офлайн

#2 Июнь 18, 2014 22:22:20

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

кодировка

Клац

Возможно да

Офлайн

#3 Июнь 18, 2014 22:58:09

Cell
Зарегистрирован: 2014-06-18
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

кодировка

Спасибо. Но как это исправить?

Офлайн

#4 Июнь 19, 2014 13:39:40

vanvanov
Зарегистрирован: 2013-03-31
Сообщения: 252
Репутация: +  4  -
Профиль   Отправить e-mail  

кодировка

#!/usr/bin/python3
message= input("введите текст: ")
new_message=""
vowels="йуеэоаыяию"
print()
for letter in message:
	if letter.lower() not in vowels:
		new_message+=letter
print ("строка: ", message)
print("итог: ", new_message)
У меня все работает (и под Lin, и под Win). Посмотрите, что выводит sys.getdefaultencoding() и соответственно используйте decode() и encode().

Офлайн

#5 Июнь 19, 2014 19:58:24

Cell
Зарегистрирован: 2014-06-18
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

кодировка

Спасибо.
Как пользоваться? Просто ввести?
Тогда:
sys.getdefaultencoding()
Traceback (most recent call last):
File “<pyshell#2>”, line 1, in <module>
sys.getdefaultencoding()
NameError: name ‘sys’ is not defined

Офлайн

#6 Июнь 19, 2014 20:45:02

vanvanov
Зарегистрирован: 2013-03-31
Сообщения: 252
Репутация: +  4  -
Профиль   Отправить e-mail  

кодировка

Сначала надо импортировать.
import sys
Т.к. у вас Python 3, то проблем вообще не должно быть. Используйте везде UTF-8.
С raw input могут быть заморочки, потому что в виндовой cmd кодировка cp866, но вы можете использовать различные GUI для ввода - easygui, tkinter, wxpython и пр. Там точно на входе будет нормальная кодировка. Будете работать с буфером обмена - почитайте мои темы, как я решил эту проблему.
Если у вас вместо кириллицы иероглифы, попробуйте сначала расшифровать кодировку. Например, line.decode('cp866'), line.decode('windows-1251'). На выходе можно попробовать line=line.encode('windows-1251').

Отредактировано vanvanov (Июнь 19, 2014 20:50:57)

Офлайн

#7 Июнь 19, 2014 20:45:49

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

кодировка

>>> import sys
>>> sys.getdefaultencoding()



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

#8 Июнь 19, 2014 22:41:31

Cell
Зарегистрирован: 2014-06-18
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

кодировка

А, понял, спасибо.
Выдал utf-8. Как быть далее?

Офлайн

#9 Июнь 19, 2014 23:33:25

vanvanov
Зарегистрирован: 2013-03-31
Сообщения: 252
Репутация: +  4  -
Профиль   Отправить e-mail  

кодировка

Cell
А, понял, спасибо.Выдал utf-8. Как быть далее?
Я прочитал невнимательно, оказывается, у вас lubuntu. Там в принципе не должно быть проблем с кодировкой. Уточните, что именно у вас не работает. Проверьте кодировку вашего скрипта - она должна быть UTF-8. Загрузите python в консоли и в интерактивном режиме проверьте свой скрипт строка за строкой. Обратите внимание, что в вашем первоначальном скрипте опечатка:
print (“строка: , new_message)
вместо
print (“строка: , message)

Отредактировано vanvanov (Июнь 19, 2014 23:35:41)

Офлайн

#10 Июнь 22, 2014 20:03:05

Cell
Зарегистрирован: 2014-06-18
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

кодировка

Спасибо.
Построчно выает это:
>>> #_*_ coding: utf-8 -*-
message= input(“введите текст: ”)
введите текст:
>>> #_*_ coding: utf-8 -*-
message= input(“введите текст: ”)
new_message=“”
vowels=“йуеэоаыяию”
print()
for letter in message:
if letter.lower() not in vowels:
new_message+=letter
print (“строка: ”, new_message)

SyntaxError: multiple statements found while compiling a single statement

Но если в Netbeans, то все работает точно! Хотя еще не очень понятно, как запустить программу по двойному щелчку мыши)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version