我是编程新手,在Python乘法方面有困难。我有这样的代码:
def getPriceDiscount():
price = int(input())
if price > 3000:
priceDiscount = price * 0.6
return priceDiscount
else:
return price
但是当我执行它并输入一个像87.94这样的十进制数的输入时,我收到以下错误:
ValueError: invalid literal for int() with base 10: '87.94'
int()
方法不能将字符串'87 .94'转换为允许我将其乘以0.6的数字吗?我该怎么做才能进行转换?
我正在使用Python 3.2.2。
答案 0 :(得分:5)
实际上,您可以将浮点值传递给int()
。在这种情况下,int()
只是向下舍入数字并将该值转换为整数类型。
但是,当您调用int("87.94")
时,您正在执行的操作是将类似小数点值的字符串传递给int()
。 int()
无法直接从这样的字符串转换为整数。因此,您必须使用float()
,它可以从字符串转换为浮点数。
答案 1 :(得分:3)
您不能将带小数点的字符串传递给int()
。您可以改用float()
。如果您只想要整数部分,即截断.94
中的87.94
,则可以执行int(float('87.94'))
。
答案 2 :(得分:1)
问题在于您尝试一次进行两次转换,其中一次是隐式的。
以下方法有效,因为有一种明显的方法可以将数字'87'转换为整数87.
>>> int('87')
87
出于同样的原因,以下内容也适用:
>>> float('87')
87.0
>>> float('87.94')
87.94
>>> int(87.94)
87
请记住所说的内容并查看以下内容之间的区别:
>>> int(float('87.94'))
87
和
>>> int('87.94')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '87.94'
如您所见,问题是您在传递给float()
之前暗示了int()
转换,但编译器怎么猜呢?字符串'87 .94'有很多可用的工作转换。在找出哪个onw可以与int
一起使用之前,编译器是否应该尝试所有这些?如果有两个或更多会返回一些可以使用整数的东西呢?
示例:
>>> int(hash('87.94'))
4165905645189346193
>>> int(id('87.94'))
22325264
>>> int(max('87.94'))
9
>>> int(input('87.94'))
87.94111
111
编译器是否应该为您选择float()
?
我不这么认为:Explicit is better than implicit。
无论如何,如果您打算使用该数字来执行与浮点数0.6
的乘法运算。您可以直接将其转换为float()
。
更改此行:
price = int(input())
使用:
price = float(input())
一切都会好的。
此外,您在示例中显示的操作是乘法,而不是除法。如果您可能感兴趣,则会有一个分区//
,它将返回一个浮点数的整数。请查看PEP238以获取更多有关此信息的信息。
答案 3 :(得分:1)
int
(“整数”的缩写)是整数。 float
(“浮点数”的缩写)是带小数点的数字。
int()
返回从其输入参数创建的int
。您可以使用它将"15"
之类的字符串转换为int
15
,或将float
转换为12.059
int
{{1 }}
12
返回从其输入参数创建的float()
。您可以使用它将float
之类的字符串转换为"10.5"
float
,甚至将10.5
转换为int
12
{{ 1}}。
如果要强制float
为整数,但是想要接受浮点数作为类型输入,则需要先输入12.0
,然后将其转换为{ {1}}:
price
请注意,如果您将float
乘以int()
(例如折扣因子),结果将为price = int(float(input())
。
另请注意,上面的示例并未对数字进行舍入 - 它只是截断小数点后的内容。例如,如果输入为int
,则float
最终将为float
。不是你想要的?然后,您需要首先使用"0.6"
上的price
功能。
0
如果您打算使用浮点计算(如果我们讨论的是商品价格,这是有意义的),那么请不要执行round()
转换。只需使用float
即可。您可能仍想要进行一些舍入。如果要舍入到2个小数位,可以使用第二个参数调用round price = int(round(float(input()))
:
int
最后,您可能希望查看Python's decimal
module,因为使用浮点数时存在限制。有关详细信息,请参阅此处:http://docs.python.org/tutorial/floatingpoint.html
答案 4 :(得分:1)
def getPriceDiscount():
while True:
try:
price, percent = float(input()), 0.6
break
except ValueError:
continue
return price * percent if price > 3000 else price
print(getPriceDiscount())