5 svar
261 visningar
wilmer behöver inte mer hjälp
wilmer 19
Postad: 24 feb 2022 10:19

använda lower()

Hej! Jag behöver hjälp med en programmerings-uppgift. Jag ska skriva en kod med en funktion där a=1, b =2, c=3 etc. där ska funktionen ta ett namn och konvertera bokstäverna i namnet till siffror och sedan skriva ut summan av värdena i namnet.

I uppgiften ska man även göra alla stora bokstäver till små, så "A" och "a" kommer få samma värde. Mitt problem är att jag inte vet hur jag ska få in "lower()" i min kod. Såhär har jag skrivit hittills, utan att använda "lower()" och får rätt när det endast är små bokstäver i ett namn:

def numeric_value(name):
    sum = 0
    for letters in name:
        sum = sum + (ord(letters) - 96)
    return sum
print(numeric_value("alice"))

här skriver den ut 30 som värdet för namnet, vilket är korrekt.

Sen försökte jag få in "lower()" för att konvertera stora bokstäver till små såhär: 

def numeric_value(name):
    sum = 0
    for letters in name:
        letters = name.lower()
        print(letters)
        for letters in name:
            print(letters)
            sum = sum + (ord(letters) - 96)
        return sum

print(numeric_value("Alice"))

men med denna kod får jag -2 som resultat när första bokstaven är stor. Hur kan jag göra för att fixa problemet? :) 

Programmeraren 3390
Postad: 24 feb 2022 10:35 Redigerad: 24 feb 2022 10:57

Det ser ut som att du har dubbla loopar, "for letters in name" förekommer två gånger. Du gör iofs return efter första varvet men städa koden först. Du ser kanske felet när du städar (vilken sträng är det du loopar igenom och vilken variabel håller bokstaven?)

farfarMats 1189
Postad: 24 feb 2022 11:18

Ett tips som inte har med problemet att göra:

Ersätt 96 med ord("a")-1  så behövs ingen dokumenterande rad om vad 96 är för påhitt.

wilmer 19
Postad: 24 feb 2022 11:38
Programmeraren skrev:

Det ser ut som att du har dubbla loopar, "for letters in name" förekommer två gånger. Du gör iofs return efter första varvet men städa koden först. Du ser kanske felet när du städar (vilken sträng är det du loopar igenom och vilken variabel håller bokstaven?)

Jag är rätt ny till programmering, hur menar du med städa? Är inte helt säker på vad jag ska ta bort och inte. Jag tänker att variabeln som håller bokstaven är väl letters och strängen jag loopar igenom är name skulle jag tro, men jag vet inte hur jag ska strukturera upp det riktigt! 

Programmeraren 3390
Postad: 24 feb 2022 11:43

a) Du har två loopar, en inuti den andra. Du behöver bara en (som du har i den tidigare versionen)
b) Det är "letters" som först får värdet av name fast med små bokstäver. Men det värdet används aldrig eftersom det efteföljande
for letters in name:
kommer att tilldela letters med respektive bokstav i den oförändrade name. Du menade nog att sätta om name till name.lower().

wilmer 19
Postad: 24 feb 2022 11:49

Ja!! Nu förstår jag hur du menar, det funkar som jag vill nu. Tack så mycket för hjälpen!

Svara
Close