Python

Om att köpa dator, lösa datorproblem och tipsa om dataspel.

Moderator: Moderator 1

User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post 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.
'cause the freak inside controls my mind
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post 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.
'cause the freak inside controls my mind
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post 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.
'cause the freak inside controls my mind
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post 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.
'cause the freak inside controls my mind
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post 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!
'cause the freak inside controls my mind
User avatar
Inwatto
Lutetiummedlem
Posts: 1754
Joined: 08 Jul 2021, 18:14
Location: Skåne

Re: Python

Post 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.
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post 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.
'cause the freak inside controls my mind
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post 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.
'cause the freak inside controls my mind
User avatar
Richard
Administratör
Posts: 8173
Joined: 10 May 2021, 13:45
Location: Ängelholm
Contact:

Re: Python

Post 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!")
    
Blogg, dagbok och hemsida: https://www.richardhandl.com/
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post 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
'cause the freak inside controls my mind
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post 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
'cause the freak inside controls my mind
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post 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
'cause the freak inside controls my mind
Post Reply