Forum >> Principianti >> Problema in semplicissimo programma per trasformare i numeri decimali in numeri binari

Pagina: 1

Salve
Ho iniziato da poco a studiare il python (utilizzo la versione 3.4) e, per esercitarmi, ho provato a creare un semplice programma da poche righe che trasforma un numero decimale qualunque in un numero binario.

Purtroppo, quando premo f5 per avviare il programma, la shell di python mi presenta solo i classici >>>, senza che accada nulla.

Potreste aiutarmi cercando di individuare l'eventuale errore?

Ecco a voi il codice:

numero = input("Scrivi un numero decimale che vuoi trasformare in un numero binario: ")       #Chiedo all'esecutore del programma quale numero decimale ha intenzione di trasformare in numero binario, assegnando il valore ottenuto alla variabile "numero"
numero = int(numero)                                                                          #Trasformo il valore ottenuto in precedenza (una stringa) in un valore numerico intero
risultato = ''                                                                                #Creo la variabile "risultato" che conterrà solo stringhe concatenate fra di loro
resto = 0                                                                                     #Creo la variabile "resto"

while numero > 1:                                                                             #Inizio un ciclo che terminerà quando il numero da dividere sempre per due arriverà a 1
    numero = numero // 2                                                                      #Divido il numero interessato per due
    resto = numero % 2                                                                        #Trovo il resto dell'operazione precedente. I valori che otterremo da questa operazione saranno quelli che comporranno il risultato
    risultato = str(resto) + str(risultato)                                                   #Compongo il risultato finale, il quale sarà formato da diverse stringhe concatenate in questo modo

risultato = '1' + str(risultato)                                                              #Il ciclo precedente comporrà la maggior parte del risultato. Una volta che il numero interessato arriverà ad 1, verrà inserito il primo numero del numero binario (la trasformazione da un numero decimale a uno binario parte dalla fine per finire all'inizio)


print str(risultato)                                                                          #Alla fine verrà stampato il risultato

Grazie mille per le risposte ^^
P.S. Se uso Alt+X, non mi vengono segnalati errori...
Ciao caro, prova ad aggiungere ad inizio codice:

# -*- coding: utf-8 -*-
Cya




--- Ultima modifica di Daniele aka Palmux in data 2015-09-06 20:21:50 ---
Daniele aka Palmux said @ 2015-09-06 20:21:28:
Ciao caro, prova ad aggiungere ad inizio codice:

# -*- coding: utf-8 -*-
Cya




--- Ultima modifica di Daniele aka Palmux in data 2015-09-06 20:21:50 ---
Intanto grazie per la risposta ^^

Comunque ho fatto come lei mi ha consigliato, ma niente...

Fortunatamente, però, scrivendo il codice su un altro computer il programma si avvia...

Il problema è un altro adesso: la conversione non è giusta!

Esempio: il 4, che dovrebbe trasformarsi in 100, si trasforma in 110. Il 100, che dovrebbe diventare 1100100, diventa 1110010




Come faccio? Il codice mi sembra giusto...

Grazie
1) il resto lo calcoli sul nuovo numero già diviso invece che su quello ancora da dividere.
2) alla fine aggiungi sempre un 1 iniziale indipendentementa da tutto il resto
3) il che porta al punto 3, cosa succede se l'utente inserisce solo 1 o solo 0 ?
*** Il codice va evidenziato con il simbolo di fianco ai colori per non perdere l'indentazione ***
1) il resto lo calcoli sul nuovo numero già diviso invece che su quello ancora da dividere.
2) alla fine aggiungi sempre un 1 iniziale indipendentementa da tutto il resto
3) il che porta al punto 3, cosa succede se l'utente inserisce solo 1 o solo 0 ?

Grazie mille, risolto grazie al primo consiglio

Per quanto riguardi gli altri due, se verrà digitato 1 verrà saltato il while, quindi verrà scritto direttamente 1 (che è giusto)... Per lo 0,aggiungerò un if ^^
:ok:

Allora il rimanente:

1) in Python2 non usare mai input per acquisire qualcosa da tastiera ma solo raw_input
1bis) in alternativa all'inizio del programma si può scrivere input = raw_input, in modo che input si comporti esattamente come raw_input
2) risultato è già una stringa, non serve fare continuamente str(risultato)


Eventualmente la funzione divmod permette di calcolare in un colpo solo quoziente e resto.


Con gli operatori bitwise si possono poi testare e modificare direttamente i bit del numero intero senza ricorrere alle equivalenti operazioni matematiche:
risultato = ''
while numero:
    risultato = str(numero & 1) + risultato
    numero >>= 1
if not risultato:
    risultato = '0'

*** Il codice va evidenziato con il simbolo di fianco ai colori per non perdere l'indentazione ***


Pagina: 1



Esegui il login per scrivere una risposta.