2.某商店T恤的价格为35元/件(2件9折,3件以上8折),裤子的价格为120 元/条(2条以上9折).
小明在该店买了3件T恤和2条裤子,请计算并显示小明应该付多少钱?
#yifu.py
from flask import Flask,render_template,request
##2.某商店T恤的价格为35元/件(2件9折,3件以上8折),裤子的价格为120 元/条(2条以上9折).
# 小明在该店买了3件T恤和2条裤子,请计算并显示小明应该付多少钱?
#先简单用Python实现代码逻辑
def caiquanAPI():
n_T= int (input(' 输入T恤数量:'))
n_K= int (input(' 输入裤子数量:'))
if n_K ==1 :
print(f"{n_K}件裤子:120元")
else:
total =120*n_K*0.9
#print(f"{n_K}件裤子:{total}元")
return f"{n_K}件裤子:{total}元"
if n_T == 1:
#print(f"{n_T}件T恤:35元")
return f"{n_T}件T恤:35元"
elif n_T == 2:
total =35*n_T*0.9
#print(f"{n_T}件T恤:{total}元")
return f"{n_T}件T恤:{total}元"
elif n_T >= 3 :
total =35*n_T*0.8
#print(f"{n_T}件T恤:{total}元")
return f"{n_T}件T恤:{total}元"
##加入flask框架,在浏览器中 展现代码过程,浏览器中自动计算
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/caiquanAPI' , methods=['GET', 'POST'])# html 文件里限制了post方法,这里不给方法,会报请求的 URL 不允许使用该方法。
def caiquanAPI():
#n_T = request.args.get('Txue') # args取get方式参数
n_T = request.form.get('Txue')# form取post方式参数
#n_K = request.args.get('kuzi')
n_K = request.form.get('kuzi')
total_T = 0
total_K = 0
#if n_T is not None:
if n_T:#添加了最外层if,解决报错#TypeError:“str”和“int”的实例之间不支持“>=”
n_T = int(n_T)
if n_T == 1:
total_T = 35
elif n_T == 2:
total_T = 35 * 2 * 0.9
elif n_T >= 3:
total_T = 35 * n_T * 0.8
#else:
#n_T = 0
#if n_K is not None 改成if n_K 是为了,输入框为空直接点击计算按钮报错,
# 报错:#ValueError:以 10 为基数的 int() 文本无效:“”
#if n_K is not None:
if n_K :
n_K = int(n_K)
if n_K == 1:
total_K = 120
elif n_K >= 2:
total_K = 120 * n_K * 0.9
#else:
# n_K = 0
total = total_T + total_K
return render_template('caiquan.html', total=total)
#if __name__ == '__main__':
app.run(debug=True)
'''
代码优化后:
#优化后:
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/caiquanAPI', methods=['GET', 'POST'])
def caiquanAPI():
#if request.method == 'GET':
#return render_template('caiquan.html', total=0)
n_T = request.form.get('Txue')
n_K = request.form.get('kuzi')
total_T = 0
total_K = 0
if n_T:
n_T = int(n_T)
if n_T == 1:
total_T = 35
elif n_T == 2:
total_T = 35 * 2 * 0.9
elif n_T >= 3:
total_T = 35 * n_T * 0.8
if n_K:
n_K = int(n_K)
if n_K == 1:
total_K = 120
elif n_K >= 2:
total_K = 120 * n_K * 0.9
total = total_T + total_K
return render_template('caiquan.html', total=total)
if __name__ == '__main__':
app.run(debug=True)
再看 html文件:caiquan.html
<!DOCTYPE html>
<html>
<head>
<title>Shopping Total</title>
</head>
<body>
<h1>Shopping Total</h1>
<!--form action=“/center/add” method=“get”; action指定表单发送的地址; method指定数据传送到服务器的方式,
get会将发送的数据显示在地址栏,post就不会,单论安全而言,post安全性更高 -->
<form action="/caiquanAPI" method="post"><!--这里的 form 和table层级不能弄反了,不然total怎么也拿不到值-->
<table>
T恤 <input type="text" id="Txue" name="Txue"><br\>
裤子 <input type="text" id="kuzi" name="kuzi"><br\>
<input type="submit" value="计算" name="jisuan"><br\>
</table>
</form>
<p>裤子和T恤总价为: {{ total }}</p>
优化后html文件
<!DOCTYPE html>
<html>
<head>
<title>Shopping Total</title>
</head>
<body>
<h1>Shopping Total</h1>
<form action="/caiquanAPI" method="post">
<table>
<tr>
<td>T恤</td>
<td><input type="text" id="Txue" name="Txue"></td>
</tr>
<tr>
<td>裤子</td>
<td><input type="text" id="kuzi" name="kuzi"></td>
</tr>
</table>
<input type="submit" value="计算" name="jisuan">
</form>
<p>The total amount to be paid is: {{ total }}</p>
</body>
</html>