#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