尝试在Python中用户输入后将负数转换为0

2024-05-19 01:45:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我应该制作一个模拟杂货店页面,接受用户输入,即“购买”的商品数量。当您提交订单时,它会将您带到生成账单的页面,其中显示:产品、单位成本、订购数量和价格。在

我能让它正常工作。但是,代码按原样,当前接受负输入,并将减去成本。我想修改代码,这样如果一个输入是负数,那么这个输入就会变成0。非常感谢。在

所以我尝试了一个正式的If语句:

if int(apples) < 0:
            apples=0
            return(apples)

有没有回报,但我什么也得不到。在

然而,每当我这样做,似乎什么都没有发生。它继续接受负输入,我没有收到任何关于这个的错误。我将在下面显示完整的代码,因为上面没有说明任何问题。在

到目前为止,我只尝试过apples变量的代码,但无法使其正常工作。我不知道我的错误是什么:

^{pr2}$

我也尝试过将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 这是我的比尔.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>

这是我的整页服务器.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)

Tags: formifrequestelementnumeggsinttd
2条回答

通过在设置apples之后从generate_bill()返回,实际上是将apples的值作为调用的结果发送回来(模板不呈现,它们只得到一个表示“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()将把结果转换成一个int,并确保它大于或等于0。在

理想情况下,您可以捕获其他错误,例如request.form["num_gsmith"]不是数字,并返回一个好的错误。现在,我相信你的代码会有500个错误。在

据我所知,您面临的问题是因为您正在返回程序游标。您不应该返回程序游标,而应该更新值。当您返回apple值时,页面不会呈现,因此您看到错误的结果,您的代码应该如下所示。在

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)

输出屏幕截图:

enter image description here

相关问题 更多 >

    热门问题