向列表中添加元组

2024-05-02 22:32:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的程序问题;我的目标是将元组添加到列表中,由用户输入。当用户输入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,错误在哪里


Tags: to代码用户程序目标列表inputint
2条回答

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

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):

我所做的假设:

  1. 您希望用户键入逗号分隔的值(因为列表中只有一个值元组对我来说没有意义。如果我遗漏了什么,请纠正我)
  2. 如果用户没有输入任何值(例如,按下了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)

相关问题 更多 >