【问题标题】:Can't fix int and float error in economic simulator无法修复经济模拟器中的 int 和 float 错误
【发布时间】:2021-09-30 04:34:48
【问题描述】:

我正在用 python 制作一个经济模拟器类型的东西,当我尝试计算购买东西时的总成本时,我不断收到 int 错误或 float 错误,请帮忙。

只能将str(不是“float”)连接到str

import time
money = 1
moneyfo = "{:.2f}".format(money)
woodinv = 0
woodsalea = 1
woodprice = (woodsalea / 2)
woodpricefo = "{:.2f}".format(woodprice)
amntw = 0
float(amntw)
buywcost = 0
print ("Prducts are wood food and stone")
print ("Prices are wood(" + woodpricefo + ")")
bos = input("""Buy Or Sell
""")
if bos == ("Buy"):
  btyp = input("""Wood, Food, Or Stone?
""")
  if btyp == ("Wood"):
    amntw = input("0-100")
    buywcost = float(amntw) * woodprice
    buywcostfo = "{:.2f}".format(buywcost)
    print ("That will be" + float(buywcostfo) + "you have" + money + "would you like to buy")

【问题讨论】:

    标签: python simulator economics


    【解决方案1】:

    就像错误所说的那样-您只能将字符串连接到其他字符串-即使用+ 运算符组合字符串时,您必须实际组合字符串

    这是我编辑的代码版本。我认为您可以避免该错误,但我也建议您通过添加 cmets 并使用更具描述性的变量名称来使其更具可读性。

    import time
    money = 1
    moneyfo = "{:.2f}".format(money)
    woodinv = 0
    woodsalea = 1
    woodprice = (woodsalea / 2)
    woodpricefo = "{:.2f}".format(woodprice)
    amntw = 0
    float(amntw)
    buywcost = 0
    print ("Prducts are wood food and stone")
    print ("Prices are wood(" + woodpricefo + ")")
    bos = input("""Buy Or Sell""")
    
    if bos == ("Buy"):
      btyp = input("""Wood, Food, Or Stone?""")
    elif btyp == ("Wood"):
      amntw = input("0-100")
      buywcost = float(amntw) * woodprice
      buywcostfo = "{:.2f}".format(buywcost)
      print ("That will be" + str(float(buywcostfo)) + "you have" + str(money) + "would you like to buy")

    【讨论】:

      【解决方案2】:

      您的错误在这里:

      print ("That will be" + float(buywcostfo) + "you have" + money + "would you like to buy")
      

      在将数字添加到其他字符串之前,您需要将它们转换为字符串:

      print ("That will be" + str(float(buywcostfo)) + "you have" + str(money) + "would you like to buy")
      

      另外,这不是你想要的:

      float(amntw)
      

      您必须将转换结果保存为浮点数 - 它不会就地更改数字:

      amntw = float(amntw)
      

      但是,当你这样做时:

      amntw = 0
      float(amntw)
      

      假设您的意图是使 amntw0 等效,您可以直接将其设置为浮点值:

      amntw = 0.0
      

      【讨论】:

        【解决方案3】:

        在您的打印语句中,您将类型转换为浮点数,因此您试图在 2 个不同的地方连接一个字符串和一个浮点数,python 不允许这样做。

        更改这一行

        print ("That will be" + float(buywcostfo) + "you have" + money + "would you like to buy")

        选项 1

        print ("That will be" + buywcostfo + "you have" + str(money) + "would you like to buy")

        选项 2,Python 还有一个称为 f 字符串的功能,它允许您将变量直接放入字符串中:

        print(f"That will be {buywcostfo} you have {money} would you like to buy")

        【讨论】:

          【解决方案4】:

          只有你必须改变最后一行如下

          print ("That will be " + str(float(buywcostfo)) + " you have " + str(money) + " would you like to buy")
          

          您可以选择给定的打印格式here

          【讨论】:

            【解决方案5】:

            不确定为什么要在使用变量之前对其进行初始化。这在 python 中不是必需的。

            amntw = 0     # You don't need any of this
            float(amntw)      # float() isn't doing anything here without assignment
            buywcost = 0  # It's just making your code messy
            

            不要像其他人建议的那样做str(float(buywcostfo))。那将是多余的。由于buywcostfo 已经是一个字符串,因此您需要将一个字符串转换为浮点数并再次转换为字符串。

            buywcost = float(amntw) * woodprice # buywcost is now a float
            buywcostfo = "{:.2f}".format(buywcost) # buywcostfo is a string
            print("That will be" + float(buywcostfo) ...) # now it's a float again - can't add to string
            

            您应该阅读f-strings。它们可以让您的生活更轻松,并真正清理您的代码。

            # This way unless the variables buywcostfo and moneyfo are needed elsewhere, 
            # they can be removed completely.
            print(f"That will be {buywcost:.2f} you have {money:.2f} would you like to buy")
            

            【讨论】:

              猜你喜欢
              • 2012-02-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-04-16
              • 1970-01-01
              • 1970-01-01
              • 2021-03-09
              • 2016-03-29
              相关资源
              最近更新 更多