0

私は分岐予測子を作成しようとしています:

これは私が app.py に持っているコードです:

import web
urls = (
'/hello','index'
)

app = web.application(urls,globals())

render = web.template.render('templates/', base='layout')

class index(object):
    def GET(self):
        return render.hello_form()

    def POST(self):
        form=web.input(name='nobody', rank=0)
        branch=None
        if form.rank<=4613:
            branch = 'COE, ECE,IT,ICE,MPAE,BT'
        if int(form.rank)<=7471 & int(form.rank)>4613:
            branch='ECE,IT,ICE,MPAE,BT'
        if int(form.rank)<=11325 & int(form.rank)>7471:
            branch = 'IT,ICE,MPAE,BT'
        if int(form.rank)<=16565 & int(form.rank)>11325:
            branch='ICE,MPAE,BT'
        if int(form.rank)<=17955 & int(form.rank)>16565:
            branch='MPAE,BT'
        if int(form.rank)<=20714 & int(form.rank)<17955:
            branch='BT'
        return render.index(branch=branch) 

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

これは、html ファイル hello_form.html にあるコードです。

<h1>NSIt Branch Predictor for First Round</h1>
<form action='hello' method ='POST'>
Your Name: <input type = 'text' name = 'name'>
<br>
AIEEE Rank: <input type = 'text' name ='rank'>
<input type='submit'>

これは私がindex.htmlに持っているコードです:

$def with (branch)
branch: $branch

私は次のようにlayout.htmlを持っています:

$def with (content)
<html>
<head>
<title> first python website</title>
</head>
<body>
$:content
</body>
</html>

しかし、出力で私は得ています:

branch:
4

1 に答える 1

2

私はあなたが使用しているアプリケーション フレームワークを使用したことがありませんが、あなたのPOST方法には多くの問題があります。これはおそらくどのように見えるべきかです。次に、問題といくつかの代替ソリューションについて説明します。

def POST(self):
    form = web.input(name='nobody', rank='0')
    rank = int(form.rank)
    if rank <= 4613:
        branch = 'COE, ECE,IT,ICE,MPAE,BT'
    elif rank <= 7471:
        branch = 'ECE,IT,ICE,MPAE,BT'
    elif rank <= 11325:
        branch = 'IT,ICE,MPAE,BT'
    elif rank <= 16565:
        branch = 'ICE,MPAE,BT'
    elif rank <= 17955:
        branch = 'MPAE,BT'
    elif rank <= 20714:
        branch = 'BT'
    else:
        branch = None
    return render.index(branch=branch) 

最初の問題は、最初の比較が文字列と整数の間であったことです: if form.rank<=4613. だったはずif int(form.rank)<=4613です。文字列と数値を比較しても、期待どおりになることはめったにありません。

>>> rank = '4613'
>>> rank <= 4613
False
>>> rank > sys.maxint
True

次に、ブール演算子の代わりにビットごとの and 演算子&を使用していました。たとえば、 である必要があります。andint(form.rank)<=7471 & int(form.rank)>4613int(form.rank)<=7471 and int(form.rank)>4613

ものの代わりに演算子チェーンを使用することで、これを改善できた可能性があります。and

if rank <= 4613:
    branch = 'COE, ECE,IT,ICE,MPAE,BT'
if 4613 < rank <= 7471:
    branch = 'ECE,IT,ICE,MPAE,BT'
if 7471 < rank <= 11325:
    branch = 'IT,ICE,MPAE,BT'

最終的には、何らかの間隔ベースのデータ構造を使用したい場合を除き、一連のifandステートメントとして表現するのが最適です。elifこの単純なものでは、ifステートメントは正常に機能します。

ハッピーパイソン!

于 2012-06-23T12:12:33.033 に答える