Ошибка значения: недопустимый литерал для int() после считывания входных данных в кортеж

#python-3.x #list #tuples

#python-3.x #Список #кортежи

Вопрос:

Я пишу код, который принимает некоторые числа в качестве кортежа, а затем проверяет, есть ли числа, кратные 3.

Я новичок в python и просто знаю некоторые базовые вещи о кортежах. Ниже приведен мой код:

 def Div3and5():
    data=tuple(input("Enter 3 numbers:"))
    c=[]
    a=0
    for i in range(0,len(data)):
        d=data[i]
        c.append(d)
    m=[int(x) for x in c]
    print(m)
    for i in m:
        if m[i]%3==0:
           print("It is not divisible")
Div3and5()
 

Итак, когда я запускаю этот код, я получаю ошибку, которая:

 ValueError: invalid literal for int() with base 10: ','
 

Смотрите, значения сохраняются как целые числа, и когда я даю команду на печать c , она четко показывает все элементы. Затем я пытаюсь преобразовать каждый элемент в целые числа, но он выдает ошибку, я не знаю почему. Итак, можете ли вы сказать мне причину этой ошибки. А также существует ли какой-либо прямой способ использования этой операции (делимости) непосредственно над кортежами без их преобразования в список. сначала.

Спасибо

Ответ №1:

Скорее всего, вы вводите числа с пробелами (или запятыми) между ними. Следовательно, эти пробелы (или запятые) превращают его в кортеж — и не могут быть преобразованы в int s .

Попробуйте вместо этого использовать str.split() , чтобы поместить входные числа в список.

 def Div3and5():
    c = input("Enter 3 numbers:").split(",")
    # Gives you the list e.g. ["3", "4", "5"]

    m = [int(x) for x in c]
    # Gives you the list e.g. [3, 4, 5]

    for i in m:
        if i % 3 == 0:
           print(f"{i} is divisible by 3")

Div3and5()
 

Помните, что str.split() это будет принимать разделитель в качестве аргумента. В этом случае я поставил запятую , , но вместо этого вы можете использовать пробел ' ' , в зависимости от того, как пользователь должен вводить ваш ввод.

Обратите внимание также, что вы делали if m[i] % 3 == 0 в if инструкции вместо if i % 3 == 0 . Это неверно, поскольку i на каждой итерации цикла является элементом списка m , а не индексом.

Кроме того, ваше условие i % 3 == 0 таково, что if i делится на 3, тогда print должно указывать, что число делится — вы печатали, что оно не делится (вероятно, опечатка).

Если вы хотите, чтобы все числа делились на 3 и 5, вы можете изменить условие следующим образом:

 if i % 3 == 0 and i % 5 == 0:
    print(f"{i} is divisible by 3 and 5")
 

Комментарии:

1. Когда я пытаюсь ввести числа без запятых, например 123, он показывает правильный ответ перед вводом цикла for , но когда я ввожу, например, 1,23,4, он показывает ошибку, о которой я упоминал выше

2. И всякий раз, когда я ввожу более одного значного числа, он разделяет их все. Итак, как я могу сохранить их как единое целое?

3. Ok @user272837 Я обновил приведенный выше код, чтобы использовать запятую ( , ) в качестве разделителя для разделения вместо пробела по умолчанию.

Ответ №2:

Вот ответ на ваш ВОПРОС :

 def Div3and5():
c = input("Enter 3 numbers:")

list=c.split(",")
c=tuple(list)

m = [int(x) for x in c]


for i in m:
    if i % 3 == 0:
            print(f'{i} is is divisible by 3')
           

Div3and5()
 

#Введите 3 числа с «,» : 123,45,67