我应该做一个模拟的杂货店页面,接受用户的输入,“购买”的商品数量。当您提交订单时,它会将您带到一个生成账单的页面,其中显示:产品、单位成本、订购数量和价格。
我可以让它工作得很好。但是,代码原样,当前接受负输入,并将减去成本。我想修改代码,以便如果输入为负,则输入更改为0。谢谢。
所以我尝试了一个正式的If语句:
if int(apples) < 0:
apples=0
return(apples)
不管有没有回报,但我什么也得不到。
然而,每当我这样做的时候,似乎什么都没有发生。它继续接受负输入,并且我没有收到任何关于这方面的错误。我将在下面显示完整的代码,因为上面没有说明任何内容。
到目前为止,我只尝试过苹果变量的代码,无法使其正常工作。我不确定我的错误是什么:
def generate_bill():
apples=request.form["num_gsmith"]
if int(apples) < 0:
apples=0
return(apples)
berries=request.form["num_strawberries"]
eggs=request.form["num_eggs"]
milk=request.form["num_milk"]
soda=request.form["num_soda"]
costApples=int(apples)*prices['apples']
costBerries=int(berries)*prices['strawberries']
costEggs=int(eggs)*prices['eggs']
costMilk=int(milk)*prices['milk']
costSoda=int(soda)*prices['soda']
itemsToDisplay=[ # note there are four items in each list:
# product name, price, number purchased, cost
["GrannySmith", prices['apples'], apples, costApples],
["Strawberries", prices["strawberries"], berries, costBerries],
["Eggs", prices["eggs"], eggs, costEggs],
["Milk", prices["milk"], milk, costMilk],
["Soda", prices["soda"], soda, costSoda]
]
return render_template("bill.html",items=itemsToDisplay)
我还尝试在input语句中将值转换为int,但始终没有更改得到相同的结果:
apples=int(request.form["num_gsmith"])
if apples <= -1:
apples=0
return(apples)
berries=int(request.form["num_strawberries"])
eggs=int(request.form["num_eggs"])
milk=int(request.form["num_milk"])
soda=int(request.form["num_soda"])
costApples=apples*prices['apples']
costBerries=berries*prices['strawberries']
costEggs=eggs*prices['eggs']
costMilk=milk*prices['milk']
costSoda=soda*prices['soda']
因此,不是在函数中使用负数来计算成本,而是在检测到它是负数时将该值转换为0。目前,我仍然得到账单图像中看到的负数。谢谢。
I can't post images (not 10 rep)
but here is a direct link, if it helps visualize it at all:
https://imgur.com/a/4w7u43l
编辑:为了澄清,我正在使用Spyder和FLASK,这是我的bill.html页面
<html>
<head><title>DLS Grocery - Your Bill</title></head>
<body>
<h1>Your Bill for DLS Grocery</h1>
<table border="2" width="100%">
<tr><th>Product</th><th>Unit Cost</th><th>Number Purchased</th><th>Cost</th></tr>
{% for element in items %}
<tr>
<td>
{{ element[0] }}
</td>
<td>
{{ element[1] }}
</td>
<td>
{{ element[2]}}
</td>
<td>
{{ element[3]}}
</td>
</tr>
{% endfor %}
</table></body></html>
这是我的server.py的完整页面:
from flask import Flask, render_template, request
import csv
app = Flask(__name__)
app.config["DEBUG"] = True
prices={"apples":0.79,"strawberries":1.99,"eggs":1.69,"milk":2.29,"soda":1.25}
@app.route("/generate_bill", methods=["POST"])
def generate_bill():
apples=request.form["num_gsmith"]
if int(apples) < 0:
apples=0
return apples
berries=request.form["num_strawberries"]
eggs=request.form["num_eggs"]
milk=request.form["num_milk"]
soda=request.form["num_soda"]
costApples=int(apples)*prices['apples']
costBerries=int(berries)*prices['strawberries']
costEggs=int(eggs)*prices['eggs']
costMilk=int(milk)*prices['milk']
costSoda=int(soda)*prices['soda']
itemsToDisplay=[ # note there are four items in each list:
# product name, price, number purchased, cost
["GrannySmith", prices['apples'], apples, costApples],
["Strawberries", prices["strawberries"], berries, costBerries],
["Eggs", prices["eggs"], eggs, costEggs],
["Milk", prices["milk"], milk, costMilk],
["Soda", prices["soda"], soda, costSoda]
]
return render_template("bill.html",items=itemsToDisplay)
if __name__ == '__main__':
app.run(debug=True, port=5001)
发布于 2019-04-02 00:30:07
据我所知,您面临的问题是因为您正在返回程序光标。您不应该返回程序游标,而应该更新值。当你返回苹果的值时,页面不会被渲染,因此你会看到错误的结果,你的代码应该是这样的。
from flask import Flask, render_template, request
import csv
app = Flask(__name__)
app.config["DEBUG"] = True
prices={"apples":0.79,"strawberries":1.99,"eggs":1.69,"milk":2.29,"soda":1.25}
@app.route("/generate_bill", methods=["POST"])
def generate_bill():
apples=request.form["num_gsmith"]
if int(apples) < 0:
apples=0
berries=request.form["num_strawberries"]
eggs=request.form["num_eggs"]
milk=request.form["num_milk"]
soda=request.form["num_soda"]
costApples=int(apples)*prices['apples']
costBerries=int(berries)*prices['strawberries']
costEggs=int(eggs)*prices['eggs']
costMilk=int(milk)*prices['milk']
costSoda=int(soda)*prices['soda']
itemsToDisplay=[ # note there are four items in each list:
# product name, price, number purchased, cost
["GrannySmith", prices['apples'], apples, costApples],
["Strawberries", prices["strawberries"], berries, costBerries],
["Eggs", prices["eggs"], eggs, costEggs],
["Milk", prices["milk"], milk, costMilk],
["Soda", prices["soda"], soda, costSoda]
]
return render_template("bill.html",items=itemsToDisplay)
if __name__ == '__main__':
app.run(debug=True, port=5001)
输出截图:
发布于 2019-04-02 00:38:18
通过在设置apples
之后从generate_bill()
返回,实际上是将苹果的值作为调用的结果发送回来(模板不会呈现,它们只会得到一个显示为“0”的文档)。这不是你想要的。也许可以尝试更多像这样的东西:
def get_positive(field):
v = int(field)
return max(v, 0)
@app.route("/generate_bill", methods=["POST"])
def generate_bill():
apples = get_positive(request.form["num_gsmith"])
berries = get_positive(request.form["num_strawberries"])
eggs = get_positive(request.form["num_eggs"])
milk = get_positive(request.form["num_milk"])
soda = get_positive(request.form["num_soda"])
costApples = apples * prices['apples']
costBerries = berries * prices['strawberries']
costEggs = eggs * prices['eggs']
costMilk = milk * prices['milk']
costSoda = soda * prices['soda']
itemsToDisplay = [ # note there are four items in each list:
# product name, price, number purchased, cost
["GrannySmith", prices['apples'], apples, costApples],
["Strawberries", prices["strawberries"], berries, costBerries],
["Eggs", prices["eggs"], eggs, costEggs],
["Milk", prices["milk"], milk, costMilk],
["Soda", prices["soda"], soda, costSoda]
]
return render_template("bill.html",items=itemsToDisplay)
在这里,get_positive()
会将结果转换为一个整数,并确保它大于或等于0。
理想情况下,您应该捕获其他错误,比如request.form["num_gsmith"]
不是数字,并返回一个好的错误。现在,我相信你的代码会出现500错误。
https://stackoverflow.com/questions/55459545
复制相似问题