Page 8 of 11

Re: Python

Posted: 07 Jan 2022, 15:27
by Nobel
Hur många blanka tecken finns i en text.

Code: Select all

# Räkna blanka tecken, version 2
s = input('Skriv en text: ')
n = 0
for c in s:
    if c == ' ':
        n = n + 1
print(f'Texten innehåller {n} blanka tecken')
Här används for c in s istället för for i in range(0, len(s)). for c in s betyder att man ska löpa igenom alla elementen i string-variabeln s. På det första varvet tilldelas variabeln c värdet s[0], på det andra värdet s[1] osv.

Re: Python

Posted: 07 Jan 2022, 15:34
by Nobel
Exempel. Undersök om en text innehåller något vitt tecken. Till vita tecken räknas mellanslag och tabbar.

Code: Select all

#Undersök om text innehåller något vitt tecken
s = input('Skriv en text: ')
if ' ' in s or '\t' in s:
    print('Innehåller vitt tecken!')
else:
    print('Inget vitt tecken')
1. Användaren för skriva in en sträng som lagras i variabeln s
2. Om mellanslag finns i strängen s, eller om tab finns i strängen s:
3. Skriv innehåller vitt tecken
4. Annars, skriv att den inte innehåller ett sådant.

Re: Python

Posted: 07 Jan 2022, 16:07
by Nobel
Exempel. Vill man ta reda på var i texten det första vita tecknet finns kan man köra följande program. Om det finns minst ett vitt tecken i s, talar programmet om indexet för detta tecken, annars så skriver det ut meddelandet Inget vitt tecken.

Code: Select all

# Leta efter det första vita tecknet i en text
s = input('Skriv en text: ')
i = 0       # en räknare
for c in s:
    if c == ' ' or c == '\t':
        break
    i = i + 1
if i < len(s):
    print(f'Första vita tecken finns på plats {i}')
else:
    print('Inget vitt tecken')
1. Användaren anger en sträng som lagras i variabeln s.
2. En räknare, i, tilldelas värdet 0.
3. För tecken (c) i strängen s:
4. Om tecknet = mellanslag, eller om tecknet lika med tab, avbryt loopen. Om tecknet inte är lika med mellanslag eller tab så ökar i med 1.
5. Om vi antar att break-satsen körts, så ska programmet undersöka om i är mindre än längden av strängen, om den är det, skriv ut på vilken plats, vilket index, mellanslaget eller taben observerades på.
6. Annars (om i = len(s)), innebär det att inga mellanslag eller tabar observerades. Skriv ut att Inget vitt tecken.

Re: Python

Posted: 07 Jan 2022, 16:18
by Nobel
Operatorn "in".


Operatorn in kan användas för att skapa logiska uttryck:
e in s
Uttrycket blir sant om elementetet e ingår i sekvensen s.

Operatorn in kan också användas i for-satser:
for e in s:
....en eller flera indragna satser

På det första varvet tilldelas e det första elementet i sekvensen s, på det andra varvet det andra elementet osv. När for-satsen avslutas innehåller e det sista elementet i sekvensen s.

Re: Python

Posted: 08 Jan 2022, 10:32
by Nobel
Uppgift.

Code: Select all

# Leta efter det första vita tecknet i en text
s = input('Skriv en text: ')
i = 0       # en räknare
for c in s:
    if c == ' ' or c == '\t':
        break
    i = i + 1
if i < len(s):
    print(f'Första vita tecken finns på plats {i}')
else:
    print('Inget vitt tecken')
Gör om programmet ovan så att så att man istället letar efter det sista vita tecknet.

Min lösning, fokuserar på att först invertera strängen och sedan räkna hur många tecken det finns innan första vita tecknet. Detta gör jag genom att skapa en skiva där strängen går baklänges s[::-1]:

Code: Select all

# Leta efter det sista vita tecknet i en text
s = input('Skriv en text: ')
i = 0       # en räknare
for c in s[::-1]:
    if c == ' ' or c == '\t':
        break
    i = i + 1
if i < len(s):
    print(f'Första vita tecken finns på plats {i}')
else:
    print('Inget vitt tecken')
Facit hade en annan lösning:

Code: Select all

# Leta efter det sista vita tecknet i en text
s = input("Skriv en text: ")
i = len(s)-1
while i >= 0:
    if s[i] == " " or s[i]  == "\t":
        break
    i -= 1
if i >= 0:
    print(f"Sista vita tecken finns på plats nr {i:d}")
else:
    print("Inga vita tecken")
1. Användaren matar in en sträng
2. i är strängens längd - 1, vilket ger strängens sista position. Alltså får i strängens längd som värde.
3. Medan i är större än eller lika med 0:
4. Om s[i} är mellan slag eller ett tabtecken, bryt loopen
5. Minska i med 1.
6. Repetera tills det att i blir mindre än 0.
7. Om i >= 0 innebär det att ett vitt tecken har stötts på, skriv ut positionen.
8. Annars har inga vita tecken stötts på.


Om någon hittar att mitt program inte gör samma sak som programmet i facit, let me know!

Re: Python

Posted: 08 Jan 2022, 10:54
by Inwatto
Har du provkört ditt lilla program? Tror inte det fungerar. Räknaren är "antal tecken från slutet" medan facits räknare är "antal tecken från början" vilket ger olika resultat.

Re: Python

Posted: 08 Jan 2022, 11:32
by Nobel
Det var min testning av programmet som var inadekvat. Mitt program kraschar inte, men ger inte samma svar som facit. Tänkte att [::-1] ger en inverterad sträng, så då borde man kunna räkna framifrån och få samma resultat, men det fungerar ju inte så.

Om jag kör mitt program med den särskrivna strängen 'program språk'
Så får jag svaret: Sista vita tecken finns på plats 5
Mitt program räknar k, å, r, p, s, vitt tecken. Det berättar hur många steg bakifrån strängens första vita tecken kommer.

Om jag kör facits program med samma sträng får jag: Sista vita tecken finns på plats nr 7
Den räknar framifrån, vilken position det vita tecknet har räknat framifrån.

Om jag modifierar min kod med att lägga till i if-blocket att innan breaken beräkna i till sista positionen - i (i = len(s)-1 - i) så blir resultatet samma:

Code: Select all

# Leta efter det sista vita tecknet i en text
s = input('Skriv en text: ')
i = 0       # en räknare
for c in s[::-1]:
    if c == ' ' or c == '\t':
        i = len(s)-1 - i
        break
    i = i + 1
if i < len(s):
    print(f'Första vita tecken finns på plats {i}')
else:
    print('Inget vitt tecken')
Hoppas att jag förstått det hela rätt.

Tack Inwatto, är du en programmeringsguru? :) Uppskattar verkligen din hjälp.

Re: Python

Posted: 08 Jan 2022, 12:00
by Nobel
Uppgift. Skriv en ny version av programmet som letar efter det första vita tecknet . Använd en for-sats med range och en else-del.

Code: Select all

s = input('Skriv en text: ')
i = 0       # en räknare
for i in range(0, len(s)):
    if s[i] == ' ' or s[i] == '\t':
        print(f'Första vita tecknet finns på plats {i}')
        break
else:
    print('Inga vita tecken')
1. Mata in en text
2. i = 0, en räknare
3. För i i intervallet 0 till strängens längd:
4. Om strängens värde index i är mellanslag eller tab
5. Skriv ut på vilken plats det vita tecknet finns
6. break, bryt for-loopen
7. om inga vita tecken stöts på, kör else-delen, skriv ut Inga vita tecken.

Re: Python

Posted: 08 Jan 2022, 12:04
by Richard
Jag gjorde en räknare som räknar på hur mycket man kan flumma på sin Lyrica, men den passar alla mediciner...

Code: Select all

print("Välkommen till Flumräknaren!")  #Flumräknaren
print("")
print("Så får du ut mest av din medicin!")
print("")
print("Först måste vi veta lite om ditt recept på det roliga, vänligen fyll i dessa 8 frågor:")

print("-------------------------------------------------------------------------------------------------------------")

hurmangauttag = int(input("Hur många uttag har du? ")) #Hur många uttag har du?

hurmangapaket = int(input("Hur många paket har du fått utskrivet per gång? ")) #Hur många paket har du fått utskrivet per gång?

hurmangatabletter = int(input("Hur många tabletter är det i varje paket? ")) #Hur många tabletter är det i varje paket?

skataperdag = int(input("Hur många tabletter har du utskrivet per dag? ")) #Hur många tabletter har du utskrivet per dag?

senastehosdoktorn = int(input("Hur många dagar var det sen du fick receptet? ")) #Hur många dagar var det sen du fick receptet?

nastahosdoktorn = int(input("Hur många dagar är det till nästa läkarbesök? ")) #Hur många dagar är det till nästa läkarbesök?

flumdos = int(input("Hur många tabletter behöver du för att flumma? ")) #Hur många tabletter behöver du för att flumma?

samtliga = (hurmangauttag * hurmangapaket * hurmangatabletter) #Räknar ut totalt antal tabletter

print("")
print("Om du inte flummat bör du ha", (samtliga - (senastehosdoktorn * skataperdag)), "kvar.") #Kontroll av kvarvarande antal

print("")
harkvar = int(input("Hur många tabletter/kapslar har du egentligen kvar? ")) #Hur många tabletter/kapslar har du kvar?
print("")

dagar = (samtliga / skataperdag) #Totalt antal dagar

dagarmellanbesok = (senastehosdoktorn + nastahosdoktorn) #Dagar mellan besök

totalflum = (samtliga / flumdos) #Räknar ut total antal flumdagar

dagarderackeri = (harkvar / skataperdag) #Räknar ut dagar det räcker i

kvarvarandedagar = (dagarderackeri - nastahosdoktorn) #Räknar ut kvarvarande dagar

kvarattflumma = (kvarvarandedagar / flumdos) #Räknar ut hur många gånger man kan flumma till

print("") #Utsats
print("-------------------------------------------------------------------------------------------------------------")
print("Du har fått", samtliga ,"tabletter utskrivna, o de ska räcka i", dagarmellanbesok ,"dagar, men du har fått utskrivet för", dagar ,"dagar") 
print("Om du vill så kan du flumma, det kan du göra", totalflum ,"gånger totalt istället. Du har", harkvar ,"tabletter kvar, och de")
print("ska räcka i", nastahosdoktorn ,"dagar, och de räcker i", dagarderackeri ,"dagar. Alltså kan du flumma", kvarattflumma ,"gånger till på det,")
print("utöver ordinerad dos, som är kvar.")
print("") #Kommentar om flummeriet
if (nastahosdoktorn < dagarderackeri):
    print("Du kan flumma på ett tag till!")
else: 
    print("Du bör ta det lite lugnare med flummet!")
    

Re: Python

Posted: 08 Jan 2022, 12:15
by Nobel
Testade att köra ditt program, Richard! Jag kan flumma 112 gånger på Abilify enligt det. Även om det inte är en flum-medicin, så var ditt program roligt :D

Re: Python

Posted: 08 Jan 2022, 12:45
by Nobel
Som ett exempel kommer här ett program som översätter datum, skrivet i den form som används i USA, till den form som vi brukar använda. I Sverige skriver vi åååå/mm/dd medan man i USA istället skriver mm/dd/åå.

Code: Select all

# Översätt amerikanskt datum till svensk form
a = input('Skriv ett amerikanskt datum som mm/dd/åå: ')
månad = a[:2]
dag = a[3:5]
år = a[6:]
s = '20' + år + '-' + månad + '-' + dag
print('Svenskt datum: ' + s)
1. Användaren för skriva in ett datum på formen mm/dd/åå (exempel: 11/14/20)
2. Skapa en skiva månad där de två första siffrorna mm lagras i variabeln månad
3. Skapa en skiva dag där siffrorna dd lagras i variabeln dag
4. Skapa en skiva år där siffrorna lägras i variabeln år
5. Skapa en sträng s, som innehåller 20 + år + - + månad + - + dag
6. Skriv ut datumet i svensk stil.

Utskriften blir:

Code: Select all

Svenskt datum: 2020-11-14

Re: Python

Posted: 08 Jan 2022, 12:53
by Nobel
Uppgift. Skriv ett program som översätter ett svenskt datum till amerikansk form.

Code: Select all

a = input('Skriv ett svenskt datum som åååå-mm-dd: ')
år = a[2:4]
månad = a[5:7]
dag = a[8:]
s = månad + '/' + dag + '/' + år
print('Amerikanskt datum: ', s)
1. Användaren skriver in ett datum på formen åååå-mm-dd.
2. Skiva skapas från a och lagras i variabeln år
3. Skiva skapas och lagras i variabeln månad
4. Skiva skapas och lagras i variabeln dag
5. Strängen s skapas där skivorna adderas till en ny sträng
6. Datumet skrivs ut