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()
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.
Kiitos!
Aihe on jo aika vanha, joten et voi enää vastata siihen.