Вы можете сделать это:
l = range(100, 401)
n = []
for i in l:
v = 0
for j in str(i):
if int(j) % 2 == 0:
v += 1
if v == len(str(i)):
n.append(str(i))
print(",".join(n))
Или с некоторым пониманием списка:
l = range(100, 401)
n = []
for i in l:
if all(int(j) % 2 == 0 for j in str(i)):
n.append(str(i))
print(",".join(n))
Или с еще большим пониманием списка:
l = range(100, 401)
n = [str(i) for i in l if all(int(j) % 2 == 0 for j in str(i))]
print(",".join(n))
Или ссмешная минимизация:
print(",".join([str(i) for i in range(100, 401) if all(int(j) % 2 == 0 for j in str(i))]))
Объяснение
ОП попросил меня объяснить, почему его код не работает.Я сделаю это в несколько шагов, также оптимизируя это:
l = range(100,401)
n = []
ss = []
for i in l: # You don't need this loop, you are just making a new list with string values instead of integers. You could make that on the fly.
s = str(i)
ss.append(s)
for element in ss:
for j in range(3):
if int(element[j]) % 2 == 0: # This only check if the current digit is pair and it append the whole number to the list. You have to check if the 3 numbers are pair AND then append it.
n.append(element)
print(n)
Ваш код проверяет каждую цифру, и если это правда, число добавляется в список результатов (n
).Но вы не хотите этого, вы хотите проверить, являются ли 3 цифры, которые составляют номер, парными, поэтому вы должны проверить всю группу.
Например, вы можете сделать это:
for element in l:
pairs = 0
for j in range(3):
if int(str(element)[j]) % 2 == 0:
pairs += 1 # Each time a digit of the number is pair, `pairs` variable increase in one
if pairs == 3: # If the 3 digits are true it append your number
n.append(str(element))
Это моя первая идея, как улучшить ваш код, но вместо element
и pairs
я использую j
и v
, (также я не использую range(3)
, я просто повторяючерез строковое число).
Если вы ищете что-то «лучшее», вы можете попробовать использовать понимание списка, например all(int(j) % 2 == 0 for j in str(i))
.Это перебирает все цифры, чтобы проверить, являются ли они парой, если все проверки верны (например, 222 или 284), он возвращает true
.
Дайте мне знать, если я должен объяснить что-то еще.