这是一个简短的问题,这是我的代码:
flank2=raw_input("How many units are flanking from behind?: ")
if flank2 == '1':
p1f1 = str(1.5)
if flank2 == '2':
p1f1 = str(2)
else:
p1f = str(1)
p2f = str(1)
flank3=raw_input("How many units are flanking from the side?: ")
if flank3 == '1':
p1f2 = str(1.25)
if flank3 == '2':
p1f2 = str(1.5)
if flank3 == '3':
p1f2 = str(1.75)
if flank3 == '4':
p1f2 = str(2)
print p1f1 + p1f2
让我们说p1f1 = 2
和p1f2 = 1.5
。当我在python中执行此操作时,我得到21.5
,但我想获得3.15
。我做错了什么?
答案 0 :(得分:2)
摆脱所有str()
次转化。当变量是字符串时,+
表示连接而不是添加。将它们保留为浮点数。
flank2=raw_input("How many units are flanking from behind?: ")
if flank2 == '1':
p1f1 = 1.5
if flank2 == '2':
p1f1 = 2
else:
p1f = 1
p2f = 1
flank3=raw_input("Hoaw many units are flanking from the side?: ")
if flank3 == '1':
p1f2 = 1.25
if flank3 == '2':
p1f2 = 1.5
if flank3 == '3':
p1f2 = 1.75
if flank3 == '4':
p1f2 = 2
答案 1 :(得分:0)
当您将两个字符串一起添加时,它们会连接在一起,如下所示:
>>> '1.34' + '3.25'
'1.343.25'
raw_input
返回一个字符串。您应该在int()
之前致电raw_input
,然后转到flank3
,并将您的比较更改为数字而不是字符串。
当您将数字加在一起时,它们会使用加法而不仅仅是连接。
所以新代码看起来像这样:
flank2=int(raw_input("How many units are flanking from behind?: "))
if flank2 == 1:
p1f1 = 1.5
if flank2 == 2:
p1f1 = 2
else:
p1f = 1
p2f = 1
flank3=int(raw_input("Hoaw many units are flanking from the side?: "))
if flank3 == 1:
p1f2 = 1.25
if flank3 == 2:
p1f2 = 1.5
if flank3 == 3:
p1f2 = 1.75
if flank3 == 4:
p1f2 = 2
print p1f1 + p1f2
答案 2 :(得分:0)
在所有作业中,您始终指定var = str(number)
。所以最后,你总是得到一个数字的字符串表示。你最好直接保存数字(当你有多个mutly exclusive if if检查时也使用elif
):
# for flank2
if flank2 == '1':
p1f1 = 1.5
elif flank2 == '2':
p1f1 = 2
else:
p1f = 1
p2f = 1
# and for flank3
if flank3 == '1':
p1f2 = 1.25
elif flank3 == '2':
p1f2 = 1.5
elif flank3 == '3':
p1f2 = 1.75
elif flank3 == '4':
p1f2 = 2
现在,如果添加p1f1
和p1f2
,实际上是添加两个数字而不是添加两个字符串,这会导致字符串连接。所以这应该会给你正确的结果。
请注意,如果flank2
既不是'1'
也不是'2'
,那么您最终根本不会设置p1f1
,因此会引发异常。你应该在else
部分确实有一个后备值;并为flank3
执行此操作。