Python Input Read Форматирование - PullRequest
0 голосов
/ 25 марта 2012

Как я могу прочитать два значения, введенные в одну строку, в две переменные с помощью python, например,% d% d в c raw_input читает все в этой строке

например, 1 0

я хочу 1 вх и 0 у у

Ответы [ 3 ]

5 голосов
/ 25 марта 2012
x, y = map(int, raw_input().split())
0 голосов
/ 25 марта 2012

Использование метода Ларсмана достаточно хорошо.Если вы действительно хотите использовать функцию scanf и, что наиболее важно, не хотите читать всю строку .Попробуйте, это может быть медленно, хотя.

import re
import sys

class Pin:
    formatDict = {'%d': r'(\d+)', '%f': r'(\d+\.?\d*)'}
    def __init__(self, input=sys.stdin):
        self.input = input

    def scanf(self, format):
        # change the C style format to python regex
        for a, b in self.formatDict.iteritems():
            format = format.replace(a, b)
        patt = re.compile('^\\s*%s$'%format, re.M)
        buf = ''
        matched = 0
        while 1:
            c = self.input.read(1)
            if not c: break
            buf += c
            g = patt.match(buf)
            if g:
                # matched, but there may be more to match, so don't break now
                matched = 1
                matchedGroup = g
            elif matched:
                # the first unmatch after a match, seek back one char and break now
                self.input.seek(-1, 1)
                break
        if matched:
            return tuple(eval(x) for x in matchedGroup.groups())

scanf = Pin(open('in', 'r')).scanf
print scanf('%d %d')
print scanf('%f %f')

Уродливо, но интересно, верно?

0 голосов
/ 25 марта 2012

Вы можете прочитать всю строку и использовать регулярное выражение для ее анализа. Используйте группы, чтобы получить интересующие вас детали. В противном случае просто используйте string.split, если вам не нужен такой элемент управления.

...