• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PYTHON - zadanie - ASCII message

VPS Starter Arubacloud
0 głosów
469 wizyt
pytanie zadane 14 maja 2022 w Python przez mewtwo Użytkownik (830 p.)

Macie jakieś pomysły jeżeli chodzi o sprawdzanie czy wartość można przekonwertować a następnie czy znajduję się w zakresie 0 - 127 ? Z góry dziękuje za odpowiedź. 

Do sprawdzania czy można przekonwertować wymyśliłem:

    try: 
        with open(file) as file: 
            data = file.read()
            
        for i in data.split('\n')
            int(i)

    except ValueError: 
        return 2

do funkcji convertData() przekazano przez parametr file nazwę pewnego pliku. W każdym wierszu plik powinien zawierać kody znaków z tabeli ASCII oddzielone od siebie spacjami. Liczby z poszczególnych wierszy po zamianie na odpowiadające im znaki z tabeli ASCII tworzą wyrazy. Zapisz każdy z tych wyrazów w kolejnych wierszach w pliku "message.txt". Po wykonaniu tej operacji, funkcja powinna zwrócić wartość 0 (zero), oznaczającą, że działanie zakończyło się sukcesem.  

Jeżeli program nie odnajdzie pliku z danymi, funkcja powinna zwrócić wartość 1.

Jeżeli plik istnieje, ale zawiera dane, których nie można przekonwertować na typ int, funkcja powinna zwrócić wartość 2. 

Jeżeli plik istnieje i zawiera dane, które można przekonwertować na typ int, ale otrzymane wartości są spoza zakresu znaków kodu ASCII (0 - 127), funkcja powinna zwrócić wartość 3. 

Uwaga: po ostatnim zapisanym wyrazie w pliku nie powinno być przejścia do nowego wiersza.

Przykłady:

1. 
Wejście: "data.txt"

data.txt:

77 79 78 84 89
80 89 84 72 79 78


Wyjście: 0

message.txt:

MONTY
PYTHON


2. 
Wejście: "data.txt"

liczby.txt:

77 79 78 84 89
80 89 84 72 79 78


Wyjście: 1

3. 
Wejście: "data.txt"

data.txt:

77 79 78 T Y⤶
80 89 84 72 79 78


Wyjście: 2

4. 
Wejście: "data.txt"

data.txt:

77 79 78 -10 -5⤶
80 89 84 72 79 78


Wyjście: 3

Kod do zadania (mojego autorstwa):

def convertData(file):
    
    try: 
        with open(file) as file:
            data = file.readlines()
                
    except IOError:
        return 1
    
    except ValueError: 
        return 2
    
   return 0

 

1 odpowiedź

+1 głos
odpowiedź 18 maja 2022 przez VBService Ekspert (251,210 p.)

Możesz przez "utworzenie" niestandardowego wyjątku (Custom Exceptions) zwrócić wartość kodu błędu 3 (return 3)

 

przykład  [ on-line ]


class Error(Exception):
    """Base class for other exceptions"""
    pass

class ValueIsNotInRange(Error): pass

def convertData(file):
    try: 
        with open(file, 'r') as file:
            data = file.readlines()
    
        message = ""
        for row in data:
            for code in row.split(' '):
                if int(code.rstrip('\n')) in range(128):
                    message += chr(int(code)) if not '\n' in code else chr(int(code)) + '\n'
                else:
                    raise ValueIsNotInRange # return 3

        with open("message.txt", 'w') as file:
            file.write(message)

    except IOError:
        return 1
    except ValueError: 
        return 2
    except ValueIsNotInRange:
        return 3

    return 0
    
print(convertData("data.txt"))   # return 0
print(convertData("liczby.txt")) # return 1
print(convertData("data2.txt"))  # return 2
print(convertData("data3.txt"))  # return 3
data.txt
77 79 78 84 89
80 89 84 72 79 78

data2.txt
77 79 78 T Y
80 89 84 72 79 78

data3.txt
77 79 78 127 0 -1 128
80 89 84 72 79 78

 

komentarz 29 maja 2022 przez mewtwo Użytkownik (830 p.)
@VBService Dziękuje za odpowiedź na moje pytanie. Czy mógłbyś mi jeszcze w czymś pomóc tylko podczas warunku gdzie program ma zwracać 0 dostaje "Wrong message.txt content". Nie wiem czym dokładnie może być to spowodowane? Masz może jakiś pomysł ? Z góry dziękuje za odpowiedź.
komentarz 29 maja 2022 przez VBService Ekspert (251,210 p.)

Nie bardzo mogę odtworzyć Twój błąd

Wrong message.txt content

i pod Windows-em i Linux-em próbowałem u Mnie działa.

A jaki masz zapis w pliku data.txt, taki

czy taki

z kodem 0 (zero) dostajesz ten błąd, a nie czasem z 2, w tym miejscu gdzie powinien pokazać się 0 

komentarz 31 maja 2022 przez mewtwo Użytkownik (830 p.)
@VBService Wydaje mi się, że problem leży w ostatnim wierszu pliku txt, ponieważ znajduje się tak przejście do następnej linii, a go tam nie powinno być.
komentarz 31 maja 2022 przez VBService Ekspert (251,210 p.)

Chyba masz rację, spróbuj tak, popraw na

        with open("message.txt", 'w') as file:
            file.write(message.rstrip('\n'))

 

komentarz 1 czerwca 2022 przez mewtwo Użytkownik (830 p.)

@VBService niestety błąd nie znika. Mam natomiast kolejne pomysł co może powodować ten błąd zmienna message to wyraz, który składa się z cyfry, które odpowiadają litery w tablicy ASCII. Więc może error, który się pojawia jest tylko podpowiedzią, że ten wyraz jest nieprawidłowy.  

Np. 

77 79 78 84 89
80 89 84 72 79 78

czyli MONTY \n PYTHON

komentarz 1 czerwca 2022 przez VBService Ekspert (251,210 p.)
edycja 1 czerwca 2022 przez VBService

Usuń ten ⤶ (znak)  nie jest potrzebny to tylko graficzne przedstawienie znaku końca linii,

to jest jak np. użycie funkcji Show All Characters w Notepad++

Podobne pytania

0 głosów
0 odpowiedzi 272 wizyt
pytanie zadane 24 listopada 2020 w Python przez ninjapolski2 Początkujący (280 p.)
0 głosów
3 odpowiedzi 1,049 wizyt
pytanie zadane 6 stycznia 2018 w C i C++ przez UmbertoF Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 912 wizyt

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...