如何将某些字符串转换为整数,然后在Python中使用它们进行数学运算?

时间:2018-10-19 22:23:48

标签: python

每当我尝试将字符串“ discount1”转换为程序中的“ actualDiscount”时,都会出现语法错误。假设您在程序中输入了“ 30 | .15 | 0-Clothes”:

product1 = raw_input("Enter the information for the first product>")

space1 = product1.find("|")
space2 = product1.rfind("|")
price1=product1[0:space1]
discount1=product1[space1+1:space2]
category1 = product1[space2+1:len(product1)]
actualPrice = int(price1)
actualDiscount = int(discount1)
printNow("Price is " + int(actualPrice))
printNow("Discount is " + int(actualDiscount) + " percent.")

有时,根据我输入的内容,它可以一直运行到printNows。在其他时候,它甚至无法做到那么远。

最重要的是,我必须对这些整数进行数学运算-从价格中减去价格乘以折扣百分比。至少我有点不知所措,我们将不胜感激。

2 个答案:

答案 0 :(得分:1)

首先,使用split data = product1.split( "|" )

解析字段可能会更容易

第二,“。15”不是int。使用float()进行转换。

答案 1 :(得分:1)

我将注释您的代码,并尝试解释您可以做的错误或修改。

product1 = raw_input("Enter the information for the first product>")

# Instead of find/rfind, you can split by '|'

替换此:

space1 = product1.find("|")
space2 = product1.rfind("|")
price1=product1[0:space1]
discount1=product1[space1+1:space2]
category1 = product1[space2+1:len(product1)]

由此:

# You get a list: ['30', '.15', '0-Clothes']
data = product1.split("|")

之后,您必须应用数据转换:

# Price is an integer
actualPrice = int(data[0])

# Discount is a float
actualDiscount = float(data[1)]

# Category
category = data[2]

然后,打印结果:

print("Price is " + int(actualPrice))
print("Discount is " + int(actualDiscount) + " percent.")

优化代码

我认为您想推广该代码以处理多个项目“ a | b | c”。您可以使用列表理解来简化代码,如下所示:

# Data input
product1 = raw_input("Enter the information for the first product>")

# Data 
data = [ [int(price),float(discount),category] for price, count, category in [product1.split("|")]]

for actualPrice, actualDiscount, category in data:
    print("Price is " + str(actualPrice))
    print("Discount is " + str(actualDiscount) + " percent.")
    print("Final price is " + str(actualPrice - actualPrice * actualDiscoun$

这是理解列表的工作方式:

list_name = [ elements_you_want_to_get for list_element(s) in another_list ]

创建一个遍历another_list的列表,并使用list_element(s)选择获取它的元素,该选择允许为我们的自定义名称分配值。然后,您可以在elements_you_want_to_get中对数据进行转换。

每个元素的解释:

  • [product1.split("|")]:创建包含拆分数据的列表。我们用括号将拆分结果括起来,以创建类型[[item1,item2,item3]]的列表,以创建具有由3个子元素组成的元素的结构。对于该示例,现在我们有:
  
    

[[''30','.15','0-衣服']]

  

请注意,这个包含3个子元素的列表是我向您展示的列表理解的another_list元素。

  • for price, count, category:对于another_list的每个元素,循环获取每个元素(在我们的情况下仅为['30', '.15', '0-Clothes']),并将其子元素命名为价格,折扣和类别。目前,我们有price='30'discount='.15'category='0-Clothes'

  • 最后一步,理解将应用转换。在我们的例子中,我们想将price转换为整数,将discount转换为浮点数(为避免不兼容,更改应全部转换为浮点数)。

理解后,结果为:

  
    

[[price_1,折扣_1,类别_1],[price_2,折扣_2,类别_2],...]

  

在我们的例子中,我们只有一个元素,结果将是:

`data = [....]

  
    

[[[30,0.15,'0-Clothes]]

  

请注意,结果列表包含两个数字元素和一个字符串元素(用引号引起来)。