Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Python: Ohjelman suoritus ei lopu

Vili [13.11.2016 12:37:55]

#

Hei, olen aloitteleva python ohjelmoija ja törmäsin tälläiseen ongelmaan. Pitäisi saada tehtyä laatikko jonka korkeus/leveys käyttäjä määrittää, mutta looppi ei suostu loppumaan.

def reunukset():
     print("*" * määrä)
     ehto = True
     while ehto:
          rivi = 1
          print("*"+ " " * (määrä-2) + "*")
          rivi = rivi + 1
          if rivi == määrä:
               ehto = False
               print("*" * määrä)
          else:
               ehto = True
def laatikko():
     print("*" * määrä)  #Ehto False ei tule täytetyksi siksi ei lopu
     ehto = True
     while ehto:
          rivi = 1
          print("*"+ "*" * (määrä-2) + "*")
          rivi = rivi + 1
          if rivi == määrä:
               ehto = False
               print("*" * määrä)
          else:
               ehto = True

määrä = int(input("Anna tulostettavan neliön sivun pituus: "))
kysymys = input("Täytetäänkö alue merkeillä (k=kyllä): ")

if kysymys == 'k':
     laatikko()
else:
     reunukset()

The Alchemist [13.11.2016 13:07:02]

#

Muuttuja rivi saa jokaisen kierroksen alussa arvokseen 2, joten jos annat määrän joka on jotain muuta kuin kaksi, niin silmukka ei pysähdy ikinä. (Tosin vaikuttaa siltä, että silmukka pitäisi suorittaa vain arvoilla rivi > 2.)

While-silmukassa ei ole oikein mitään järkeä tässä tapauksessa, koska todistit juuri, miten helppoa sillä on tehdä sovellukseen bugi. Jos olisit käyttänyt for-silmukkaa range-funktion kanssa, niin kyseistä bugia ei olisi voinut edes tulla koodiin.

height = int(input("Foobar"))
for i in range(3, height + 1):
    # Tulostuksen hoitava koodi tähän
    pass

P.S. Älä käytä globaaleja muuttujia vaan anna kaikki tarvittavat arvot funktiolle parametreina.
P.P.S. Debuggaa! Jos silmukka ei pysähdy, niin tarkkaile pysähtymisehdon muuttujia vaikka tulostamalla niiden arvo joka kierroksella.

Vili [13.11.2016 17:28:13]

#

Kiitos!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta