Регистрация не е нужна, освен при създаване на тема в "Задача на седмицата".

Проблем с elif

Проблем с elif

Мнениеот Какаши Сенсей » 17 Ное 2021, 13:05

Здравейте! От няколко часа се опитвам, да разбера защо компилатора не чете часта при последния elif(оградил см го с червено. )
Качил съм ви и това какво ми извежда компилатора, по принцип трябва да се редуват редовете, но те не го правят
Прикачени файлове
Екранна снимка 2021-11-17 130421.png
Екранна снимка 2021-11-17 130421.png (2.16 KiB) Прегледано 474 пъти
Екранна снимка 2021-11-17 130357.png
Екранна снимка 2021-11-17 130357.png (40.72 KiB) Прегледано 474 пъти
Най-важно е душата да бъде извисена .
Какаши Сенсей
Фен на форума
 
Мнения: 119
Регистриран на: 05 Май 2021, 10:26
Рейтинг: 28

Re: Проблем с elif

Мнениеот ammornil » 18 Ное 2021, 19:41

В посочения от Вас код, в частта
...

elif (broyach > midle_line):
br1=0
br1=br1+1

...

br1 никога не приема четна стойност. Всеки път, когато системата влезе в последния if..elif, br1 приема стойност нула, после се увеличава с едно и остава винаги равно на 1, което е винаги нечетно. Може би е по-добре да бъде така:
Код: Избери целия код
import math
broyach=0
br=0
br1=0
size = int(input())
for z1 in range(1,size+1):
    broyach = broyach+1
    midle_line = int(math.ceil(size/2))
    if (broyach<midle_line):
        br=br+1
        if (br%2 != 0):
            print((size-2)*"*"+"|"+" "+"|"+(size-2)*"*")
        else:
            print((size-2)*"-"+"|"+" "+"|"+(size-2)*"-")
    elif (broyach == midle_line):
        print((size-1)*" "+"@")
    else:
        br1=br1+1
        if (br1%2 != 0):
            print((size-2)*"*"+"|"+" "+"|"+(size-2)*"*")
        else:
            print((size-2)*"-"+"|"+" "+"|"+(size-2)*"-")


Ако ми позволите да Ви посъвтвам:
***декларирайте величините (променливи и константи), които са ви нужни за даден метод или програма, в началото на кода на метода (програмата). Това прави нещата по-лесни за проследяване (особено ако добавяте коментари за предназначението на всяка декларирана променлива или константа). Освен това позволява инициализиране на всяка от тях в момента на декларация и избягва проблеми, като показания по-горе.
***когато имате серия от възможни стойности, които изчерпват всички възможни случаи, последната опция няма нужда да е от тип elif, а може да е просто else.
В горния пример, за променливата broyach имаме три възможности >> може да е по-голяма, равна, или по-малка на константата midle_line. Затова можем да изредим следните случаи:
Код: Избери целия код
if (broyach < midle_line):
     ...инструкции за случай 1
elif (broyach == midle_line):
     ...инструкции за случай 2
else:
     ...инструкции за случай 3

Надявам се да съм Ви бил полезен.
Успех!
[tex][/tex]
Прикачени файлове
Screenshot 2021-11-18 172901.png
Screenshot 2021-11-18 172901.png (5.31 KiB) Прегледано 457 пъти
[tex]\color{lightseagreen}\text{''Който никога не е правил грешка, никога не е опитвал нещо ново.''} \\
\hspace{21em}\text{(Алберт Айнщайн)}[/tex]
Аватар
ammornil
Математик
 
Мнения: 3759
Регистриран на: 25 Май 2010, 19:28
Местоположение: Великобритания
Рейтинг: 1774

Re: Проблем с elif

Мнениеот Какаши Сенсей » 19 Ное 2021, 07:57

ammornil написа:В посочения от Вас код, в частта
...

elif (broyach > midle_line):
br1=0
br1=br1+1

...

br1 никога не приема четна стойност. Всеки път, когато системата влезе в последния if..elif, br1 приема стойност нула, после се увеличава с едно и остава винаги равно на 1, което е винаги нечетно. Може би е по-добре да бъде така:
Код: Избери целия код
import math
broyach=0
br=0
br1=0
size = int(input())
for z1 in range(1,size+1):
    broyach = broyach+1
    midle_line = int(math.ceil(size/2))
    if (broyach<midle_line):
        br=br+1
        if (br%2 != 0):
            print((size-2)*"*"+"|"+" "+"|"+(size-2)*"*")
        else:
            print((size-2)*"-"+"|"+" "+"|"+(size-2)*"-")
    elif (broyach == midle_line):
        print((size-1)*" "+"@")
    else:
        br1=br1+1
        if (br1%2 != 0):
            print((size-2)*"*"+"|"+" "+"|"+(size-2)*"*")
        else:
            print((size-2)*"-"+"|"+" "+"|"+(size-2)*"-")


Ако ми позволите да Ви посъвтвам:
***декларирайте величините (променливи и константи), които са ви нужни за даден метод или програма, в началото на кода на метода (програмата). Това прави нещата по-лесни за проследяване (особено ако добавяте коментари за предназначението на всяка декларирана променлива или константа). Освен това позволява инициализиране на всяка от тях в момента на декларация и избягва проблеми, като показания по-горе.
***когато имате серия от възможни стойности, които изчерпват всички възможни случаи, последната опция няма нужда да е от тип elif, а може да е просто else.
В горния пример, за променливата broyach имаме три възможности >> може да е по-голяма, равна, или по-малка на константата midle_line. Затова можем да изредим следните случаи:
Код: Избери целия код
if (broyach < midle_line):
     ...инструкции за случай 1
elif (broyach == midle_line):
     ...инструкции за случай 2
else:
     ...инструкции за случай 3

Надявам се да съм Ви бил полезен.
Успех!
[tex][/tex]



Благодаря Ви, за помощта и съветите!
Най-важно е душата да бъде извисена .
Какаши Сенсей
Фен на форума
 
Мнения: 119
Регистриран на: 05 Май 2021, 10:26
Рейтинг: 28


Назад към PHP, Python и други езици за програмиране



Кой е на линия

Регистрирани потребители: Google [Bot]

Форум за математика(архив)
cron