Scrivere su un'unica riga

di il
2 risposte

Scrivere su un'unica riga

Buongiorno a tutti

Riposto dalla sezione VB.NET.

mi sto esercitando con python 2.7.2, nella creazione di un semplice programmino per la codifica di testi basandosi sulla successione di fibonacci. lo script legge la frase, la divide parola per parola e sostituisce ogni lettera con il numero assegnato in un apposito file txt esterno. lascia in output un file txt contenente, per ogni riga, una lettera codificata. fino a qui tutto ok.
nella decodifica, invece, viene letta una riga per volta e decodificata nel simbolo\lettera corrispondente, per poi essere riscritti su un altro file di testo.
il problema viene qui. il file decodificato contiene, per ogni riga, una lettera della frase. vorrei fare in modo che le lettere decodificate vengano scritte su un'unica riga.


non mi fa allegare il cifrario per codifica e decodifica, quindi lo incollo di seguito insieme al codice completo:

def menu():
    print "C - Codifica"
    print "D - Decodifica"

def codifica():
    a={}
    file=open("codifica.txt", "r")
    for riga in file.readlines():
        splitted = riga.split('|')
        a[splitted[0]] = splitted[1]
    file.close()
    parola = raw_input("Parola da codificare :")
    n = 0 
    while n < len(parola): 
      b = parola[n]
      if a.has_key(b):
            print a[b]
            d=open("codificato.txt", "a")
            d.write(a[b])
            d.close()
      n = n + 1
      
def decodifica():
    a={}
    file=open("decodifica.txt", "r")
    for riga in file.readlines():
        splitted = riga.split('|')
        a[splitted[0]] = splitted[1]
    file.close()

    file2=open("codificato.txt", "rU")
    for line in file2:
        for word in line.split():
            b = word
            if a.has_key(b):
                print a[b]
                d=open("decodificato.txt", "a")    #QUI IL FILE DECODIFICATO
                d.write(a[b])
                d.close()
    file2.close()
        


s = "----"
while s != "_-_-_-_-":
    if s == "C":
        codifica()
    elif s == "d":
        decodifica()
    s = raw_input(">>")
Cifrario codifica
a|0
b|1
c|2
d|3
e|5
f|8
g|13
h|21
i|34
j|55
k|89
l|144
m|233
n|377
o|610
p|978
q|1597
r|2584
s|4181
t|6765
u|109446
v|11711
w|28657
x|46368
y|75025
z|121393
1|196418
2|317811
3|514299
4|832040
5|1346269
6|2178309
7|3524578
8|5702887
9|9227465
0|14930352
 |#
,|24157817
;|39088169
:|63245986
.|102334155
_|165580141
-|267914296 
!|433494437
"|701408733
(|1134903170
)|1836311903
=|2971215073
?|4807526976
'|7778742049
è|12586269025
é|20365011074
ò|32951280099
à|53316291173
ù|86267571272
Cifrario decodifica
0|a
1|b
2|c
3|d
5|e
8|f
13|g
21|h
34|i
55|j
89|k
144|l
233|m
377|n
610|o
978|p
1597|q
2584|r
4181|s
6765|t
109446|u
11711|v
28657|w
46368|x
75025|y
121393|z
196418|1
317811|2
514299|3
832040|4
1346269|5
2178309|6
3524578|7
5702887|8
9227465|9
14930352|0
#| 
24157817|,
39088169|;
63245986|:
102334155|.
165580141|_
267914296|-
433494437|!
701408733|"
1134903170|(
1836311903|)
2971215073|=
4807526976|?
7778742049|'
12586269025|è
20365011074|é
32951280099|ò
53316291173|à
86267571272|ù

2 Risposte

  • Re: Scrivere su un'unica riga

    Perche' quando crei il dizionario a dal file decodifica.txt noterai che ogni valore e' seguito dal simbolo \n (ritorno carrello). Se vuoi tutto in una riga devi eliminare l'ultimo carattere della stringa.
    
    
    d.write(a[b][:-1])  
    
    
  • Re: Scrivere su un'unica riga

    Grazie della risposta.

    la notte scorsa sono riuscito a risolvere il problema in un altro modo, ma il tuo è sicuramente più pulito e semplice... solo che non lo conoscevo! grazie della dritta!

    qui il codice con il metodo da me usato:
    def menu():
        print "C - Codifica"
        print "D - Decodifica"
    
    def codifica():
        a={}
        file=open("codifica.txt", "r")
        for riga in file.readlines():
            splitted = riga.split('|')
            a[splitted[0]] = splitted[1]
        file.close()
        parola = raw_input("Parola da codificare :")
        n = 0 
        while n < len(parola): 
          b = parola[n]
          if a.has_key(b):
                print a[b]
                d=open("codificato.txt", "a")
                d.write(a[b])
                d.close()
          n = n + 1
          
    def decodifica():
        a={}
        file=open("decodifica.txt", "r")
        for riga in file.readlines():
            splitted = riga.split('|')
            a[splitted[0]] = splitted[1]
        file.close()
        n = 0
        file2=open("codificato.txt", "rU")
        while n < 40:
            for line in file2:
                for word in line.split():
                    b = word
                    if a.has_key(b):
                        d=open("decodificato.txt", "ab")
                        print a[b]
                        d.write(a[b])
                        n = n + 1
        d.write("\n") #per evitare un errore di codifica in punjabi...
        n = 0
        d.close()
        file2.close()
            
    
    
    s = "FFF"
    while s != "ghghhghg":
        if s == "c":
            codifica()
        elif s == "d":
            decodifica()
        s = raw_input(">>")
    
Devi accedere o registrarti per scrivere nel forum
2 risposte