Python my economy

提供:sufeeWiki
ナビゲーションに移動 検索に移動

概要

cgi動作用Webアプリケーションです。
死荷重や需要P供給P等を調べます.
当初Python初学期間の為、文法等が汚いです

使用例

サムネイルの作成エラー: ファイルがありません


cgiで動かしてみる

cgi

#!/usr/bin/python3
import cgi

print("Content-type: text/html; charset=utf-8")
print()
print('<!DOCTYPE html>')

def send_print(message):
    global propertyType
    if propertyType['Fixed'] != '1':
        print(f'<p>{message}</p>')

def tax_math(res=[],sha=[],p=0,x=0,taxF=0):
    print('不要ならゼロ')
    shareP = 0
    while True:
        try:
            tax = float(taxF)
            if tax == 0:
                print('終了')
                return None
            try:
                tax = 1 + (tax * 0.01)
            except:
                tax = 1
            share = tax * sha[0]
            shareP = tax * sha[1]
            break
        except:
            print('有効な値を入力してください。')
    price = (share + -res[0])/(-shareP + res[1])
    send_print(f'D,Sは{price}です')
    resbusiness = res[0] + (res[1]*price)
    if resbusiness < 0:
        resbusiness = (res[1]*price) + res[0]
    send_print(f'需要Pは{resbusiness}です')
    shabusiness = share + (shareP*price)
    if shabusiness < 0:
        shabusiness = (share*price) + share
    send_print(f'供給Pは{shabusiness}です')
    if shabusiness == resbusiness:
        business = (shabusiness + resbusiness) / 2
        send_print(f'焦点からPは{business}です。')
    tate = 0
    D = res[0] + (res[1] * x)
    S = sha[0] + (sha[1] * x)
    ST = share + (shareP * price)
    if shareP > 1 or shareP < -1:
        tateS = (sha[0] / sha[1]) + (sha[1] * price)
        tate = tateS - sha[0]
        if tate < 0:
            tate *= -1
    else:
        tateS = sha[0] + price
        tate = tateS - sha[0]
        if tate < 0:
            tate *= -1
    if shabusiness != resbusiness:
        send_print(f'1/2 * ({tate}) * {price}')
        ProducerSurplus = 0.5 * (tate) * price
        send_print(f'生産者余剰は{ProducerSurplus}です')
    else:
        send_print(f'1/2 * {(tate)} * {price}')
        ProducerSurplus = 0.5 * (tate) * price
        send_print(f'生産者余剰は{ProducerSurplus}です')


    
    if res[1] > 1 or res[1] < -1:
        tate = res[0] / res[1]
        if tate < 0:
            tate *= -1
    else:
        tate = res[0]
    if shabusiness != resbusiness:
        tate = price - D
        send_print(f'1/2 * (({tate} - {tateS} ) + {ST} - {tateS}) * {price}')
        ConsumerSurplus = 0.5 * ((tate - tateS)+(ST - tateS)) * price
        send_print(f'消費者余剰は{ConsumerSurplus}です')
    else:
        send_print(f'1/2 * (({tate} - {tateS} ) + {ST} - {tateS}) * {price}')
        ConsumerSurplus = 0.5 * ((tate - tateS)+(ST - tateS)) * price
        send_print(f'消費者余剰は{ConsumerSurplus}です')
    TotalSurplus = ConsumerSurplus + ProducerSurplus
    send_print(f'総余剰は{TotalSurplus}です')
    deadLoad = 0.5 * (ST - tateS) * (x - price)
    if deadLoad != 0:
        print(f'よって死荷重は{deadLoad}')
    else:
        print(f'よって死荷重はありませんでした。')

propertyType = {'tax':'0','Fixed':'0'}
form = cgi.FieldStorage()

html = f'''
        <head>
            <link rel="icon" href="/img/icon/meta_web/1101.ico">
            <link rel="apple-touch-icon" sizes="128x128" href="/img/icon/meta_web/1101.ico">
            <meta name="application-name" content="sufee.net"/>
            <meta name="msapplication-square70x70logo" content="/img/icon/meta_web/1102.ico"/>
            <meta name="msapplication-square150x150logo" content="/img/icon/meta_web/1102.ico"/>
            <meta name="msapplication-square310x310logo" content="/img/icon/meta_web/1101.ico"/>
            <meta name="msapplication-wide310x150logo" content="/img/icon/meta_web/1101.ico"/>
            <title>需要供給計算 - sufee 計算</title>
            <meta charset="utf-8">
            <meta http-equiv="content-language" content="ja">
            <meta http-equiv="content-type" content="text/html:charset=utf-8">
            <meta name="author" content="yuki">
            <link rel="canonical" href="/">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="format-detection" content="telephone=no">
            <meta name="viewport" content="width=device-width,initial-scale=1.0"> 
        </head>
        '''
print(html)
print('<body>')
print('<center>')
try:
    html = f'''
    <h1>需要供給計算機</h1>
    <form method="POST">
    D = <input type="number" name="request" value="{str(form.getvalue("request")).replace('None','0')}"> + <input type="number" name="requestP" value="{str(form.getvalue("requestP")).replace('None','0')}"> P<br>
    S = <input type="number" name="share" value="{str(form.getvalue("share")).replace('None','0')}"> + <input type="number" name="shareP" value="{str(form.getvalue("shareP")).replace('None','0')}"> P<br>
    固定価格 <input type="number" name="price" value="{str(form.getvalue("price")).replace('None','0')}"><br>
    従量税  <input type="number" name="SpecificDuty" value="{str(form.getvalue("SpecificDuty")).replace('None','0')}"><br>
    従価税  <input type="number" name="tax" value="{str(form.getvalue("tax")).replace('None','0')}"><br>
    <br>
    <input type="submit" value="計算開始">
    </form>
    '''
except:
    html = '''
    <form method="POST">
    需要曲線 D = <input type="number" name="request" value="0"> + <input type="number" name="requestP" value="0">P
    供給曲線 S = <input type="number" name="share" value="0"> + <input type="number" name="shareP" value="0">P
    固定価格<input type="number" name="price" value="0"><br>
    従量税<input type="number" name="SpecificDuty" value="0"><br>
    従価税<input type="number" name="tax" value="0"><br>
    <input type="submit" value="計算開始">
    </form>
    <br>
    '''
print(html)
print('<div style="margin-top:30px;margin-bottom:30px;padding-top:30px;width: 68%;border-style: solid;border-color: rgb(250, 216, 221);border-radius: 15px;">')
if form.getvalue("request") and form.getvalue("requestP") and form.getvalue("share") and form.getvalue("shareP"):
    print('<h1 style="color:red;">結果</h1>')
    temp = None
    request = int(form.getvalue("request"))
    requestP = int(form.getvalue("requestP"))
    share = int(form.getvalue("share"))
    shareP = int(form.getvalue("shareP"))
    if not(form.getvalue("SpecificDuty") == '0' and form.getvalue("tax") == '0'):
        propertyType['tax'] = '1'
    SpecificDuty = float(form.getvalue("SpecificDuty"))
    share = share + SpecificDuty
    print(f'S = {shareP} + {share - SpecificDuty}')
    if form.getvalue("price") != '0':
        propertyType['Fixed'] = '1'
    price = (share + -request)/(-shareP + requestP)
    send_print(f'価格は{price}です')
    while True:
        resbusiness = request + (requestP*price)
        if resbusiness < 0:
            resbusiness = (requestP*price) + request
        send_print(f'需要取引量は{resbusiness}です')
        shabusiness = share + (shareP*price)
        if shabusiness < 0:
            shabusiness = (shareP*price) + share
        send_print(f'供給取引量は{shabusiness}です')
        if shabusiness == resbusiness:
            business = (shabusiness + resbusiness) / 2
            send_print(f'均衡取引量は{business}です。')
        tate = 0
        D = request + (requestP * price)
        S = share + (shareP * price)
        #消費者余剰
        if requestP > 1 or requestP < -1:
            tate = request / requestP
            if tate < 0:
                tate *= -1
        else:
            tate = request
        if shabusiness != resbusiness:
            tate = tate - price
            send_print(f'1/2 * ({tate}) * {D}')
            ConsumerSurplus = 0.5 * (tate) * D
            send_print(f'消費者余剰は{ConsumerSurplus}です')
        else:
            send_print(f'1/2 * {(tate-price)} * {D}')
            ConsumerSurplus = 0.5 * (tate-price) * D
            send_print(f'消費者余剰は{ConsumerSurplus}です')
        #生産者余剰
        if shareP > 1 or shareP < -1:
            tate = share / shareP
            if tate < 0:
                tate *= -1
        else:
            tate = share
        if shabusiness != resbusiness:
            tate = price - S
            send_print(f'1/2 * ({tate}+{price}) * {S}')
            ProducerSurplus = 0.5 * (tate+price) * S
            send_print(f'生産者余剰は{ProducerSurplus}です')
        else:
            send_print(f'1/2 * {(price-tate)} * {S}')
            ProducerSurplus = 0.5 * (price-tate) * S
            send_print(f'生産者余剰は{ProducerSurplus}です')
        TotalSurplus = ConsumerSurplus + ProducerSurplus
        send_print(f'総余剰は{TotalSurplus}です')
        if temp:
            send_print('-------------')
            send_print(f'固定なし総余剰は{temp}です')
            send_print(f'固定あり総余剰は{TotalSurplus}です')
            deadLoad = temp - TotalSurplus
            print(f'よって死荷重は{deadLoad}')
        if propertyType['Fixed'] == '1':
            temp = TotalSurplus
            price = int(form.getvalue('price'))
            propertyType['Fixed'] = '0'
            continue
        elif propertyType['tax'] == '1':
            tax_math(res=[request,requestP],sha=[share,shareP],p=shabusiness,x=price,taxF=form.getvalue("tax"))
        else:
            break
        break
print('</div>')
print('</body>')
print('</html>')

#else:
    #send_print(f'需要取引量が{resbusiness}、供給取引量が{shabusiness}であるため接点が見つかりませんでした。')