python输入,格式化输入,以及sca

发布时间:2019-08-29 07:35:01编辑:auto阅读(2011)

    一,普通读入数据

    有一下5种方式:

    n, m = [int(i) for i in temp.split(' ')]
    n, m = map(int,raw_input().split(' '))
     
    import sys
    for line in sys.stdin:
          for data in line.split(' '):
                print data
     
    import sys
    arr = []
    for line in sys.stdin:
          arr.append([int(i) for i in line.split(' ')])
     
    import sys
    arr = []
    for line in sys.stdin:
          arr.append( set( line.lower.split(' ') ) )
     
    
    while True:
        try:
            (x, y) = (int(x) for x in raw_input().split())
            print x + y
        except EOFError:
            break
    


    二,调用c标准库

    # Windows下:
    from ctypes import *
    msvcrt = cdll.msvcrt
    msg = "Hello world!\n"
    msvcrt.printf("Testing: %s", msg)
    
    # Linux下:
    from ctypes import *
    libc = CDLL("libc.so.6")
    msg = "Hello, world!\n"
    libc.printf("Testing: %s", msg)

    三,正则表达式实现scanf

    在Python里,没有与scanf()直接等同的功能函数,因此需要格式化输入,就需要使用正则表达式的功能来实现,并且正则表达式的功能比scanf()更加灵活,功能更加强大,下面就来列出一些等同的表达:



    scanf()格式字符串

    正则表达式

    %c

    .

    \

    .{5}

    %d

    [-+]?\d+

    %e,%E,%f,%g

    [-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?

    %i

    [-+]?(0[xX][\dA-Fa-f]+|0[0-7]*|\d+)

    %o

    [-+]?[0-7]+

    %s

    \S+

    %u

    \d+

    %x,%X

    [-+]?(0[xX])?[\dA-Fa-f]+


    输入一个字符串的例子:

    /usr/sbin/sendmail - 0 errors, 4 warnings
    对于上面格式的字符串,如果使用C函数scanf()来输入,需要使用下面的格式来实现:
    %s - %d errors, %d warnings
    如果我们使用正则表达式来表示,如下:
    (/S+) - (/d+) errors, (/d+) warnings
    例子:
    print('scanf()')
    pattern = re.compile(r"(\S+) - (\d+) errors, (\d+) warnings")
    match = pattern.match('/usr/sbin/sendmail - 0 errors, 4 warnings')
    if match:
        print(match.groups())

    结果输出如下:
    scanf()
    ('/usr/sbin/sendmail', '0', '4')

    %c的例子:

    print('scanf() %c')
    pattern = re.compile(r".")
    match = pattern.match('this is for test/n')
    if match:
        print(match.group())
    结果输出如下:
    scanf() %c
    t

    \的例子:

    print('scanf() \')
    pattern = re.compile(r".{5}")
    match = pattern.match('this is for test/n')
    if match:
        print(match.group())
    结果输出如下:
    scanf() \
    this 

    %e, %E, %f, %g的例子:

    print('scanf() %e, %E, %f, %g')
    pattern = re.compile(r"[-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?")
    match = pattern.match('+200.3721/n')
    if match:
        print(match.group())
    
    match = pattern.match('x9876/n')
    if match:
        print(match.group())#不匹配没有输出
    结果输出如下:
    scanf() %e, %E, %f, %g
    +200.3721

    %i的例子:

    print('scanf() %i')
    pattern = re.compile(r"[-+]?(0[xX][\dA-Fa-f]+|0[0-7]*|\d+)")
    match = pattern.match('0xAA55/n')
    if match:
        print(match.group())
    
    match = pattern.match('234.56/n')
    if match:
        print(match.group())
    结果输出如下:
    scanf() %i
    0xAA55
    234

    八进制的%o的例子:

    print('scanf() %o')
    pattern = re.compile(r"[-+]?[0-7]+")
    match = pattern.match('0756/n')
    if match:
        print(match.group())
    match = pattern.match('898/n')
    
    if match:
        print(match.group())#不匹配没有输出
    结果输出如下:
    scanf() %o
    0756

    字符串%s的例子:

    print('scanf() %s')
    pattern = re.compile(r"\S+")
    match = pattern.match('深圳是一个小渔村/n')
    if match:
        print(match.group())
    match = pattern.match('898/n')
    
    if match:
        print(match.group())
    结果输出如下:
    scanf() %s
    深圳是一个小渔村
    898

    %u的例子:

    print('scanf() %u')
    pattern = re.compile(r"\d+")
    match = pattern.match('756/n')
    if match:
        print(match.group())
    
    match = pattern.match('-898/n')
    if match:
        print(match.group())#不匹配没有输出
    结果输出如下:
    scanf() %u
    756

    十六进制%x, %X的例子:

    print('scanf() %x %X')
    pattern = re.compile(r"[-+]?(0[xX])[\dA-Fa-f]+")
    match = pattern.match('0x756/n')
    if match:
        print(match.group())
    
    match = pattern.match('-898/n')
    if match:
        print(match.group())#不匹配没有输出
    结果输出如下:
    scanf() %x %X
    0x756





关键字