5 svar
166 visningar
jonte12 är nöjd med hjälpen
jonte12 468
Postad: 22 aug 2022 18:44

Mönster i Python

Hej

Jag håller på att göra ett program där användaren ska skriva in höjd och bredd på en rektangel. Sedan ska en rektangel ritas upp där var fjärde tecken på översta raden är ett "w" som sedan faller nedåt ända tills det står i kanten på rektangeln, enligt bild:

Inmatningen och rektangeln får jag till, men med "w" förstår jag inte riktigt hur jag ska göra.

Jag har en tanke om att man kan skriva en for sats. Så att en rad skulle kunna se ut såhär. men då får jag ju bara till en streck med ett "w" rakt nedåt.

    for row in range(height, 0, -1):
        print("|"+ " "*4 +"w" +" "*(width-5)+ "|")
CurtJ 1143
Postad: 22 aug 2022 22:29

Med din for-sats skriver du ut exakt samma sak för varje rad.  Tänk dig i stället att du för varje rad först skriver en pipe "|" och sen loopar du igenom positionerna i raden och skriver ut "nästa" tecken av blank-blank-blank-w och slutligen skriver du ut en pipe "|" till.

Som tips om du inte vill ha varje utskrift på en ny rad så kan du ange parametern end='' i din print-sats som i

print("w", end='')

Det finns olika sätt att bestämma vilket tecken som är det nästa men försök och återkom om det inte fungerar så får du lite mer tips

jonte12 468
Postad: 23 aug 2022 15:45 Redigerad: 23 aug 2022 17:19
CurtJ skrev:

Med din for-sats skriver du ut exakt samma sak för varje rad.  Tänk dig i stället att du för varje rad först skriver en pipe "|" och sen loopar du igenom positionerna i raden och skriver ut "nästa" tecken av blank-blank-blank-w och slutligen skriver du ut en pipe "|" till.

Som tips om du inte vill ha varje utskrift på en ny rad så kan du ange parametern end='' i din print-sats som i

print("w", end='')

Det finns olika sätt att bestämma vilket tecken som är det nästa men försök och återkom om det inte fungerar så får du lite mer tips

Jag förstår inte riktigt hur du menar. Alltså hur vet man hur många gånger man ska skriva ut blank-blank-bland-w? 

print("|", end="")
	for col in range(width):
		print("_ _ _w"*(width/4), end="")
		width=width-1
print("|")
CurtJ 1143
Postad: 23 aug 2022 18:04

Mönstret är ju att du skriver det tecken för tecken så länge du får plats på raden och sen börjar du nästa rad med nästa tecken i sekvensen.

Pseudokoden kan se ut såhär



för varje rad
    skriv ut "|"
    för varje position i raden 
		skriv ut nästa tecken i sekvensen
    skriv ut "|"

 

Om du börjar med att definiera sekvensen  som t ex

c_array = "   w"

och en pekare som du använder för att peka ut nästa tecken i sekvensen

c_idx = 0

Om du sen räknar upp c_idx med 1 och använder c_idx modulo längden på c_array så får du automatiskt loopen

ex:

c_idx += 1
c_array[c_idx % 4]

Jag antar att du har gått igenom modulo-operatorn men om inte så innebär det resten vid heltalsdivision.

Återkom om du fortf har frågor..

jonte12 468
Postad: 24 aug 2022 18:32
CurtJ skrev:

Mönstret är ju att du skriver det tecken för tecken så länge du får plats på raden och sen börjar du nästa rad med nästa tecken i sekvensen.

Pseudokoden kan se ut såhär



för varje rad
    skriv ut "|"
    för varje position i raden 
		skriv ut nästa tecken i sekvensen
    skriv ut "|"

 

Om du börjar med att definiera sekvensen  som t ex

c_array = "   w"

och en pekare som du använder för att peka ut nästa tecken i sekvensen

c_idx = 0

Om du sen räknar upp c_idx med 1 och använder c_idx modulo längden på c_array så får du automatiskt loopen

ex:

c_idx += 1
c_array[c_idx % 4]

Jag antar att du har gått igenom modulo-operatorn men om inte så innebär det resten vid heltalsdivision.

Återkom om du fortf har frågor..

Nu fick jag till det! Tack så mycket för hjälpen! 

CurtJ 1143
Postad: 24 aug 2022 19:26

För referens så får du mitt förslag till lösning så kan du jämföra. Jag har inte läst in höjd o bredd utan hårdkodar det för enkelhetens skull

c_idx = 0
c_array = "   w"
height = 10
width = 13

#
# Definiera en funktion som
# returnerar nästa tecken givet ett index
# modulo längden på teckensträngen
#
def next_char(idx):
    return c_array[idx % len(c_array)]


for row in range(height):
    print("|", end='')
    for c in range(width):
        c_idx += 1
        print(next_char(c_idx), end='')
    print("|")
Svara Avbryt
Close