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)+ "|")
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
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("|")
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..
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!
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("|")