Forum / Grundlagen des Programmierens / Hausübung 3 SS16

Rick +15

BSP1 hab i schon gemacht. #--------------------------------------------------------------# neueListe = [ ] for i in range(len(Liste)): a= str(Liste[i]) a=a.swapcase() neueListe.append(a)

#--------------------------------------------------------------#

Rick +1

hat jmd eine idee wie man mittels Python prim Faktoren von eine Zahl finden kann? ( für bsp2 von hü 3 )

ich bin so weit momentan..

Faktoren = [ ] if Zahl!= int(Zahl) or Zahl <0 : return False elif Zahl==0: return False elif Zahl==1: return [ ] elif Zahl == int(Zahl) and Zahl >0 and Zahl!=1 : ???????????????????????????????????????????? #--------------------------------------------------------------#

Philipp +2

Die Letzte elif Abfrage kannst du dir sparen weil sowieso immer Zutrifft. Du hast ja das alles schon vorher indirekt geprüft. ein einfaches else würde genügen! wenn du bei der ersten if abfrage <=0 angibst, dann sparst du dir die elif-abfrage für Zahl==0 auch.

für die Primfaktoren geht man nach der reihe alle zahlen von 2 bis 'Zahl' durch und schaut ob sie ohne Rest durch 'Zahl' teilbar sind. Sobald einmal Rest==0 True ist, ist diese Zahl ein Primfaktor. Du dividierst 'Zahl' durch den Primfaktor und startest mit der neuen 'Zahl' die schleife von vorne! zumindest habs ich so gelöst

-->for-schleife

Rick ±0

Danke Philipp. :)

Rick ±0

Faktoren = [ ] if Zahl>1: for i in range(2,Zahl): primfactor = [ ] if (Zahl % i) == 0: primfactor += Zahl else: break elif Zahl==1: return [ ] else: return False

Weiß jemand warum das nicht funktioniert?

Thomas +1

nach der if (Zahl % i)-Abfrage addierst du auf eine Liste einen Integer: primfactor += Zahl

für was definierst du die Liste 'primfactor', wo du doch oben die vorgegebene Liste 'Faktoren' hast?

so könnte es ungefähr aussehen

ist die Zahl ein positiver integer? ..while Zahl !=1 ....primfaktor für Zahl finden (for-schleife die du fast richtig hast) ....primfaktor in Faktorenliste eintragen ....Zahl durch Primfaktor teilen ..Faktorenliste zurück geben kein ganzzahliger integer: ..Falsch zurück geben

Christoph +1

weiß jmd warum bei mir zum Bsp bei Liste = ['ZWei2','DreI','SieBen', 'Dreizehn'] nur das immer das letzte Element umgewandelt wird? hier meine bsp1)

neueListe = []

for i in range(len(Liste)):
    
 l = str(Liste[i])

l = l.swapcase()

neueListe.append(l)
Thomas ±0

du musst das l.swapcase() und append(l) muss für jeden durchlauf der schleife gelten: for i in range(len(Liste)): ....l = str(Liste[i]) ....l = l.swapcase() ....neueListe.append(l)

Christoph ±0

danke ;) , weiß wer wies ohne swapcase gehen würde?

Florian ±0

Man muss für jeden einzigen Buchstaben prüfen ob er gross oder klein ist mit isupper und islower. Dann muss man mit upper and lower es umtauschen. Dann muss man alle Buchstaben wieder zu einem Wort zusammenfügen und dann das Wort wieder einer Liste hinzufügen. Es ist nicht umbeding lang, aber komplizierter da du es schaffen musst zuerst ein Wort aus der Liste zu nehmen und dann ein Buchstabe aus dem Wort.

Rick ±0

Danke Thomas ich habs schon gemacht ;)

Jakob +1

Erstes Beispiel der HÜ3 ist OHNE .swapcase() zu lösen... empfehlen die Tutoren!

Hier meine Lösung mit Schleifen:

neueListe_1 = []
neueListe = Liste[:]
l = (len(Liste[0]))
k = 0

for i in range(len(Liste)): 
   
   for j in range(len(Liste[i])):   
        
        if Liste[i][j].isalpha():            
            
            if Liste[i][j].islower():
                neueListe_1.append(Liste[i][j].upper())     
            else:
                neueListe_1.append(Liste[i][j].lower())
        else:
            neueListe_1.append(Liste[i][j])

   if i == 0:
        neueListe[0] = &quot;&quot;.join(neueListe_1[0:(len(Liste[0]))])    
   else:
        k = k +  len(Liste[i-1])
        l = l +  len(Liste[i]) 
        neueListe[i] = &quot;&quot;.join(neueListe_1[k:l])

return neueListe
Ana ±0

Das ist mein Algorithmus für das 2.Beispiel. Das Programm gibt mir allerdings zu viele Zahlen zurück. Also zB bei 16 [2,2,4,8], bei 25 [5,5,5]. Weiß wer was falsch ist? def PrimfaktorZerlegung(Zahl): Faktoren = [] if Zahl <= 0 : return False elif Zahl == 1: return [] else: for i in range(2,int(Zahl)): if Zahl % i == 0: for j in range(2,int(Zahl**(1./2.))+1): if i%j != 0: Faktoren.append(i) return Faktoren

Jan +4

Hier ist meine Lösung zum Beispiel 2!