оператор if выполняет только блок else - PullRequest
0 голосов
/ 16 ноября 2018

Я делаю программу, которая составляет список оценок с буквенной оценкой в ​​Python.Но проблема в том, что операторы if-else для определения буквенной оценки выполняются только оператором else, когда даны входные данные.Но оператор if для оценки «A +» работает, если выставлены максимальные оценки.Я новичок, и я не могу понять, где ошибка, пожалуйста, помогите.Ниже приведен мой код на Python, здесь datails.html собирает информацию от пользователя и список результатов отображается на странице results.html.

from flask import Flask, render_template, request
app=Flask(__name__)

@app.route("/")
def index():
return render_template('details.html')
@app.route("/send",methods=['POST','GET'])
def send():

if(request.method=='POST'):
    getname=request.form['name']
    getregno=request.form['regno']
    getcollege=request.form['college']
    getsem=request.form['sem']
    getsub1=request.form['sub1']
    getsub1m=request.form['sub1m']
    getsub2=request.form['sub2']
    getsub2m=request.form['sub2m']
    getsub3=request.form['sub3']
    getsub3m=request.form['sub3m']
    getsub4=request.form['sub4']
    getsub4m=request.form['sub4m']

    malayalam_mark = int(getsub1)
    malayalam_maxmark = int(getsub1m)
    english_mark = int(getsub2)
    english_maxmark = int(getsub2m)
    maths_mark = int(getsub3)
    maths_maxmark = int(getsub3m)
    computer_mark = int(getsub4)
    computer_maxmark = int(getsub4m)

    percent_malayalam = malayalam_mark/malayalam_maxmark*100
    percent_english = english_mark/english_maxmark*100
    percent_maths = maths_mark/maths_maxmark*100
    percent_computer = computer_mark/computer_maxmark*100

    slist=  [percent_malayalam,percent_english,percent_maths,percent_computer]

    result_list=[]

    for i in slist:

            if i>=50 and i<58:

                    grade='D+'
                    result='pass'

            elif i>=58 and i<65:

                    grade='C'
                    result='Pass'

            elif i>=65 and i<72:

                    grade='C+'
                    result='Pass'

            elif i>=72 and i<79:

                    grade='B'
                    result='Pass'

            elif i>=79 and i<86:

                    grade='B+'
                    result='Pass'

            elif i>=86 and i<93:

                    grade='A'
                    result='Pass'

            elif i>=93 and i<=100:

                    grade='A+'
                    result='Pass'

            else:
                    grade='D'
                    result='Fail'



            result_list.append(grade)
            result_list.append(result)


    return render_template('/results.html',list=result_list,a=getname,b=getregno,c=getsem,d=getcollege,e=getsub1,e1=getsub1m,f=getsub2,f1=getsub2m,g=getsub3,g1=getsub3m,h=getsub4,h1=getsub4m)

if(__name__=='__main__'):
    app.run(debug=True)

Я включаю страницу результатов, здесь я включилВ последнем списке внизу для справки, вы можете найти, что каждый вход дает оценку «D» и результат «Fail», кроме максимальных оценок.

1 Ответ

0 голосов
/ 16 ноября 2018

Я предполагаю, что это выполняется в Python 2, который не продвигает целочисленное деление автоматически. Если вы измените свои расчеты, как:

    percent_malayalam = malayalam_mark * 100 / malayalam_maxmark

Вы можете получить правильный ответ ... Ранее все не 100% результаты были (неявно) округлены до 0%. 2 / 3 в Python 2 будет 0, а не ~ 0,6. Значения по умолчанию были изменены в Python 3, поэтому он чаще делает правильные вещи.

Затем вы можете прочитать о целочисленном делении в Python 2 из разных мест, вот одно на этом сайте: В чем разница между '/' и '//' при использовании для деления?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...