Μάθημα 6 Ασκήση

...ασύγχρονα μαθήματα python

Μάθημα 6 Ασκήση

Δημοσίευσηαπό sokoban4ever » 24 Αύγ 2009, 04:14

Δοκιμάστε να δημιουργήσετε ένα αρχείο με την Python
έπειτα αποθηκεύστε κάποιο κειμενάκι με χαρακτήρες και αριθμούς.
Προσπαθήστε να διαβάσετε και να εμφανίσετε στην οθόνη μόνο τους χαρακτήρες
με την χρήση των exception ( εξαιρέσεων)
τέλος εμφανίστε το πλήθος των αριθμών στο αρχείο και κλείστε το αρχείο...
Θέλουμε και μπορούμε να έχουμε μια καλύτερη ζωή και όσο θα ζούμε θα προσπαθούμε να την αποκτήσουμε ακόμα και αν πεθάνουμε προσπαθώντας, και αν κάποια στιγμή λιγίσουμε έχουμε το επίπεδο να πούμε κουράστηκα λίγο να ,να ξαποστάσουμε , ώστε να συνεχίσουμε πάλι δυνατοί ξανά.

Μήνυμα με αγάπη και αληλλεγγύη σε όλους τους ανθρώπους από όλους τους λαούς , ιδίως του Ελληνικού.
Άβαταρ μέλους
sokoban4ever
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 2331
Εγγραφή: 13 Φεβ 2009, 02:22
Εκτύπωση

Re: Μάθημα 6 Ασκήση

Δημοσίευσηαπό da_perama1 » 25 Αύγ 2009, 21:42

Μια όχι ιδιαίτερα κομψή, αλλά ελπίζω κατανοητή, υλοποίηση της άσκησης
Spoiler: show
Κώδικας: Επιλογή όλων
/usr/bin/python3
#Filename: askisi6.py

f = open("askisi6.txt",'w')
f.write('aAb1bBc2Cd3dDe4ez5zh6hu7ui8ik9kl2550')
f.close()

f = open("askisi6.txt",'r')
# a ένας δείκτης που δείχνει τη θέση στο αρχείο
a = 0
# d εδώ αθροίζεται ο αριθμός των αριθμητικών ψηφίων του αρχείου
d = 0
# με την παρακάτω εντολή πηγαίνω στο τέλος του αρχείου και τοποθετώ στην μεταβλητή mikosArxeioy το μέγεθος του αρχείου
f.seek(0,2)
mikosArxeioy = f.tell()
# πηγαίνω στην αρχή του αρχείου και διαβάζω τον πρώτο χαρακτήρα
f.seek(0,0)
b = f.read(1)
while a < mikosArxeioy :
    try :
        c = int(b) # προσπαθώ να μετατρέψω τον χαρακτήρα που διάβασα σε int
        d += 1
    except ValueError :
        print (b)
    a += 1
    f.seek(a,0)
    b = f.read(1)
print ('Τα αριθμητικά ψηφία στο αρχείο {0} είναι {1}'.format(f.name,d))
f.close()

1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.04 precise 64bit (el_GR.UTF-8), Ubuntu 3.0.0-17-generic
3 Intel Core i5 CPU 650 3.20GHz ‖ RAM 7783 MiB ‖ Intel DH55TC -
4 Intel Core Processor Integrated Graphics Controller [8086:0042] (rev 02)
5 eth0: Intel 82578DC Gigabit Network Connection [8086:10f0] (rev 06)
da_perama1
punkTUX
punkTUX
 
Δημοσιεύσεις: 289
Εγγραφή: 11 Νοέμ 2008, 20:35
Τοποθεσία: Κέρκυρα
Εκτύπωση

Re: Μάθημα 6 Ασκήση

Δημοσίευσηαπό andreas_g » 13 Σεπ 2009, 17:03

Η προσπαθεια μου να λυσω την ασκηση ειναι αυτη:
Spoiler: show
Κώδικας: Επιλογή όλων

#!/usr/bin/python3
# -*- coding: utf-8 -*-


keimeno = "Oti nanai keimrno......logia logia logia!!! mpla mpla mpla!!! 35 29 !!! keimenoooooo 23 3333 kai allla logia kai ena akoma noumero 2234434353"


arxeio = open('keimeno.txt', 'w')
arxeio.write(keimeno)
arxeio.close()

lista = []
lista2 = []
lista3 = []


try:
   arxeio = open('keimeno.txt')
   while True:
      line = arxeio.readline()
      
      lista = line.split(' ')
      for i in lista:
         if lista[i].isalpha():
            lista2.append(lista[i])
            break
         else:
            lista3.append(lista[i])
            break

except IOError:
   print('To arxeio den fortwthike swsta!!!!')


print('To keimeno pou prokiptei einai!!!\n')
for j in lista2:
   print(lista2[j])

print('\n!!!\n!!!\n!!!\n')

for k in lista3:
   summ += int(lista3[k])
   print('To teliko athroisma einai!!!!!:' + summ)

arxeio.close()



Αν και εκ των υστερων ειδα οτι καταλαβα λιγο λαθος την εκφωνηση!!!
Τελος παντων!!!

Εχω καποια λαθη και δεν μπορω να συνεχεισω!!!
Εδω
Κώδικας: Επιλογή όλων
try:
   arxeio = open('keimeno.txt')
   while True:
      line = arxeio.readline()
      
      lista = line.split(' ')
      for i in lista:
         if lista[i].isalpha():
            lista2.append(lista[i])
            break
         else:
            lista3.append(lista[i])
            break

except IOError:
   print('To arxeio den fortwthike swsta!!!!')



μου βγαζει αυτο το λαθος.......
Κώδικας: Επιλογή όλων
Traceback (most recent call last):
  File "file.py", line 24, in <module>
    if lista[i].isalpha():
TypeError: list indices must be integers, not str



Αυτο που προσπαθω να κανω ειναι ειναι να διαβασω την λιστα και να δω αμα εχει μεσα χαρακτηρες η νουμερα!!
Ετσι με μπερδευει που μου ζηταει να ειναι αναγκαστικα int κατι που περιμενω να ειναι ειτε int ειτε string !!!!

Ακομα δεν ειμαι σιγουρος για τον τροπο που καλω την μεθοδο isalpha για το περιεχομενο την lista[i] !! Αμα ειναι σωστος η εντελως λαθος!!! :oops: :oops:


Λιγη βοηθεια αν ειναι ευκολο!!!! :) :thumbup: :bow:
Open your source, Open your mind.

Εικόνα


Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Slackware 13.0 32bit σε Dell Inspirion 1525
Προδιαγραφές ⇛ T4200 │ 2GB │ GM965 │ BCM4312 │ HD Audio │
Άβαταρ μέλους
andreas_g
babeTUX
babeTUX
 
Δημοσιεύσεις: 10
Εγγραφή: 02 Απρ 2009, 05:47
Εκτύπωση

Re: Μάθημα 6 Ασκήση

Δημοσίευσηαπό da_perama1 » 13 Σεπ 2009, 20:48

Κώδικας: Επιλογή όλων
lista = line.split(' ')
      for i in lista:
         if lista[i].isalpha():


Εδώ νομίζω ότι είναι το πρόβλημα με το μήνυμα λάθους.
Το i παίρνει διαδοχικά τις τιμές που έχουν τα μέλη της lista, δηλαδή τμήματα του κειμένου, δηλαδή str. Στην έκφραση όμως lista[i] το i πρέπει να είναι o ακέραιος ( int ) που δηλώνει σε πιο μέλος της λίστας αναφέρεται το lista[i].
Όσο για τα υπόλοιπα, προσπάθησε να διαβάζεις ένα χαρακτήρα τη φορά και να ελέγχεις αν είναι ψηφίο ή όχι.
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.04 precise 64bit (el_GR.UTF-8), Ubuntu 3.0.0-17-generic
3 Intel Core i5 CPU 650 3.20GHz ‖ RAM 7783 MiB ‖ Intel DH55TC -
4 Intel Core Processor Integrated Graphics Controller [8086:0042] (rev 02)
5 eth0: Intel 82578DC Gigabit Network Connection [8086:10f0] (rev 06)
da_perama1
punkTUX
punkTUX
 
Δημοσιεύσεις: 289
Εγγραφή: 11 Νοέμ 2008, 20:35
Τοποθεσία: Κέρκυρα
Εκτύπωση

Re: Μάθημα 6 Ασκήση

Δημοσίευσηαπό sokoban4ever » 14 Σεπ 2009, 12:02

@andreas_g
κάνε
for i in lista:
:arrow: if i.isalpha():

γιατί είναι τύπου sting και δεν μπορείς να κάνεις indices με strings αλλά μόνο με αριθμούς και μάλιστα integers.
όπως ορθά λέει και ο da_perama1
πχ
Κώδικας: Επιλογή όλων
TypeError: list indices must be integers, not str

οπότε έτσι γίνεται :
Κώδικας: Επιλογή όλων
>>> for i in lista:
...     if i.isalpha():
...             print type(i)
...
<type 'str'>
<type 'str'>

Κάθε φορά (κάθε loop )το i είναι το επόμενο string από την lista έως το τέλος της.
To lista[i].isalpha() στην ουσία είναι lista['περιεχόμενο'].isalpha()
όπου το περιεχόμενο είναι το περιεχόμενο της γραμμής του αρχείου οπότε είναι τώρα ποιο εμφανές ότι είναι λάθος
αυτά :)
Θέλουμε και μπορούμε να έχουμε μια καλύτερη ζωή και όσο θα ζούμε θα προσπαθούμε να την αποκτήσουμε ακόμα και αν πεθάνουμε προσπαθώντας, και αν κάποια στιγμή λιγίσουμε έχουμε το επίπεδο να πούμε κουράστηκα λίγο να ,να ξαποστάσουμε , ώστε να συνεχίσουμε πάλι δυνατοί ξανά.

Μήνυμα με αγάπη και αληλλεγγύη σε όλους τους ανθρώπους από όλους τους λαούς , ιδίως του Ελληνικού.
Άβαταρ μέλους
sokoban4ever
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 2331
Εγγραφή: 13 Φεβ 2009, 02:22
Εκτύπωση


Επιστροφή στο Μαθήματα python

cron