为什么Python说我不能将字符串转换为整数,因为它有空字符串?

时间:2016-03-23 21:15:47

标签: python integer

我正在制作一个以两个坐标作为输入,然后计算中点的程序。但是,当我尝试在将坐标的一部分与x和y值一起使用后将输入更改为整数时,它表示ValueError:对于带有基数10的int()的无效文字:'' < - 顺便说一句,这是一个空字符串。这是我的代码:

def distance():
    p1=input('Input your first point:')
    p2=input('Input your second point:')
    split1=p1.find(',')
    x1=int(p1[2:split1-1])
    y1=p1[split1+1:-2]
    split2=p2.find(',')
    x2=p2[0:split2-1]
    y2=p2[split2+1:-1]
    x=x2-x1**2
    y=y2-y1**2
    d=(x+y)**.5
    print('This is the distance between those points',d)`

4 个答案:

答案 0 :(得分:1)

正如其他人所说,int('')会产生此错误,因为对''应转换为的数字没有一致意见。

如果您确实需要默认值,请考虑使用以下内容(您希望默认值为0)。

value = ''
intvalue = int(value or '0')

# 0

value = '1'
intvalue = int(value or '0')

# 1

话虽这么说,按照你想要的方式完成分割坐标的更简单方法是使用split()

x,y = map(int, '1,2'.split(','))

如果您的输入实际上是以下形式:(1, 2),则您需要忽略括号并仅抓取数字部分。

import re

val = '(1, 2)'
val = re.sub('\(|\)', '', val);
x,y = map(int, val.split(','))

或者更一般地说

val = '(-1, 2)' # or [-1, 2] or -1,2

val = re.search('\-?\d+\s*,\s*\-?\d+', val).group()
x,y = map(int, val.split(','))

对于您的具体示例:

def getxy(val):
    val = re.search('\-?\d+\s*,\s*\-?\d+', val)

    # Alert the user if invalid input was provided
    if val is None:
        raise Exception('Invalid input')

    # Convert all coordinates to integers
    return map(int, val.group().split(','))

x1, y1 = getxy(input('Input your first point:'))
x2, y2 = getxy(input('Input your second point:'))

答案 1 :(得分:0)

我认为您希望使用类似split()的内容,而不是通过索引来解析您的输入:

def distance():
    p1=input('Input your first point:')
    p2=input('Input your second point:')
    x1, y1 = p1.split(',', 1)
    x1 = int(x1)
    y1 = int(y1)
    x2, y2 = p2.split(',', 1)
    x2 = int(x2)
    y2 = int(y2)
    x=x2-x1**2
    y=y2-y1**2
    d=(x+y)**.5
    print('This is the distance between those points',d)`

答案 2 :(得分:0)

您忽略了点的前两个字符,因此如果数字只有两位数,则会得到一个空字符串。最好用.flex_group__1, .flex_group__2, .flex_group__3, .flex_group__3_inner_bottom, .flex_container { display: flex; } .flex_container { flex-direction: row; } .flex_group__3 { flex-direction: row wrap; justify-content: flex-end; } .flex_group__1, .flex_group__2, .flex_group__3 { flex-direction: column; } .flex_container * { border: 1px solid; } img { max-width: 100%; } 分割字符串:

split

答案 3 :(得分:0)

我明白了,我仍然不完全确定我做错了什么,但我添加了一个逗号分裂条款。在开始时,我像我在这里使用替换,但它没有用。这次,它做到了!感谢所有试图提供帮助的人。这是我的解决方案:

def distance():
p1=input('Input your first point:')
p2=input('Input your second point:')
rp1=p1.replace('(','').replace(')','')
x1, y1 = rp1.split(',', 1)
x1 = int(x1)
y1 = int(y1)
rp2=p2.replace('(','').replace(')','')
x2, y2 = rp2.split(',', 1)
x2 = int(x2)
y2 = int(y2)
x=(x2-x1)**2
y=(y2-y1)**2
d=(x+y)**.5
print('This is the distance between those points',d)