2016-05-05 8 views
-2
N1 = int(input("What interger do you wish to turn to binary (from 0 - 7 only!)")) 
while (N1 > 7) or (N1 <0) : 
    N1 = int(input("You input must be from 0 - 7 only!")) 
while True: 
    if N1 == 0: 
     print ("0 0 0") 
     break 

    else: 
     a = (N1 - 4) 
     if a < 0: 
      a = 0 
     else: 
      a = 1 
      N1 = a 

     b = (N1 - 2) 
     if b < 0: 
      b = 0 
     else: 
      b = 1 
      N1 = b 

     c = (N1 - 1) 
     if c < 0: 
      c = 0 
     else: 
      c = 1 

     print(a,b,c) 
     break 

Dieses Programm wird Int in Binär, aber es überspringt Zeile 8-13 warum?

+0

Sie sollten ein minimales, vollständiges und überprüfbares Beispiel erstellen ... währenddessen können Sie herausfinden, warum es nicht funktioniert http://stackoverflow.com/help/mcve –

+0

Was ist Ihre Frage? – gefei

+0

Sie können [Wikipedia Artikel über Software-Flusskontrolle] (https://en.wikipedia.org/wiki/Control_flow) nützlich finden. Zumindest können Sie "manuell" durch dieses Programm gehen (von Hand), um mögliche Ergebnisse abzuleiten; und identifizieren Sie den logischen Fehler, den Sie erleben. – motoku

Antwort

1

In diesem Bit:

a = (N1 - 4) 
    if a < 0: 
     a = 0 
    else: 
     a = 1 
     N1 = a 

nach dem else legen Sie zunächst den Wert von a bis 1, und kopieren Sie dann diesen Wert N1. Ihr Programm hat also vergessen, was N1 war, und das Ergebnis für b und c wird immer dasselbe sein. (Dasselbe Problem tritt erneut für b und c auf.)

Übrigens gibt es effizientere Möglichkeiten, die binäre Darstellung einer Zahl herauszufinden. Tipp: Verwenden Sie den Operator &, um herauszufinden, ob das letzte Bit einer Zahl 1 ist, und verwenden Sie den Operator >>, um alle Bits der Zahl nach rechts zu verschieben.

+0

wow ich fühle mich dumm! Danke vielmals! Ich habe N1 = a losgeschickt und N2 = a nach a = (N1 - 4) hinzugefügt und dann nach a = 1 habe ich N1 = N2 hinzugefügt. Han-Kwang Nienhuys – darkfenix54

0

... Ich habe es getestet und es funktioniert! (es funktioniert nur, wenn ein < 0 also nur mit N1 < 4 weil a = N1-4, 4 - 4 = 0, 0 = 0, also 0 nicht < 0, und die if-Anweisung funktioniert nicht mit 4, und natürlich nicht mit 5 arbeiten, 6, 7 ... auch)

1

Der naive Weg, es zu beheben, besteht darin, N1 in jedem Fall zu entfernen und andere Werte zu subtrahieren, wenn Anweisungen seit N1 während der Ausführung der zweiten while-Schleife nicht aktualisiert werden. Sie sollten immer dies geschieht in Ihre Codes vermeiden:

N1 = int(input("What interger do you wish to turn to binary (from 0 - 7 only!)")) 

während (N1> 7) oder (N1 < 0): N1 = int (Eingang ("Sie Eingabe von 0 sein muss - 7 nur!")) während True: wenn N1 == 0: print ("0 0 0") Pause

else: 
    a = (N1 - 4) 
    if a < 0: 
     a = 0 
    else: 
     a = 1 


    b = (N1 - 6) 
    if b < 0: 
     b = 0 
    else: 
     b = 1 


    c = (N1 - 7) 
    if c < 0: 
     c = 0 
    else: 
     c = 1 

    print(a,b,c) 
    break 

Aber man es in einem iterativen Stil tun:

N1 = int(input("What interger do you wish to turn to binary (from 0 - 7 only!)")) 
if (N1 > 7) or (N1 <0) : 
    N1 = int(input("You input must be from 0 - 7 only!")) 
else: 
    binary = [] 
    if N1 == 0: 
     print ("0 0 0") 
    for i in range (0,3): 
     if (N1 - pow(2,(2 - i))) >= 0: 
      binary.append(1) 
      N1 = N1 - pow(2,(2 - i)) 
     else: 
      binary.append(0) 
    print binary 
+0

Ich darf keine eingebaute binäre Funktion verwenden. – darkfenix54

Verwandte Themen