Форум сайта python.su
0
Здравствуйте.
Задача такова:
Если переменная name содержит что нибудь кроме “abcdefghijklmnopqrstuvwxyz1234567890.-”, то
возникала бы исключение которое можно было бы перехватить и вывести надпись:
print('Ошибка')
try: name = input('Введите слово: ') excert вот тут что писать?: print('Ошибка')
Отредактировано xsay23 (Сен. 13, 2014 01:39:44)
Офлайн
33
xsay23
Как это можно написать?
>>> if set(name).difference(s): ... print('Ошибка') ... Ошибка
Офлайн
0
Budulianinбольшое спасибо
az09 = [az09 for az09 in 'abcdefghijklmnopqrstuvwxyz1234567890.-'] name = input('Слово: ') # if set(name).difference(az09): print('Ошибка')
Офлайн
568
1. А если я капсом напишу?
2. Глянь на модуль string, там есть замечательные вещи, типа string.ascii_letters
Офлайн
-5
С помощью регулярных выражений удалось сделать. Как вариант.
#!/usr/bin/python3 #coding: utf-8 import re pattern = re.compile(r'[^A-Za-z0-9.-]') # Любой символ крому указанных диапазонов # pattern = re.compile(r'[^\d]') # Кроме цифр, проба name = input('Введите слово: ') # глючит на 2.7.8 # name = raw_input('Введите слово: ') # глючит на 3.4 # name = '34буквы34' # Тест без ввода # name = '34litter34' # Тест без ввода # print(name) var = pattern.search(name) # print(var) # Если не найдено то None, если найдено, то объект if var: print('Ошибка') if not var: print('Успех')
Отредактировано AZJIO (Сен. 13, 2014 15:19:50)
Офлайн
58
AZJIO
raw_input
P.S. Может хватит уже говнокод выкладывать?
Отредактировано 4kpt_II (Сен. 13, 2014 15:51:15)
Офлайн
0
Мне важна компактность кода)
# def mail(): az09 = list('abcdefghijklmnopqrstuvwxyz1234567890.-@') mail = input('E-mail: ')#Ввод мыла mail = mail.lower()#перевод в прописные if set(mail).difference(az09):# :/ ТУТ думаю так лучше, или нет? print('Ошибка, недопустимые символы')# # len_mail = len(mail)# определение длины мыла в целом ch_dog = mail.find('@')# поиск @ и определение его индекса login = mail[:ch_dog]# определение логина len_login = len(login)# определение длины логин # domen = mail[ch_dog+1:len_mail]# определение домена в целом len_domen = len(domen)# определение длины домена в целом # t_domen = domen.find('.')# поиск точки в домене и присвоение его индекса domen_1 = domen[:t_domen]# определение основного домена domen_2 = domen[t_domen+1:len_domen]# домен за точкой len_domen_1 = len(domen_1)# определение длины основного домена # domen_1_start = domen_1[0]# присвоение к переменной первого символа domen_1_finish = domen_1[len_domen_1-1]# присвоение к переменной последнего символа if domen_1_start == '-' or domen_1_finish == '-': print('Ошибка, домен начат/закончен дефисом') # elif len_domen_1 < 3:# print('Ошибка, домен', domen_1 ,'менее 3-х символов')# elif len_domen_1 > 256:# print('Ошибка, домен более 256-ти символов')# # elif len_login > 128:# print('Ошибка, слишком длинное имя')# elif len_login <= 0:# print('Ошибка, нет имени')# # print() mail()
Отредактировано xsay23 (Сен. 13, 2014 16:06:04)
Офлайн
-5
Можно ещё добавить, чтобы два раза @ не было, и точка в домене была одна.
Офлайн
49
def mail(): az09 = list('abcdefghijklmnopqrstuvwxyz1234567890.-@') mail = input('E-mail: ')#Ввод мыла mail = mail.lower()#перевод в прописные if set(mail).difference(az09):# :/ ТУТ думаю так лучше, или нет? print('Ошибка, недопустимые символы')#
Офлайн
49
AZJIO
Можно ещё добавить, чтобы два раза @ не было, и точка в домене была одна.
Офлайн