python笔记3:从ACM模式编程开始

3、sys模块输入问题,即ACM中的输入输出问题

参考链接(第8条)

A.用input()输入:

a = int(input()) # 得到单个整型数字
b = list(map(int,input().split())) # 得到数字元素列表
print(a,b) # 输出

n = int(input())  # 指定行数,输入多行数据(每个数占一行),返回一维list
lst = []
for i in range(n):
	lst.append(int(input()))

# 得二维数组
res = []
n = int(input("请输入行数:"))
for i in range(n):
     res.append(list(map(int, input('请输入,以空格分开:').split())))
print(res)

B、用sys模块输入: input() 等价于sys.stdin.readline()

(1)控制台单个数字输入:

import sys
a = int(sys.stdin.readline().strip())

(2) 把这一行用空格分开的数字,变为列表:

b = list(map(int,sys.stdin.readline().strip().split()))

(3)指定行数 输入多行数据,返回一维或者二维list:

c = []
# 一维
for i in range(a):
    cc = int(sys.stdin.readline().strip().split()) # 直接转换为数字就可
    c.append(cc)
# 二维
for i in range(a):
	cc = list(map(int,sys.stdin.readline().strip().split()))
	c.append(cc)
	
print(c)

(4)不指定行数 输入多行数据, 返回二维list:

d = []
while true:
	try:
		dd = list(map(int,sys.stdin.readline().strip().split()))
		if not dd:  # 不断循环,直到得到的一行输入为空
			break
		d.append(dd)
	except:
		break
print(d)

4、关于3中关键语句分析
(1)关于input()输入、split()

>>> a = input() # 单个输入
43
>>> a
'43'
>>> type(a)
<class 'str'>  # 返回是字符类型

>>> a = input().split() # 多次输入,用空格分开,回车结束
a b c d e
>>> a
['a', 'b', 'c', 'd', 'e']  # 返回元素为字符类型的列表
>>> type(a)
<class 'list'>
>>> trpe(a[0])

>>> a, b, c = input()  # 不能对多个元素赋值,因为没有分割开
1 2 3
Traceback (most recent call last):
  File "", line 1, in <module>
    a, b, c = input()
ValueError: too many values to unpack (expected 3)

>>> a, b, c = input().split() # 一一对应多次赋值
1 2 3
>>> a
'1'
>>> b
'2'

(2)关于map()、list()
语法:map(function, iterable, …)
参数
function----函数
iterable----一个或者多个序列,(不一定是数组)
返回值
Python 2.x 返回列表。
Python 3.x 返回迭代器。 # 加list()返回列表
功能:会根据提供的函数对指定序列的每一个元素做映射

>>> a = input().split()
1 2 3 4
>>> a
['1', '2', '3', '4']
>>> b = map(int,a)
>>> b
<map object at 0x00000231C3CC5390> # 返回的是迭代器
>>> c = list(b)  # 所以要使用list()函数得到列表
>>> c
[1, 2, 3, 4]

(3)关于sys.stdin.readline()
实现标准输入,需要调用sys库,sys.stdin是一个标准化输入的方法,其中默认输入的格式是字符串,如果是int,float类型则需要强制转换
a, b ,c = map(int, sys.stdin.readline().split())
等价于
a, b ,c = map(int, input().split())

>>> name = sys.stdin.readline()
jsf
>>> print('Hello ', name)
Hello  jsf

>>> m = sys.stdin.readline()
12
>>> m
'12\n'  # 注意区别,如果不加strip(),则返回的是“字符串+\n”
>>> h = int(m)
>>> h
12
>>> n = sys.stdin.readline().strip() # 加了strip()之后就没有\n 了
12
>>> n
'12'
>>> h = int(n)
>>> h
12

5、链表
定义链表、正向遍历、反向遍历、反转链表

class ListNode(object):
    def __init__(self,x,next=None):
        self.val = x
        self.next = next
class LinkList(object):
    # 反转
    def reserve(self, ListNode):
        results = []
        while ListNode:
            results.insert(0, ListNode.val)
            ListNode = ListNode.next
        return results
if __name__ == '__main__':
    s = LinkList()
    head = None
    # 创建链表,head为头节点
    for x in range(4):
        head = ListNode(x, next=head)
    a = []
    p = head
    # 遍历链表
    while p:
        a.append(p.val)
        p = p.next
    print('顺序遍历,正向打印结果', a)
    print('顺序遍历,反向打印结果', s.reserve(head))

    # 反转链表, cur 指向原来的尾节点,原来头节点指向None
    cur = None
    pre = head
    while pre:
        # 要变的指针(.next)先缓存
        temp = pre.next
        pre.next = cur
        cur = pre
        pre = temp

    q = cur
    b = []
    while q:
        b.append(q.val)
        q = q.next
    print('顺序遍历反转后的链表', b)
  1. 关于字典的遍历
d = {'1': 2, '3' : 4, '5' : 6}
for i in d:  # in 字典遍历的 是键
    print(i)
l = [1, 3 , 5]
for i in l: # 而数组遍历的是元素
    print(i)
# 这里记得换成python3
n, k = map(int, input().split())
res = []
for _ in range(n):
    tmp = list(map(int, input().split()))
    res.append(tmp)
"""
输入:
5 3
2 11 21
19 10 1
20 11 1
6 15 24
18 27 36
"""
"""
输出:
n = 5  k = 3
res = [[2, 11, 21]
       [19, 10, 1]
       [20, 11, 1]
       [6, 15, 24]
       [18, 27, 36]]
"""

1.输入:一个数,输出:一个数
要用input()函数,且得到的为字符类型,使用时应当定义为整形变量:n = int(input())
输出时要使用print()函数,而不是像核心代码模式那样的最终返回一个结果
2.

# 招行2019编程题:挑选代表(找每个区间中的两个元素,要求最后得到的元素集合最短,也就是找到的元素尽量重复)
def slove(a):
    a.sort()
    set1=set()
    for l in a:
        s=l[-1]
        e=l[0]
        cn=0
        for i in range(s,e+1):
            if i in set1:
                cn+=1
            if cn==2:
                break
        if cn==0:
            set1.add(e-1)
            set1.add(e)
        if cn==1:
            set1.add(e)
    return len(set1)
      
if __name__=="__main__":
    n=int(input().strip())
    a=[]
    for i in range(n):
        l=list(map(int,input().strip().split()))
        a.append(l[::-1])
    if n==0:
        print(0)
    else:
        print(slove(a))

你可能感兴趣的:(python,python)