如何添加用户输入的变量?

时间:2014-01-27 22:40:27

标签: python variables add

这是一个简短的问题,这是我的代码:

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 = 2p1f2 = 1.5。当我在python中执行此操作时,我得到21.5,但我想获得3.15。我做错了什么?

3 个答案:

答案 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

现在,如果添加p1f1p1f2,实际上是添加两个数字而不是添加两个字符串,这会导致字符串连接。所以这应该会给你正确的结果。

请注意,如果flank2既不是'1'也不是'2',那么您最终根本不会设置p1f1,因此会引发异常。你应该在else部分确实有一个后备值;并为flank3执行此操作。