Sprawdź poprawność adresu e-mail

Zadanie 1 z 13 · rozdział 23Trudność: 2 z 3regexstringwalidacja

Treść zadania

Wczytaj napis i sprawdź, czy jest poprawnym adresem e-mail według poniższych (uproszczonych) reguł.

  • Adres ma postać identyfikator@domena: zawiera dokładnie jeden znak @, a identyfikator i domena są niepuste.
  • Identyfikator składa się wyłącznie z:
    • liter a–z i A–Z (bez polskich znaków),
    • cyfr 0–9,
    • znaków specjalnych ! # $ % & ' * + - / = ? ^ _ ` ` { | } ~`,
    • kropek . — ale kropka nie może być pierwszym ani ostatnim znakiem identyfikatora i nie mogą stać dwie kropki obok siebie.
  • Domena składa się wyłącznie z liter a–z i A–Z, cyfr 0–9, kropek . i myślników -, przy czym:
    • zawiera co najmniej jedną kropkę,
    • nie zaczyna się ani nie kończy kropką ani myślnikiem,
    • żadne dwa znaki spośród . i - nie stoją obok siebie (niedozwolone są np. .., --, .-, -.).
  • Żadne inne znaki (np. spacje) nie mogą wystąpić w adresie.

Dane wejściowe

  • 1. linia: napis do sprawdzenia

Dane wyjściowe

  • Prawda — jeśli napis jest poprawnym adresem e-mail,
  • Fałsz — w przeciwnym razie.

Uwagi

  • Do sprawdzenia, czy cały napis pasuje do wzorca, służy re.fullmatch(wzorzec, napis).
  • Fragment „ciąg znaków bez kropek, a potem dowolnie wiele razy: kropka i znowu ciąg znaków” zapiszesz jako X+(\.X+)*, gdzie X to klasa dozwolonych znaków.
  • W klasie znaków [...] myślnik umieść na końcu albo poprzedź go \, inaczej oznacza zakres (np. +-/ to zakres od + do /).

Przykłady

Wejście
adam@gmail.com
Wyjście
Prawda
Wejście
jan..nowak@poczta.pl
Wyjście
Fałsz

W identyfikatorze stoją obok siebie dwie kropki.

Potrzebujesz teorii?

Zasady obowiązujące w rozdziale 23

Poniższe zadania polegają na wczytywaniu danych ze standardowego wejścia (stdin) i wypisywaniu wyniku na standardowe wyjście (stdout). Rozwiązuj je za pomocą wyrażeń regularnych (moduł re).
Każde zadanie jest osobnym, niezależnym programem.

Konwencje wspólne:

  • Każda wartość wejściowa znajduje się w osobnej linii — wczytuj je dokładnie w podanej kolejności.
  • Tekst wielowierszowy jest poprzedzony linią z liczbą jego wierszy n — wczytaj go, wywołując input() n razy.
  • Dla wartości logicznych wypisuj dokładnie Prawda lub Fałsz.
  • Wielkość liter ma znaczenie, chyba że zadanie mówi inaczej.
  • Słowo to najdłuższy ciąg znaków dopasowywanych przez \w, czyli liter (także polskich), cyfr i znaku podkreślenia _. Każdy inny znak — spacja, interpunkcja, myślnik — rozdziela słowa, np. biało-czerwona to dwa słowa: biało i czerwona. Granicę słowa w wyrażeniu regularnym oznacza \b.
  • Program nie wypisuje komunikatów typu „Podaj tekst:”. Tekst podany w input("…") jest ignorowany przez sprawdzarkę.

Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.

Python uruchomi się w przeglądarce przy pierwszym teście.

Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.

Testy

Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.

Test 1

Nie uruchomiono
Wejście
jan.kowalski@poczta.example.pl
Oczekiwane wyjście
Prawda

Test 2

Nie uruchomiono
Wejście
a@b.c
Oczekiwane wyjście
Prawda

Test 3

Nie uruchomiono
Wejście
first+last/{x}~@sub-domain.example.com
Oczekiwane wyjście
Prawda

Test 4

Nie uruchomiono
Wejście
o'connor@my-mail.co.uk
Oczekiwane wyjście
Prawda

Test 5

Nie uruchomiono
Wejście
1234567890@123.123.123.123
Oczekiwane wyjście
Prawda

Test 6

Nie uruchomiono
Wejście
.jan@example.com
Oczekiwane wyjście
Fałsz

Test 7

Nie uruchomiono
Wejście
jan.@example.com
Oczekiwane wyjście
Fałsz

Test 8

Nie uruchomiono
Wejście
jan@example
Oczekiwane wyjście
Fałsz

Test 9

Nie uruchomiono
Wejście
jan@-example.com
Oczekiwane wyjście
Fałsz

Test 10

Nie uruchomiono
Wejście
jan@example-.com
Oczekiwane wyjście
Fałsz

Test 11

Nie uruchomiono
Wejście
jan@example..com
Oczekiwane wyjście
Fałsz

Test 12

Nie uruchomiono
Wejście
jan@example.com.
Oczekiwane wyjście
Fałsz

Test 13

Nie uruchomiono
Wejście
jan kowalski@example.com
Oczekiwane wyjście
Fałsz

Test 14

Nie uruchomiono
Wejście
jan@ex@ample.com
Oczekiwane wyjście
Fałsz

Test 15

Nie uruchomiono
Wejście
@example.com
Oczekiwane wyjście
Fałsz

Test 16

Nie uruchomiono
Wejście
jan@
Oczekiwane wyjście
Fałsz

Test 17

Nie uruchomiono
Wejście
żaneta@example.com
Oczekiwane wyjście
Fałsz

Test 18

Nie uruchomiono
Wejście
jan@exa_mple.com
Oczekiwane wyjście
Fałsz
Uruchom z własnymi danymi