#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# 一、切片，Slice
# 构造一个1，3，5...，99的列表
# 一个list
L = []
n = 1
while n <= 99:
    L.append(n)
    n = n + 2

print(L)

# 取一个list或tuple的部分元素是非常常见的操作
# 对这种经常取指定索引范围的操作，用循环十分繁琐，因此，Python提供了切片（Slice）操作符，能大大简化这种操作
# 取前N个元素，也就是索引为0-(N-1)的元素，可以用循环
print(L[0:25])  # 获取前25个元素、从0开始到25，但不包括25
print(L[0:3])  # [1, 3, 5] 获取前三个数据，L[0:3]表示，从索引0开始，直到索引3结束，但不包括3

# 如果索引是0还可以省略
print(L[:3])  # [1, 3, 5]

# 既然Python支持L[-1]取倒数第一个元素，那么它同样支持倒数切片
print(L[-2])  # 97
print(L[-10:-1])  # [81, 83, 85, 87, 89, 91, 93, 95, 97]
# 记住倒数第一个元素的索引是-1
print(L[-10:])  # [81, 83, 85, 87, 89, 91, 93, 95, 97, 99]

# 切片操作十分有用，先创建一个0-99得数列
L = list(range(100))
print(L)

# 取前10个数
print('L得前10个数字:', L[:10])  # L得前10个数字: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print('L得后10个数字:', L[-10:])  # L得后10个数字: [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
# 前11-20个数
print('前11-20个数: ', L[10:20])   # 前11-20个数:  [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

# 前10个数，每两个取一个：
print(L[:10:2])
# [1, 5, 9, 13, 17]

# 所有数，每5个取一个
print(L[::5])
# [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
# 甚至什么都不写，只写[:]就可以原样复制一个list：
print(L[:])
# 此时相当于复制一个原来得list


# tuple也是一种list，唯一区别是tuple不可变。
# 因此，tuple也可以用切片操作，只是操作的结果仍是tuple
tuple1 = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
print(tuple1[:3])  # (0, 1, 2)

# 字符串'xxx'也可以看成是一种list，每个元素就是一个字符。
# 因此，字符串也可以用切片操作，只是操作结果仍是字符串

string = 'ABDJHJGJHB'
print(string[:3])   # ABD
# ABD，返回的仍然是一个字符串

# 练习：利用切片操作，实现一个trim()函数，去除字符串首尾的空格


def trim(s):
    # if s[0:] == '':
    #     print(s[0])
    #     return trim(s[1:])
    # elif s[-1:] == '':
    #     return trim(s[:-1])
    # else:
    #     return s
    while s[:1] == '':
        s = s[1:]
    while s[-1:] == '':
        s = s[:-1]
    return s


st = 'ABC   '
str1 = trim(st)
print(str1, 'dd')
# 循环输入元素到list
lis = []
for i in range(5):
    print(i)
    strIn = input()
    lis.append(strIn)

print(lis)
