首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中尝试在用户输入后将负数转换为0

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

Stack Overflow用户
提问于 2019-04-02 00:20:19
回答 2查看 323关注 0票数 2

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

我可以让它工作得很好。但是,代码原样,当前接受负输入,并将减去成本。我想修改代码,以便如果输入为负,则输入更改为0。谢谢。

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

代码语言:javascript
复制
if int(apples) < 0:
            apples=0
            return(apples)

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

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

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

代码语言:javascript
复制
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,但始终没有更改得到相同的结果:

代码语言:javascript
复制
        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。目前,我仍然得到账单图像中看到的负数。谢谢。

代码语言:javascript
复制
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页面

代码语言:javascript
复制
<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的完整页面:

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-02 00:30:07

据我所知,您面临的问题是因为您正在返回程序光标。您不应该返回程序游标,而应该更新值。当你返回苹果的值时,页面不会被渲染,因此你会看到错误的结果,你的代码应该是这样的。

代码语言:javascript
复制
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)

输出截图:

票数 2
EN

Stack Overflow用户

发布于 2019-04-02 00:38:18

通过在设置apples之后从generate_bill()返回,实际上是将苹果的值作为调用的结果发送回来(模板不会呈现,它们只会得到一个显示为“0”的文档)。这不是你想要的。也许可以尝试更多像这样的东西:

代码语言:javascript
复制
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错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55459545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档