【问题标题】:Add tuples to a list将元组添加到列表
【发布时间】:2020-05-12 20:08:29
【问题描述】:

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

【问题讨论】:

  • 为什么tuple 会等于0?
  • input 返回一个字符串。你希望tuple('string') 做什么?
  • 循环永远不会结束因为input返回字符串所以你需要int(input())

标签: python python-3.x list while-loop tuples


【解决方案1】:

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

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)

【讨论】:

    【解决方案2】:

    您的代码中有两个问题(据我了解您的问题):

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

    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)
    

    【讨论】:

      猜你喜欢
      • 2021-12-27
      • 1970-01-01
      • 2014-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 2018-05-02
      相关资源
      最近更新 更多