увеличивать числа в понимании списка - PullRequest
0 голосов
/ 06 августа 2020

Я новичок в python. Я изучаю понимание списка, чтобы сократить свой код до минимума. Но я не могу увеличивать понимание списка. Как этот код:

n = 0; c = 0
for i in range(input()):
   m = map(int,raw_input().split())
   [n+=1 if m[0] > m[1] else c+=1]
print ['N', 'C'][c > n]

Мой ввод:

3
3 4
2 4
2 5

Результат должен быть:

N

Ответы [ 3 ]

1 голос
/ 06 августа 2020

Составления списков предназначены для составления списков. Кажется, вы хотите

if m[0] > m[1]: n+=1 
else: c+=1

Это не устраняет другие ошибки в коде.

0 голосов
/ 06 августа 2020

В приведенном выше коде есть несколько проблем -

  • Мы не конвертируем input() в int
  • Мы используем как input(), так и raw_input()
  • Понимание списка не позволяет + = оператор
0 голосов
/ 06 августа 2020

На самом деле вам не нужно отслеживать как n, так и c, поскольку вы можете рассчитать одно из другого и из общего количества (ваш первый ввод).

t = input()
n = 0
for i in range(t):
   a, b = map(int, raw_input().split())
   n += (a > b)
print 'N' if n >= t/2 else 'C'

Если вы действительно хотите сделать это короче (примечание: за исключением Code Golf, короче не всегда означает лучше), вы можете попробовать что-то вроде этого:

t = input()
n = sum(1 for i in range(t) for a, b in [map(int, raw_input().split())] if a > b)
print 'N' if n >= t/2 else 'C'

Или без t, используйте cmp (исключено в Python 3) для подсчета +1 для a > b и -1 для a < b, затем сравните с 0. Но это будет обрабатывать случай a == b по-другому, и читаемость, наконец, упадёт насмарку.

n = sum(cmp(*map(int, raw_input().split())) for _ in range(input()))
print 'N' if n >= 0 else 'C'
...