Python 3:如何在循环内将用户输入更改为整数?

时间:2014-06-24 02:14:27

标签: python-3.x

我希望我的程序要求用户输入3D点,并且应该一直提示用户,直到用户输入点(0,0,0)。我在这个循环中遇到的问题是由语句" point = [int(y)for y in input()。split()]"引起的。每当循环到达此语句时,它就会退出。我曾尝试将此声明放在不同的地方,但无论我把它放在哪里,它都会做同样的事情。如果我把声明拿出来,循环就可以了。我需要将用户输入的坐标更改为整数,所以我不能将语句遗漏。我还能做些什么来将坐标更改为不会影响循环的整数?

point = ""
pointList = [[]] #pointList will be a list that contains lists

while True:        
    if point == "0,0,0":
        break
    else:
        point = input("Enter a point in 3D space:")
        point = [int(y) for y in input().split()]            
        pointList.append(point)
print(pointList)

2 个答案:

答案 0 :(得分:1)

来自the docs

  

如果未指定sep或为None,则应用不同的拆分算法:连续空格的运行被视为单个分隔符,如果字符串具有前导或尾随,则结果将在开头或结尾处不包含空字符串空格。

简而言之,它会在空格上分割,而空格中不包含逗号。您正在寻找的是str.split(',')

答案 1 :(得分:1)

我建议在用户输入方面使其更加健壮。虽然正则表达式不应该被过度使用,但我认为它非常适合这种情况 - 您可以为所有可能允许的分隔符定义正则表达式,然后您可以使用正则表达式的split方法。将这一点表示为元组也更常见。循环可以直接包含条件。此外,条件可能有点不同,给它一个零点。 (示例中未显示。)尝试以下代码:

#!python3
import re

# The separator.
rexsep = re.compile(r'\s*,?\s*') # can be extended if needed

points = []     # the list of points

point = None    # init
while point != (0, 0, 0):
    s = input('Enter a point in 3D space: ')
    try:
        # The regular expression is used for splitting thus allowing
        # more complex separators like spaces, commas, commas and spaces,
        # whatever - you never know your user ;)
        x, y, z, *rest = [int(e) for e in rexsep.split(s)]
        point = (x, y, z)
        points.append(point)
    except:
        print('Some error.')

print(points)