2017-11-20 1 views
0

Ich habe ein Problem, das ich nicht scheinen kann, herauszufinden. Ich bin Python sehr neu und habe erst seit drei Wochen programmiert. Jede Hilfe wird geschätzt.Multiplizieren jedes Nth Element in einer Liste von M

Problem:

Wir sind in der 3 Eingänge vorbei:

  • eine Liste von Zahlen
  • ein Multiplikatorwert, M
  • ein Wert, N

Sie sollten jedes N-te Element multiplizieren (Multiplizieren Sie nicht das 0-te Element) mit M. Also, wenn N ist 3, Sie beginnen mit dem 3. Element, das den Index 2 darstellt.

Wenn weniger als N Elemente vorhanden sind, sollten Sie die unveränderte Eingabeliste ausgeben.

Ich kann nicht scheinen, dies herauszufinden. Ich habe hier viele verschiedene Dinge ausprobiert. Derzeit habe ich folgendes, was überhaupt nicht funktioniert.

bereitgestellt:

import sys 
M= int(sys.argv[2]) 
N= int(sys.argv[3]) 

numbers= sys.argv[1].split(',') 
for i in range(0, len(numbers)): 
    numbers[i]= int(numbers[i]) 

Mein Code:

for N in numbers: 
    if numbers[i] > 0: 
    total = N * M 
    print(total) 
else: 
    print(numbers) 

Ausgang:

ich nicht einmal in der Nähe bin, was sollte die Ausgabe sein. Ich fühle mich dabei verloren. Hier ist, was mein Code zukommt. Es sieht so aus, als wollten sie die Ausgabe in einer Liste.

Program Failed for Input: 1,2,3,4,5,6 5 3 
Expected Output: [1, 2, 15, 4, 5, 30] 
Your Program Output: 
5 
10 
15 
20 
25 
30 
+0

Danke für mich mit meiner Frage zu unterstützen , Martineau. Ich bin neu auf dieser Seite und der Programmierung im Allgemeinen, also schätze ich die Hilfe. Ich habe diese Seite wirklich genossen und die Gemeinschaft scheint sehr freundlich, freundlich und hilfsbereit zu sein. – Logan

Antwort

0

wird dies für Sie arbeiten?

res = [] 
for num in numbers: 
    if num > 0: 
     total = num * M 
     res.append(total) 

if len(res) != len(numbers): 
    print (numbers) 
else: 
    res.reverse() 
    print (res) 
2

Eine elegantere Lösung Listenkomprehensionen mit;)

[item*M if (index and not (index+1)%N) else item for index, item in enumerate(items)] 

enter image description here

+0

Die SS war für ein Ausführungsbeispiel, die Textantwort ist gerade oben. – Abend

+0

Die Tatsache, dass Sie nicht bemerkt haben, bedeutet nicht, dass es nicht da war. Wenn Sie den Bearbeitungsverlauf überprüfen, wurde der SS nach der Textantwort hochgeladen. – Abend

+0

Fertig :) danke für die Zeit der Antwort und sorry, wenn ich ein wenig verrückt klang. – Abend

0

Diese Lösung wird auf dem Original basiert. Eine pythonic eines zum Beispiel verwenden würde, eine Liste Verständnis, so dass in Zukunft im Auge behalten,

Wenn N nicht größer als die Listengröße ist, erstellt das Programm eine neue Liste von Zahlen mit jeder N-te Nummer multipliziert mit M. Dies geschieht mit einem einfachen Modulo-Operator. Die Indizierung in Python beginnt mit Null und ich durchblättere die Indexwerte, aber die gewünschte Ausgabe zählt die Elemente so, als ob sie von 1 ausgehen würden - also i+1 im Modulo. Wenn es nicht jedes Nth - Programm ist, füge einfach den alten Wert an. Wenn die Liste insgesamt kürzer ist als N, weist sie die gesamte unveränderte Liste der Liste output zu.

3

Sie könnten ein Listenverständnis mit Slicing versuchen.

numbers[N-1::N] = [x * M for x in numbers[N-1::N]] 
0

So nach vielen Versuchen und das Prellen eines Freundes aus, der als Programmierer arbeitet, endete ich damit, die mich den richtigen Ausgang gab:

newlist = [] 

if len(numbers) < N: 
    newlist = numbers 
else: 
    for i in range(0, len(numbers)): 
    num = numbers[i] 
    if (i+1) % N == 0: 
     newlist.append(num*M) 
    else: 
     newlist.append(num) 
     i+=1 

print(newlist) 
Verwandte Themen