我希望我的程序要求用户输入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)
答案 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)