python进阶(2/2)

  1. 函数:定义与调用
    任务:定义一个函数,将一个二维列表拉直转化为一维列表(扁平化)。

     测试输入:5,6
     预期输出:
     [-10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 333, 334, 335, 336, 337, 	338]
    
#任务:定义一个函数,将一个二维列表拉直转化为一维列表(扁平化)
def flatten(alist):
    """二维列表扁平化
    """
    result=[]
    # ********** Begin *********#
    for i in range(2):
        for j in range(len(alist[i])):
            result.append(alist[i][j])

    # ********** End **********#
    return result
#创建一个二维列表
M=eval(input())  # eval将输入数据转回原来类型
N=eval(input())
matrix = [list(range(-10,M*2,2)), list(range(333,333+N))]
# ********** Begin *********#
#调用函数,结果保存到rs
rs=flatten(matrix)
# ********** End **********#
print(rs)

eval()函数作用:

我们在从键盘输入数据时,Python接收的是字符串类型,
这时我们可以使用eval()函数,将输入的数据进行还原。
1) 比如:键盘输入数字10
n = input()   # 类型是str
m = eval(input())  # 这里用eval(),类型变回int

2)比如:输入列表[1,2,3]
n = input()   # 类型是str
m = eval(input())  # 这里用eval(),类型变回list类型

3)输入元组(),也一样......

9)编写函数,生成fibonacci数列,并完成数值计算。

要求:1)定义一个函数,生成并返回fibonacci数列的前N项,[0,1,1,2,3,5,8…]
2) 求该数列前N项数据的和,结果保存在total中。

测试输入:7
预期输出:
[0, 1, 1, 2, 3, 5, 8]
20
"""
1)定义一个函数,生成并返回fibonacci数列的前N项,[0,1,1,2,3,5,8...]
2) 求该数列前N项数据的和,保存在total
"""
num=eval(input())
list=[]
total=0
def gen_list(N):
    # ********** Begin *********#
    a,b=0,1
    for i in range(N):
        list.append(a)
        a,b=b,a+b
    return list
    # ********** End *********#
print(gen_list(num))
for j in list:
    total=j+total

10)检查车牌
要求:实现一个检查函数:
要求车牌第一位必须是“苏”,第2位必须是A-Z大写字母中的一个;
要求车牌总长度为7,后续5位,由阿拉伯数字和大写字母构成
若合法,返回True,非法返回False。

测试输入:苏D1888
预期输出:
False
def check_license(vehicle_license):
    # ********** Begin *********#
    if vehicle_license[0] != '苏':
        return False
    elif len(vehicle_license) != 7:
        return False
    elif (vehicle_license[1] < 'A' and vehicle_license[1] > 'Z'):
        return False
    for i in range(2, len(vehicle_license)):
        #print(vehicle_license[i])
        if (vehicle_license[i] >= 'A' and vehicle_license[i] <= 'Z') or (vehicle_license[i] >= '0' and vehicle_license[i] <= '9'):
            pass
        else:
            return False
    return True
    # ********** End *********#
license_js = input()
#print(len(license_js))
rs = check_license(license_js)
print(rs)

11)百钱买鸡
本关任务:编程求解百钱买百鸡问题。
公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱。现在需要用100文钱买一百只鸡,其中公鸡,母鸡,小鸡每种至少一只。
求解所有的购买方案。

编程求解百钱买百鸡问题。要求打印输出全部方案,每个方案一行。按照公鸡、母鸡、小鸡的顺序,分别打印数值,数值间用一个空格分隔。
输出示例:
4 18 78

"""
编程实现:百钱买百鸡
公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,
用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有
请打印输出全部方案
"""
money=100
# ********** Begin *********#
for i in range(1,100): 
    for j in range(1,100):
         if ((i*5+j*3+(100-i-j)/3)==money):
            print(f'{i} {j} {100-i-j}')

12)文本简单加密
加密方法:
每个字母,都用位于字母表中其后第2个位置的字母替换,即a用c换,b替换为d;
y替换为a,z替换为b;
大写字母类似处理,用后2位的大写字母替换

相关知识:
涉及字符ASCII知识。
ord()返回字母的ASCII码
chr()根据ASCII值返回对应字母
ASCII码可以进行数值计算
# #综合
# #任务,加密
# #提示:ord()返回字母的ascii码,chr()根据ascii值返回对应字母

scarborough_fair="""Are you going to scarborough fair
你要去斯卡布罗集市吗
Parsley sage rosemary and thyme
芜荽 鼠尾草 迷迭香和百里香
Remember me to one who lives there
给我捎个口信给一位居住在那里的人
He once was a true love of mine
他曾经是我真爱的恋人
Tell him to make me a cambric shirt
告诉他为我做一件细麻纱布衬衫
Parsley sage rosemary and thyme
芜荽 鼠尾草 迷迭香和百里香
Without no seams nor needle work
要做的天衣无缝
Then he'll be a true love of mine
那么他就是我真爱的人"""

# # ********** End *********##将歌词转为列表
song_list =  scarborough_fair.split('\n')
# ********** Begin *********#
#提取歌词中的全部英文歌词,存入列表English中,每行歌词为一个列表元素
English = []
for i in range(len(song_list)):
    if i % 2 == 0:
        English.append(song_list[i])
print(English[-2:])
#加密变换
#每个字母,都用位于字母表中其后第2个位置的字母替换,即a用c换,b替换为d,
#y替换为a,z替换为b,大写字母类似处理,用后2位的大写字母替换
#按行打印变换后的结果
for i in range(len(English)):
    for j in range(len(English[i])):
        if English[i][j].isalpha():
            if English[i][j] == 'y':
                English[i] = English[i][:j] + 'a' + English[i][j+1:]
            elif English[i][j] == 'z':
                English[i] = English[i][:j] + 'b' + English[i][j+1:]
            else:
                English[i] = English[i][:j] + chr(ord(English[i][j])+2) + English[i][j+1:]

13)处理文件中的数据

根据提示,编码实现read_by_csv函数调用、单列数据的最大值、单列数据的平均值计算。
提示:
注意数据类型是否浮点数或者整数。

import csv
def read_by_csv(filename):
    """读取csv数据文件,文件的第一行是表头,舍弃,从第2行开始返回数据列表,
       每行数据对应列表中一个元组
    """
    content=[]
    with open(filename,'r',newline='') as csvfile:
        reader = csv.reader(csvfile,delimiter=',')
        header = next(reader)
        for line in reader:
            content.append(line)
    return content
MAX=0
AVG=0
# ********** Begin *********#
#调用read_by_csv函数,读取数据文件'step2/stocks.csv',结果保存到变量data
data=read_by_csv('step2/stocks.csv')
# ********** End **********#
print(data[-1])
# print(data)
MAX=0
sum=0
# ********** Begin *********#
#求最后一列数据中的最大值,赋给变量MAX
for i in range(6):
    if float(data[i][5])> MAX:
        MAX=float(data[i][5])
    sum =sum+float(data[i][1])
    AVG=sum/6
#求第二列数据的平均值,赋给变量AVG
# ********** End **********#
print('%.1f' %MAX)
print('%.10f' %AVG,end='')

你可能感兴趣的:(python,开发语言)