本次教程干货过多

format函数

format的功能是使任意数据转换成字符串。format函数的基本语法举例如下:

a=8
b=7.333
print("{:d} , {:.2f}".format(a,b))

具体执行结果会在终端打印输出下述字符串:
8 , 7.33
其中,
{:d} 表示将a输出为整数,d表示整数;
{:.2f} 表示将b输出浮点数,保留两位小数,f表示浮点数;
format(a,b) 是将a与b的值转换成字符串。
{}中可以不填值

format前面是点,不是逗号

字符串

字符串是一个任意Unicode字符序列,包括中文等。可以用三种定界符:单引号、双引号、三引号,但是字符串的首末都得用一样的定界符,如:″ABout″,′123′。三引号用于表示跨行的字符串,如程序的跨行注释。

要访问字符串中单独的某个字符,用这个字符在字符串中的位置(索引),即这个字符离首字符的偏移量,注意首字符的位置为0,运算采用方括号[],方括号中表达式即为索引,也称为下标。字符串的索引有两种方式:一种是从0开始,向右依次递增序号,另一种是从-1开始,向左依次递减序号,如图1所示。因此访问字符′A′的可用反向递减的索引方式:ft[-5]

img

如果要访问字符串中的一个子串,则可以采用区间访问的方式,也可称为分片操作:[M:N],其中M和N为字符串的索引号,表示从M到N(不包括N)的子串,可以采用混合的索引方式,即一个使用递增的索引顺序,另一个采用递减的索引顺序。如果缺省M或N,则分别默认为字符串的开始或结尾的索引号。例如:

>>> ft="Apple"
>>> ft
'Apple'
>>> 
>>> ft="Apple"
>>> ft
'Apple'
>>> print(ft[-5:4])
Appl
>>> print(ft[:4])
Appl
>>> print(ft[3:])
le
>>> print(ft[::-1])
elppA

左闭右开,右边的永远取不到

字符串是不可改变,意味着不能修改字符串中的元素。

字符串(str)是一个类,封装了一系列的方法来处理更为复杂的文本处理任务的函数,这些封装在类中的函数称为方法,所以说方法就是和特定对象相关联的函数。对于方法的调用方式是:a.b(),表示调用对象a的方法b()。例如:

>>> a="Apple"
>>> a
'Apple'
>>> s=a[1]
>>> s
'p'
>>> b=a.count('p')    #统计"Apple"中p的个数
>>> b
2

字符串

列表

列表是一个有序的序列,其中包括0或多个对象引用,支持序列类型共同的运算及函数表中序列共用的运算和函数。

但是不同于元组和字符串的是,列表的长度和内容都是可变的,可自由对列表中数据项进行增加、删除或替换。列表没有长度限制,元素类型可以不同。因此,列表的应用非常广泛。

列表常用的创建方法有几种:可以通过显式的数据赋值生成,元素之间用逗号分隔;可以使用 [ ] 生成空列表,然后利用相关方法(如append()、extend()、insert()等)往列表中添加元素;可以使用list()函数将元组或字符串转换成列表。例如:

>>> lt=[]            #创建一个空列表
>>> lt.append('A')   #调用append方法向lt中追加一个元素′A′
>>> lt
['A']
>>> lt.append('B')
>>> lt.append("Hello") #调用append方法向lt中追加一个元素′Hello′
>>> lt
['A', 'B', 'Hello']
>>> lk=["201701001","李明",401]
>>> lm=list("欢迎来到湘潭大学") #将字符串转换为列表//重点~
>>> print(lk,lm)
['201701001', '李明', 401] ['欢', '迎', '来', '到', '湘', '潭', '大', '学']
>>> ln=lm
>>> ln[2]="你"
>>> lm
['欢', '迎', '你', '到', '湘', '潭', '大', '学']
>>> ''.join(lm)  #返回一个新列表,由lm的每一个元素组成,元素间用''分割
'欢迎来到湘潭大学'
>>> '0'.join(lm)  #返回一个新列表,由lm的每一个元素组成,元素间用'0'分割
'欢0迎0来0到0湘0潭0大0学'

其中,’’.join(lm)和’0’.join(lm)参照str.join(interable)的用法,这里’’和’0’是str,lm是interable。

由此可见,简单将一个列表赋值给另一个列表不会生成新的列表对象。

如下图所示,将lm赋值给ln,仅能产生对列表lm的一个新的引用,lm和ln都是引用的同一个列表,因此对ln的修改同时也修改了lm。

和字符串一样,可以利用正向和反向索引

由于列表是可变的,有关列表的操作除了表1中的共用的函数和运算外,下表列出了列表类型的一些常用方法与函数。

列表操作

序列型数据不同类型之间的转换

下表为序列类型间的转换函数:

内置函数描述
str(x)将x转换成字符串类型,x可以是数字类型、字符串、元组、列表及字典等各种类型的对象
tuple(x)将x转换成元组,x可以是字符串、元组、列表及字典等各种可迭代类型和映射类型的对象
list(x)将x转换成列表,x可以是字符串、元组、列表及字典等各种可迭代类型和映射类型的对象
dict(x)将x转换成字典,x可以是字符串、元组、列表及字典等各种可迭代类型和映射类型的对象

重点!

回文数python代码

data=input()
l=list(data)
l.reverse()#反转
t=''.join()#以空格分隔返回新字符串
if t==data:
          print("{}是回文数".format(data))
else:
          print("{}不是回文数".format(data))

if-else 条件控制结构

Python语言中,分支结构的使用if语句实现,其一般的形式如下:

if <条件1>:
    <语句块1>
elif <条件2>:
    <语句块2>
elif <条件3>:
    <语句块3>:
else:
    <语句块n>

if语句执行时,首先会测试<条件1>,如果结果为True,则执行<语句块1>, <条件1>False,则会测试<条件2>,依此类推, Python会执行第一个测试结果为True的<语句块>,如果所有的<条件>均为False,则执行else后的<语句块n>。

map 函数

map() 会根据提供的函数对指定序列做映射。

map(function, iterable, ...)

第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

例如:

map(square, [1,2,3,4,5])   # 计算列表各个元素的平方

会产生结果值[1, 4, 9, 16, 25]

字符串的split函数

string.split(str="", num=string.count(str))

str为分隔符切片 string,如果 num有指定值,则仅分隔 num 个子字符串,默认是以空格符为分隔符。

Python中enumerate用法详解

enumerate()是python的内置函数、适用于python2.x和python3.x
enumerate在字典上是枚举、列举的意思
enumerate参数为可遍历/可迭代的对象(如列表、字符串)
enumerate多用于在for循环中得到计数,利用它可以同时获得索引和值,即需要index和value值的时候可以使用enumerate
enumerate()返回的是一个enumerate对象

>>> lst = [1,2,3,4,5,6]
>>> for index,value in enumerate(lst):
  print ('%s,%s' % (index,value))
0,1
1,2
2,3
3,4
4,5
5,6

简单来说 enumerate函数可以返回列表的索引和值

#指定索引从1开始
>>> lst = [1,2,3,4,5,6]
>>> for index,value in enumerate(lst,1):
print ('%s,%s' % (index,value))

1,1
2,2
3,3
4,4
5,5
6,6

#指定索引从3开始
>>> for index,value in enumerate(lst,3):
print ('%s,%s' % (index,value))

3,1
4,2
5,3
6,4
7,5
8,6

几个比较有意思的题目

任务描述

本关任务:编写一个石头、剪刀、布游戏类的小程序。

为了完成本关任务,你需要掌握:1. Python的循环结构,2. python中的 list列表结构。

循环结构

for循环在 Python中是一个通用的迭代器,可以遍历任何有序的序列对象内的元素。 for语句可用于字符串、列表、元组、文件等可迭代对象。 for循环格式如下:

for <循环变量> in <遍历结构>:    <语句块1>else:    <语句块2>

for循环,内置函数 range()产生序列,可以来控制循环结构。

range(start, stop, [step])

  • start: 计数从 start 开始。默认是从 0 开始。例如 range(5)等价于 range(0, 5)
  • stop: 计数到 stop 结束,但不包括 stop。例如: range(0, 5)[0, 1, 2, 3, 4]没有 5
  • step:步长,默认为 1。例如: range(0, 5) 等价于 range(0, 5, 1)
列表 list

list是一个有序的序列,其中包括 0或多个对象引用, list中肯定也支持存放 list作为存储元素。

>>> lt=[]                 #创建一个空列表>>> lt.append('A')#调用append方法向lt中追加一个元素′A′>>> lt['A']

编程要求

编写传统的石头、剪刀、布的游戏程序,单局胜负规则是,剪刀胜布,布胜石头,石头胜剪刀。用户玩家和计算机对阵,采用 74胜制。为了简单便于判定,计算机的选择方式是固定的,并不是随机的选择序列,最后输出胜负或平局信息。

例如: 输入: 石头,剪刀,剪刀,布,布,石头,石头,则输出: 电脑赢!; 输入: 剪刀,布,剪刀,石头,布,剪刀,石头,则输出: 电脑赢!; 输入: 布,石头,石头,布,剪刀,石头,剪刀,则输出: 玩家赢!

测试说明

我会对你编写的代码进行测试:

测试输入: 石头,剪刀,剪刀,布,布,石头,石头 预期输出: 电脑赢!

代码:

# -*- coding:utf-8 -*-
import random
people_guess = [ x for x in map( str, input("").split(",") ) ]
guess_list = ["石头","剪刀","剪刀","布","布","石头","布"] # 电脑出拳的方式
computer_win_condition = [["布","石头"],["石头","剪刀"],["剪刀","布"]] # 每次电脑赢的情况
balance_condition = [["布","布"],["石头","石头"],["剪刀","剪刀"]] # 每次平局的情况
computer_win_number = 0 # 电脑赢的次数
people_win_number = 0   # 玩家赢得次数
li=[]
#********* Begin *********#
for i in range(1,7+1):
    li.append(guess_list[i-1])
    li.append(people_guess[i-1])
    if li in computer_win_condition:
        computer_win_number+=1
        li.clear()
    elif li in balance_condition:
        people_win_number+=1
        computer_win_number+=1
        li.clear()
    else:
        people_win_number+=1
        li.clear()
#********* End *********#
# 游戏进行 7 次之后,进行输赢的判别
if computer_win_number > people_win_number:
    print("电脑赢!",end="")
elif computer_win_number < people_win_number:
    print( "玩家赢!", end="" )
else:
    print("平局!")

任务描述

本关任务:编写函数,接收一个十进制整数为参数,返回等值的二进制数。

相关知识

为了完成本关任务,你需要掌握:如何计算十进制转换成二进制。

进制转换

十进制整数转换为二进制整数采用”除2取余,逆序排列”法。具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。 例如:将十进制数100.345转换成二进制数
img

img

img

编程要求

根据提示,在右侧编辑器补充代码,输出十进制整数的对应二进制数。

测试说明

我会对你编写的代码进行测试:

测试输入:10 预期输出:1010

测试输入:100 预期输出:1100100

代码:

def dec_to_bin( number ):
#********** Begin *********/
    list1=[]
    while( number!=0):
        list1.insert(0,number%2)
        number=number//2
    #此时list1中为[1,1,0,0,1,0,0]是int型的列表
    list2=[str(i) for i in list1]
    #此时list2中为['1', '1', '0', '0', '1', '0', '0']是str型的列表
    list3=''.join(list2)#join函数只能对str操作
    return list3
#********** End **********/
num = int(input())
print( dec_to_bin(num) ,end="")

此题可以借鉴操作int列表如何转换成字符串

任务描述

本关任务:编写函数,接收一个整数n为参数,打印杨辉三角前n行。

编程要求

根据提示,在右侧编辑器补充代码,输出杨辉三角。

相关知识

杨辉三角形

杨辉三角形是(a+b)**n二项式展开后各项的系数,其各行的系数有以下规律: (1)各行的第一个数和最后一个数都是1; (2)从第三行起,除了每行的第一个数和最后一个数外,其余各数是上一行中同列和前一列两个数之后。例如,第四行第二个数3是第三行中第二个数2和第一个数1之和。如下所示: 1 1,1 1,2,1 1,3,3,1 1,4,6,4,1 1,5,10,10,5,1

测试说明

我会对你编写的代码进行测试:

测试输入:5 预期输出: 1 1,1 1,2,1 1,3,3,1 1,4,6,4,1

测试输入:3 预期输出: 1 1,1 1,2,1

测试输入:6 测试输出: 1 1,1 1,2,1 1,3,3,1 1,4,6,4,1 1,5,10,10,5,1

代码

# -*- coding:utf-8 -*-
def yanghui(n):
#********** Begin *********/
    if (n==1):
        list1=[[1]]
    else:
        list1=[[1],[1,1]]
        for i in range (2,n):
            k=[]
            k.append(1)
            for j in range (1,i):
                k.append(list1[i-1][j-1]+list1[i-1][j])
            k.append(1)
            list1.append(k)
    return list1

#********** End **********/


def output(result):
    for row,item in enumerate(result):
        for index, number in enumerate(item):
            if index != len( item) - 1:
                print( "%d," % ( number ), end="" )
            else:
                if row != len( result ) -1:
                    print( number )
                else:
                    print( number, end="" )

n = int(input(''))
output(yanghui(n))

小提示:空列表无法使用list1[1]=0这样赋值 只能先通过append添加 利用list1[0]=1修改