2015-09-08 2 views
1

У меня есть следующий код:Разделительные значения запятыми

for n in range(1, 101): 
    if 100 % n == 0: 
     print(n, end='') 

Я хочу, чтобы напечатать все делители 100. Тем не менее, я хочу, чтобы они были в одной строке (что я выполнил, поставив end='' в код). Кроме того, мне нужны запятые между числами. Я хочу, чтобы иметь выход так:

1, 2, 4, 5, 10, 20, 25, 50, 100 

sep=',' не работает из-за цикл она находится в end=',' будет работать, но это приведет к запятой после 100, что не то, что я хочу..

+1

Почему бы не помещать их в список, тогда вы можете просто напечатать (',' .join (map (str, number_list))) '? – jonrsharpe

ответ

1

Вам нужно сохранить значения в списке, а затем использовать .join(). Кроме того, обратите внимание, что вам нужно вставлять элементы в свой список в строку.

my_list = [] 
for n in range(1, 101): 
    if 100 % n == 0: 
     my_list.append(n) 

print(", ".join(str(x) for x in my_list)) 
2

Вы можете создать список, а затем использовать str.join. Например:

lst = [] 
for n in range(1, 101): 
    if 100 % n == 0: 
     lst.append(str(n)) 
print(','.join(lst)) 

Пример/Демо -

>>> lst = [] 
>>> for n in range(1, 101): 
...  if 100 % n == 0: 
...   lst.append(str(n)) 
... 
>>> 
>>> print(','.join(lst)) 
1,2,4,5,10,20,25,50,100 

Это также может быть сделано в одной строке, используя список понимание:

print(','.join([str(n) for n in range(1, 101) if 100 % n == 0])) 

Демонстрация:

>>> print(','.join([str(n) for n in range(1, 101) if 100 % n == 0])) 
1,2,4,5,10,20,25,50,100 
0

У меня недостаточно репутации, чтобы добавить комментарий к Anand S Kumar, но я хочу указать, что вам не нужен список внутри join, так как он может принимать выражение генератора. Так вы также можете сделать:

>>> print(", ".join(str(n) for n in range(1, 101) if 100 % n == 0)) 
1, 2, 4, 5, 10, 20, 25, 50, 100 

Редактировать: У меня был комментарий, в котором говорилось, что это было быстрее. Оказывается, это было неверно.

+0

Нет, это не быстрее - на самом деле 'join'ing над выражением генератора * медленнее *, чем с использованием списка. См. Http://stackoverflow.com/a/9061024/3001761 – jonrsharpe

+0

Подтверждено. Спасибо. –

0

Попробуйте

ls = [] 
for n in range(1, 101): 
if 100 % n == 0: 
    ls.append(str(n)) 

print (','.join(ls)) 
+0

Пожалуйста, подумайте над редактированием сообщения, чтобы добавить больше объяснений о том, что делает ваш код и почему он решит проблему. Ответ, который в основном содержит только код (даже если он работает), обычно не помогает OP понять их проблему. Также рекомендуется, чтобы вы не отправляли ответ, если это всего лишь предположение. Хороший ответ будет иметь правдоподобную причину, почему он может решить проблему OP. – SuperBiasedMan

+0

Исправьте углубление и объясните, что вы делаете. –

0

вы можете использовать строку форматирования для этого

for n in range(1, 101): 
if 100 % n == 0: 
    print "%s," %n, 

выход

1, 2, 4, 5, 10, 20, 25, 50, 100, 
0

Попробуйте это:

mylist = [] 
mynumber = 100 
for n in range(1,(int(mynumber/2))+1): 
    if mynumber % n == 0: 
     mylist.append(str(n)) 
mylist.append(mynumber) 
print (','.join([str(item) for item in mylist])) 

Вам не нужно пробовать все до номера, который вы тестируете, потому что у него не будет коэффициента больше его половины. Например. 10 не имеет коэффициента после 5, кроме 10.

Вы можете изменить «mynumber» на любой номер, который вы хотите проверить.

Смежные вопросы