10 svar
58 visningar
morfisen är nöjd med hjälpen
morfisen 7
Postad: 21 mar 10:02

Python funktion

Första inlägget här då, så lär bli intressant. Jag har fastnat på denna uppgiften ett tag nu, men vet inte vad jag missar, så vore skönt om någon kan stråla lite ljus på den.

I denna uppgift skall du, i rutan nedan, ange programkod för en extern funktion med namnet findel. Funktionen skall ha två vektorer  u och v som input och en vektor P som output. Funktionens uppgift skall vara att plocka ut de platser i  u som innehåller ett element/tal som också finns på någon plats i vektorn v.

 

Om t.ex. u=[1, 7, 4, 9, 3, 2, 0, 3] och v=[8, 5, 3, 7, 5] så skall  findel(u,v) ge output (array([1, 4, 7]),) och om u=[1, 2, 3, 4, 5, 6] och v=[1, 2, 3, 1, 2, 3] så ska output vara (array([0, 1, 2]),).

Min kod: 

import numpy as np 

def findel(u, v):

 Q = np.zeros(len(u)), dtype=bool)

 for i in range(len(u)):

  for j in range (len(v)):

   if u[I]==v[j]:

    Q[i]=True

  break

P=np.where(Q)

return P

sictransit 444 – Livehjälpare
Postad: 21 mar 10:35 Redigerad: 21 mar 10:37

Hej och välkommen till PU!

Formatera gärna din kod som "programmeringskod", så den blir läsbar. Det finns en knapp {;} för det. (Se så fint det blir i min ruta nedan.)

Hur som helst verkar numpy överflödigt för att lösa det här. Du behöver heller inte loopa över elementen i v, utan kan använda enumerate() och in. Läs gärna på om dem!

Jag skulle spontant göra något åt det här håller:

def findel(u, v):
    indices = []
    
    for index, element in enumerate(u):
        if element in v:
            indices.append(index)
    
    return indices

print(findel([1, 7, 4, 9, 3, 2, 0, 3],[8, 5, 3, 7, 5]))

Behöver du annan output, får du modifiera koden (och kanske använda numpy ändå). Kanske har numpy något inbyggt för precis exakt detta? Det har jag inte koll på.

Notera även att jag kallat mina variabler för något vettigt, så man lättare läser koden och förstår vad som händer.

Laguna 28752
Postad: 21 mar 10:41

Vad händer när du kör din kod?

sictransit 444 – Livehjälpare
Postad: 21 mar 10:44 Redigerad: 21 mar 10:47
Laguna skrev:

Vad händer när du kör din kod?

Prova gärna själv, men det här är vad jag får:

[1, 4, 7]


** Process exited - Return Code: 0 **
Press Enter to exit terminal

Tillägg: 21 mar 2024 10:46

Ah! Frågan var förstås inte ställd till mig, utan en mycket relevant till morfisen. Såg inte vem som frågade. Sorry!

morfisen 7
Postad: 21 mar 10:50

Tack för klarheten rådande formaliteten på PU, ska försöka bibehålla den andan i fortsättningen. Rådande koden, så ger den det förväntade svaret, som belyses i frågan, men är inte en "lösning". Jag borde kanske varit i tydligare i min ursprungs post, men i frågan så nämns också ett "flödesschema", och det var den jag grundade mig utifrån då jag skrev min kod.

Laguna 28752
Postad: 21 mar 10:54

Varför är det inte en lösning, om det fungerar?

morfisen 7
Postad: 21 mar 10:55

Vet faktiskt inte.

morfisen skrev:

Vet faktiskt inte.

Då har vi nog svårt att hjälpa till. I mina ögon har du en lösning på givet problem, dessutom väldokumenterad med flödesschema och allt. Om någon sagt att den inte duger, så vore det intressant att veta varför. 

morfisen 7
Postad: 21 mar 11:31

Tack för hjälpen hursomhelst! Kommer nog vara mer aktiv på PU i framtiden. I nuläget, så är det en annan uppgift som knäcker mig. 

Nämligen: 

"Välj ut åtta kommandon från listan till vänster nedan som, om de placeras i rätt ordning, bildar en extern funktion som undersöker om ett ord är ett palindrom. Funktionen skall ha ett teckenfält som input (som innehåller ordet) och ett logiskt värde som output (dvs. med datatypen bool). Placera kommandoraderna i rätt ordning i listan till höger (drag kommandona med muspekaren till rätt plats)."

Jag har testat de flesta lösningar för denna, men kommer verkligen inte fram till ett "svar". Skulle vara schyst om någon kan belysa mig.

def palindrom(V):
P=paplindrom(V)
if len(V)<=1:
P=true
elif V[0]==V[len(V)-1]:
return P
else:
P=False
P=paplindrom(V[1:len(V)-1])
if len(V)>1:
P=paplindrom(V[2:len(V)])
if V[0]==V[len(V-1)]:
elif len(V)==1:

Spännande, men starta en ny tråd för ny fråga, i enlighet med riktlinjerna. 

morfisen 7
Postad: 21 mar 11:42

Okej :)

Svara Avbryt
Close