Python 3.x Python 3:如何将用户输入更改为循环中的整数?

Python 3.x Python 3:如何将用户输入更改为循环中的整数?,python-3.x,Python 3.x,我希望我的程序要求用户输入一个3D点,它应该一直提示用户,直到用户输入点(0,0,0)。我在这个循环中遇到的问题是由语句“point=[int(y)for y in input().split()]”引起的。每当循环到达该语句时,它就会退出。我试着把这句话放在不同的地方,但不管我把它放在哪里,它都会做同样的事情。如果我把语句取出来,循环就工作了。我需要将用户输入的坐标更改为整数,因此我不能忽略该语句。我还可以做些什么来将坐标更改为整数,而不会影响循环 point = "" pointList =

我希望我的程序要求用户输入一个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)
发件人:

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


简言之,它在不包含逗号的空格上拆分。你要找的是str.split(',')

我建议让它对用户输入更加健壮。虽然正则表达式不应该被过度使用,但我认为它非常适合这种情况——您可以为所有可能允许的分隔符定义正则表达式,然后可以使用正则表达式的
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)

程序是抛出异常,还是只是退出?如果抛出异常,类型和回溯很重要;请把它们寄出去。