Python 向列表中添加元组

Python 向列表中添加元组,python,python-3.x,list,while-loop,tuples,Python,Python 3.x,List,While Loop,Tuples,我有一个简单的程序问题;我的目标是将元组添加到列表中,由用户输入。当用户输入0时,while循环应该中断 这是我的代码: sList=[] x=tuple(input("insert tuple (0 to stop): ")) while x!=int(0): sList.append(x) x=tuple(input("insert tuple (0 to stop): ")) print (sList) 问题是while循环从未停止过,即使我输入0,错误在哪里?请阅读以下

我有一个简单的程序问题;我的目标是将元组添加到列表中,由用户输入。当用户输入0时,while循环应该中断

这是我的代码:

sList=[]
x=tuple(input("insert tuple (0 to stop): "))
while x!=int(0):
    sList.append(x)
    x=tuple(input("insert tuple (0 to stop): "))
print (sList)

问题是while循环从未停止过,即使我输入0,错误在哪里?

请阅读以下几行,以了解如何修复代码中的错误:

sList=[]
x=tuple(input("insert tuple (0 to stop): "))

print("x contains: " + str(x))
print("x type is: " + str(type(x)))

while int(x[0])!=int(0):
    print("x contains: " + str(x))
    print("x type is: " + str(type(x)))
    sList.append(x)
    x=tuple(input("insert tuple (0 to stop): "))

print (sList)
您正在将字符串(0,)与int值0进行比较。 这就是您的版本无法按预期工作的原因。
我还添加了两个打印,以便更好地理解代码的作用

一旦我们了解了错误的性质以及如何修复它,我想问您为什么在这种情况下使用元组。
直接使用int是个好主意吗

我们还可以减少行数并删除重复的代码,下面是另一个迭代:

sList=[]
x = None

while x != 0:
    print("x contains: " + str(x))
    print("x type is: " + str(type(x)))
    x = input("Insert 0 to stop: ")
    if (x != None) and x.isdigit():
        x = int(x)
        if x != 0:
            sList.append(x)

print (sList)

您的代码中有两个问题(据我所知):

a。您需要首先将用户输入(将是字符串)转换为元组。您可以使用:

t = tuple(int(x.strip()) for x in input("insert tuple (0 to stop): ").split(','))
b。您需要将
while
循环测试表达式修改为:

while len(t):
我所做的假设:

  • 您希望用户键入逗号分隔的值(因为列表中只有一个值元组对我来说没有意义。如果我遗漏了什么,请纠正我)
  • 如果用户没有输入任何值(例如,按下了Enter键),则希望结束while循环
  • 如果我的假设正确,请尝试以下方法:

    def check_int(s):
        if len(s) == 0:
            return False
        if s[0] in ('-', '+'):
            return len(s) > 0 and s[1:].isdigit()
        return s.isdigit()
    
    sList=[]
    x=tuple(int(x.strip()) for x in input("insert tuple (0 to stop): ").split(',') if check_int(x.strip()))
    while len(x):
        sList.append(x)
        x=tuple(int(x.strip()) for x in input("insert tuple (0 to stop): ").split(',') if check_int(x.strip()))
    
    print(sList)
    

    为什么
    元组
    等于0?
    输入
    返回字符串。您希望
    tuple('string')
    做什么?循环永远不会结束,因为
    input
    返回字符串,所以您需要
    int(input())