2017-06-29 3 views
-2

Ich versuche, ein mathematisches Problem in Python zu implementieren, die die Anzahl der Zahlen zurückgibt teilbar durch X zwischen M und N, wo M < = N.Implementierung eine mathematische Formel in Python

Ich habe den Code unten geschrieben:

result_list = [] 

for _ in range(int(raw_input())): 
    a, b, m = map(int,raw_input().split()) 
    counter = a 
    result = 0 

    if a % m == 0: 
    while counter <= b: 
     result += 1 
     counter += m 
    else: 
    for e in range(a, b + 1): 
     if e % m == 0: 
     while counter <= b: 
      result += 1 
      counter += m 
     break 

    result_list.append(result) 

for e in result_list: 
    print (e) 

Allerdings, wenn ich es laufen, ich bin nicht in der Lage das Ergebnis, das ich brauche. Es wäre toll, Hilfe bei der Lösung dieses Problems zu bekommen.

+0

Was meinen Sie, Sie sind nicht in der Lage, das Ergebnis zu bekommen, das Sie brauchen? – EJoshuaS

+0

Bitte sehen Sie [fragen] und [Warum ist "Kann mir jemand helfen?" Keine eigentliche Frage?] (Http://meta.stackoverflow.com/q/284236) – EJoshuaS

+0

Bitte seien Sie klar, was Ihr Problem eigentlich ist. Ist das überhaupt dein Code? –

Antwort

1

Ihr Programm ist ein wenig verwirrend und scheint einige grundlegende Fehler zu haben. Hier ist, wie ich es tun würde, wenn ich die Herausforderung machen würde:

Ich denke, die ersten 2 Zeilen sind ziemlich klar. Wichtiges aus den ersten 2 Zeilen: Nennen Sie Ihre Variablen deutlich. Verwenden Sie nicht a, b, x für Eingaben, die Sie m, n, x nennen.

Ich werde die dritte Zeile aufteilen, um zu zeigen, was ich mache. Der kleinste Teil ist

range(m,n) 

Diese Liste gibt in diesem Bereich jede Zahl aus, ohne n, wenn Sie also auf eine bestimmte Anzahl k gehen wollen, n sollte gleich k + 1. Wenn beispielsweise m = 3, n = 10 und x = 20, wird die Liste

[3, 4, 5, 6, 7, 8, 9] 

Als nächstes wird die Liste Verständnis

[i%x==0 for i in range(m,n)] 

Es über den Bereich m-Schleifen, n und Tests wenn jede Zahl in diesem Bereich durch x teilbar ist. Wenn die Zahl durch s teilbar ist, wird True gesetzt, wenn sie nicht teilbar ist, wird False gesetzt. In dem obigen Beispiel würde es geben:

[False, True, True, False, False, False, False] 

Wie Sie die zweite und dritte Elemente sehen können, sind wahr und wahr, weil ich bis 4 bzw. 5 für die Punkte auf der Liste entspricht.

jetzt, dass wir unsere Liste voll booleans haben Karte wir diejenigen, die wahr sind mit

[x%i==0 for i in range(m,n)].count(True)) 

und die Antwort drucken.

Wenn Sie stattdessen eine Liste wünschen, können Sie sie an eine Liste anhängen, anstatt sie zu drucken.

+0

Danke, Sam! Ich verstehe deine Logik, bekomme aber immer noch nicht die Antwort, die ich brauche. Zum Beispiel, wenn m = 2, n = 6 und x = 2, müsste die Antwort 3 sein, da es 3 Zahlen zwischen 2 und 6 gibt, die durch 2 teilbar sind: [2, 4, 6]. Dieses Programm gibt jedoch 1 zurück. – Eddev

+0

Ich glaube, ich habe falsch verstanden, wonach Sie gesucht haben. Ich habe meinen Kommentar bearbeitet, um das zu reflektieren. –

Verwandte Themen