Pythonic вещь, чтобы сделать, это немного по-другому:
import fileinput
for line in fileinput.input():
if "BEER" in line:
print("Drink up!")
Но это делает много вещей, которые ваш код C не делает, например, позволяя пользователю передавать аргументы имени файла, которые следует читать вместо stdin as ar guments и т.д.
Это более прямое отображение кода:
try:
while True:
buffer = input() # or raw_input, for 2.x
if "BEER" in buffer:
print("Drink up!")
except EOFError:
pass
Однако он отсутствует часть, где линия более 300 символов линии, которая включает в себя "BEER"
в первые 200 символы, а затем снова в следующем будет печатать дважды, или 300-символьная строка, которая имеет «ПИВО», начиная с позиции 198, вообще не печатает.
Если это проблема, вы, вероятно, хотите что-то вроде этого:
import sys
while True:
buffer = sys.stdin.readlines(200)
if not buffer:
break
for line in buffer:
for i in range(0, len(buffer), 200):
if "BEER" in buffer[i*200:i*200+200]:
print("Drink up!")
как эквивалент сделать вас хочу это? – cmd
Я предполагаю, что функционально эквивалентны, не нужны массивы символов или пределы буфера. –
Дело в том, что это не очень питоническая вещь; обычно вы просто делаете что-то вроде 'for line in fileinput.fileinput():' и делаете вещи с каждой строкой. – abarnert