Добавить кортежи в список - PullRequest
0 голосов
/ 27 января 2020

У меня проблема с простой программой; Моя цель - добавить кортежи в список, введенный пользователем. While-l oop должно сломаться, когда пользователь введет 0.

, это мой код:

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)

Проблема в том, что l oop никогда не останавливается, даже если Я поставил 0, где ошибка?

Ответы [ 2 ]

1 голос
/ 27 января 2020

В вашем коде есть две проблемы (насколько я понимаю, ваши проблемы):

a. Вы должны сначала преобразовать ввод от пользователя (который будет строкой) в кортеж. Вы можете использовать:

t = tuple(int(x.strip()) for x in input("insert tuple (0 to stop): ").split(','))

b. Вам нужно изменить ваше тестовое выражение while l oop на:

while len(t):

Мои предположения:

  1. Вы хотите, чтобы пользователь вводил значения через запятую ( Потому что наличие в вашем списке кортежа с одним значением не имеет смысла для меня. Поправьте меня, если я что-то пропустил)
  2. Вы хотите закончить свое время, пока l oop, если пользователь не ввел никакого значения ( , т. е. нажал клавишу Enter).

Если мои предположения верны, попробуйте следующее:

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)
1 голос
/ 27 января 2020

Пожалуйста, прочитайте следующие строки, чтобы понять, как исправить ошибку в вашем коде:

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