0

我意识到这可能真的很容易,我想要在 Python 中等效于这个 C 代码:

#include <stdio.h>
#include <string.h>
#define BUFFER 200
int main()
{
    char buffer[BUFFER];
    while (fgets(buffer, BUFFER, stdin))
    {
        if (strstr(buffer, "BEER"))
            printf("Drink up!\n");
    }
    return 0;
}

我在网上搜索,但我认为我的大脑被炸了。

4

3 回答 3

2

Pythonic 的做法有点不同:

import fileinput
for line in fileinput.input():
    if "BEER" in line:
        print("Drink up!")

但这做了很多你的 C 代码没有做的事情,比如允许用户传递文件名参数以代替标准输入作为参数读取,等等。


这是您的代码的更直接映射:

try:
    while True:
        buffer = input() # or raw_input, for 2.x
        if "BEER" in buffer:
            print("Drink up!")
except EOFError:
    pass

但是,它缺少包含前 200 个字符的超过 300 个字符的行,"BEER"然后在下一个字符中再次打印两次的部分,或者从位置 198 开始具有“BEER”的 300 个字符的行不会打印出来。


如果这是一个问题,你可能想要这样的东西:

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!")
于 2013-05-29T19:59:03.330 回答
1

看看raw_input从标准输入获取用户输入,并将print其打印到标准输出:

http://docs.python.org/2/library/functions.html#raw_input http://docs.python.org/2/library/functions.html#print

于 2013-05-29T19:57:58.633 回答
1

等效的方法,虽然不完全相同

for line in iter(raw_input, ''):
    if 'BEER' in line:
        print('Drink up!')


foo
bar
aBEERc
Drink up!
***blank line***

于 2013-05-29T20:05:10.853 回答