2017-01-23 4 views
0

Ich habe in meinem Python-Code einen Berechnungsfehler gemacht, bin mir aber nicht sicher, was das verursacht hat. Ich denke, es könnte daran liegen, zwei "und" Operatoren in meiner if-Anweisung zu haben, aber ich wollte auf Stack Overflow nachfragen. HierBerechnungsfehler in CodingBat Übung

ist die Frage:

Gegeben 2 int Werte, return true, wenn man negativ ist und man ist positiv. Außer wenn der Parameter "negativ" True ist, dann gebe nur dann True zurück, wenn beide negativ sind.

Hier ist mein Code:

def pos_neg(a, b, negative): 
    if a < 0 and b > 0 and negative = False: 
    return True 
    elif a > 0 and b < 0 and negative = False: 
    return True 
    elif a < 0 and b < 0 and negative = True: 
    return True 

Hier ist die richtige Antwort ist:

def pos_neg(a, b, negative): 
    if negative: 
    return (a < 0 and b < 0) 
    else: 
    return ((a < 0 and b > 0) or (a > 0 and b < 0)) 

Vielen Dank für Ihre Zeit.

+2

Ihr Problem ist, dass Sie eine Zuweisung '=' verwenden, wo Sie eine Gleichheitsprüfung '==' verwenden sollten (außer Sie sollten dies auch nicht explizit tun) – Tagc

+1

Sie müssen '==' für die Prüfung verwenden, wenn Dinge sind gleich, ** nicht ** '=' – Lagerbaer

+1

Sie geben auch keinen booleschen Wert für jeden Fall zurück (was passiert, wenn 'a'> 0,' b'> 0 und 'negativ' ist wahr?) – Tagc

Antwort

2

Ohne explizit die Lösung für Sie zu schreiben (was meiner Meinung nach sowieso sinnlos wäre, weil der aus dem Antwortbuch so gut wie möglich aussieht), gibt es zwei Fehler, die es wert sind, Sie auf den richtigen Weg zu bringen:

  • Python Gleichheit überprüft werden durchgeführt unter Verwendung ==, nicht=; Letzteres ist der Zuweisungsoperator und führt in diesem Zusammenhang zu einem SyntaxError.
    • Es ist auch nicht gut, boolesche Variablen explizit mit booleschen Konstanten zu vergleichen. Es ist wie wenn jemand dich fragt: "Ist es regnet?" anstatt nur "Regnet es?" An meiner Universität würde uns einer der Professoren 10.000 Mark für das Schreiben von Code andocken (zumindest hat er das gesagt).
  • Es gibt bestimmte Pfade in Ihrer Implementierung, die in None zurückgegeben anstelle eines boolean True oder False führen. Dies ist eine schlechte Methode, da Ihre Funktion von den Clients weniger intuitiv verwendet wird und sie dadurch leichter gefunden werden können. Überlegen Sie, ob a > 0 und b > 0 und negativeTrue ist.

Für was es wert ist, gibt es nichts falsch mit mehreren mit and oder or Operatoren innerhalb eines bedingten Ausdrucks, auch wenn Sie von ihrer short-circuiting behaviour bewusst sein sollten.

0

Nachdem ich '=' zu '==' geändert und eine else-Anweisung hinzugefügt habe, konnte ich die richtige Antwort erhalten. Hier ist mein neuer Code:

def pos_neg(a, b, negative): 

    if a < 0 and b > 0 and negative == False: 
     return True 
    elif a > 0 and b < 0 and negative == False: 
     return True 
    elif a < 0 and b < 0 and negative == True: 
     return True 
    else: 
     return False 

Allerdings bin ich ein wenig verwirrt über Ihre Erklärungen der booleschen Konstanten und Variablen. Wäre es für einen von Ihnen möglich, Ihre Erklärungen zu vereinfachen? Ich bin immer noch neu in Python und Programmierung im Allgemeinen, so dass es auf den ersten Blick schwer zu verstehen war.