栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python入门基础题目总结【刚学不到两个月】

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python入门基础题目总结【刚学不到两个月】

作为一个刚入大一的新生,我开始了我0编程基础的python自学之旅,从python的学习至今一共7周时间,在这七周,我学习并完成了以下22道python入门基础题(远不止22...),并在此以总结。

目录

1、小欧拿一百块钱,一只公鸡5块钱,一只母鸡3块钱,三只小鸡1元钱。买一百只,问公鸡、母鸡、小鸡各多少只,请用列表推导式解决!

2、有如下值集合[11,22,33,44,55,66,77,88,99,90], 将所有大于66的值保存至字典的第一个key中,将小于66值保存至第二个key的值中。


3、使用lambda函数对1~1000进行求和

4.请你把下图的抽奖过程用程序实现并且封装成一个的函数。

5.和电脑玩一个剪刀石头布的游戏:电脑随机出拳,我们可选择出什么。(电脑随机出、用户手动输入且要判断输入是否合法)封装为一个函数。

6.小明、小红、小刚是同班同学,且坐在同一排,分别坐在第一位、第二位、第三位。由于他们的身高都差不多,所以,老师计划让他们三个轮流坐在第一位。每次换座位的时候,第一位变第三位,后面两位都往前一位

7.制作一个简易的账号密码登录系统

要求如下:

i.系统里面有多个用户,用户的信息目前保存在列表里面,账号密码一一对应

    users = ['root','westos']

    passwd = ['123','456']

ii.用户登陆(判断用户登陆是否成功)

    1).判断用户是否存在

    2).如果存在

        1).判断用户密码是否正确

        如果正确,登陆成功,推出循环

        如果密码不正确,重新登陆,总共有三次机会登陆

    3).如果用户不存在

重新登陆,总共有三次机会

8.猜数字游戏

要求:

     1. 系统随机生成一个1~100的数字;

     2. 用户总共有5次猜数字的机会;

     3. 如果用户猜测的数字大于系统给出的数字,打印“too big”;

     4. 如果用户猜测的数字小于系统给出的数字,打印"too small";

     5. 如果用户猜测的数字等于系统给出的数字,打印"恭喜",并且退出循环;

9.给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格。

“mi xiao hello”">比如: (1) “hello xiao mi”-> “mi xiao hello”




10.题目内容:你好,人们叫我'程序员' 这个世界的人都选择无视我 只有你看到了我并和我打招呼 我感到很孤单,很孤单 你愿意和我成为朋友吗?

请你把这段话按照下面的格式打印出来:你好,人们叫我'程序员'这个世界的人都选择无视我只有你看到了我并和我打招呼我感到很孤单,很孤单你愿意和我成为朋友吗?

提示:本题需要运用三个知识点:换行,运用转义字符将单引号打印出来,打印函数

11.定义一个Person类,使用Person类,创建一个mayun对象后,添加company属性,值是"阿里巴巴";创建一个wangjianlin对象,添加company属性,值是"万达集团"

12.企业发放的奖金根据利润(I)的多少来提成:

低于或等于10万元时,奖金可提10%;

利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;

20万到40万之间时,高于20万元的部分,可提成5%;

40万到60万之间时高于40万元的部分,可提成3%;

60万到100万之间时,高于60万元的部分,可提成1.5%;

高于100万元时,超过100万元的部分按1%提成。

从键盘输入当月利润I,求应发放奖金总数?

13.有如下数字:

05​​​​​​ 04 0306 01 0207 08 09

像这样扩展到最多包含前25个数字:

17 16 15 14 1318 05 04 03 1219 06 01 02 1120 07 08 09 1021 22 23 24 25

您可能会很容易注意到,第一层(也是最内层01)仅包含一个数字(),第二层-紧邻其周围-包含8个数字(02-09范围内的数字),依此类推。

您的任务是创建一个给定数字的layers(n)函数,该函数返回n在第几层

例子:

layers(1)  return 1layers(5)  return 2layers(25) return 3layers(30) return 4layers(50) return 5

14.你的任务是,创建一个20行5列的二维数组,其取值范围是0—9(需为整数),在其所有的值中随机抽取20个位置进行修改,修改后的值为100。


 

15.A君目前在一家资产评估公司实习,他的工作日常就是跑遍市区里的住宅小区,调查小区的地址、建筑年份和每栋楼里每个单元里每一户的朝向和面积。比如一户的资料是:富安花园(小区)3栋 2单元 401户;朝向:南北朝向;面积:90平方。他需要把每一户的信息都记录下来。为了节省时间,通常他们会当场把一栋楼里所有单元的数据画在一张平面图里。等回去之后,再把平面图记录的数据,录入到excel表里。

举个例子,上面这张平面图表示的是这一栋有4个单元,每个单元有15层楼,其中1,2单元有两户,面积和朝向是140平方,南北朝向。3单元有四户,有2户面积60平方,南北朝向,2户面积80平方,东西朝向;4单元有四户,面积70平方,东西朝向。A君抱怨原本看房已经很累人了,录入更烦。可能你觉得用excel的自动填充功能不是很方便吗,事情远没有这么简单。确实,有一些重复的单元格只要填一次,自动下拉就可以复制粘贴,对于A君(excel菜鸟)来说,每次只要手动输入户室号就可以。(当然掌握一些excel技巧可以节省一些功夫)

不过,不同单元的户数、朝向和面积不完全是一样的,所以不能以一个单元的数据复制给其他单元,比如说,好不容易输入了1单元的数据,复制给了2单元,但因为3单元有4户,面积和朝向都不一样,所以3单元又得重新处理,户室号、面积、朝向都不一样。

我们的任务是用程序自动录入数据,甚至连excel都不用打开。在终端运行该程序后,打开excel对应的文件,就会发现数据是按一定的规律录入好的。(CSV格式)

16.你的任务是获取并输出知乎网页的源代码,最后保存为txt文本,链接为:https://www.zhihu.com/

17.使用正则表达式从下面内容获取所有jpg结尾的网页图片链接,如(这只是其中一个):http://kr.shanghai-jiuxin.com/file/2021/1112/small95a18b4db31f407b3cd7c275d2eb7e36.jpg

18.写一个程序:

score = [23, 54, 65, 1, 0, 34, 67, 22]

对上面的score用for循环的方法由小到大排序并输出,禁止用sort函数

19.定义一个汽车类,并在类中定义一个move方法,然后分别创建BMW_X9、AUDI_A9对象,并添加颜色、马力、型号等属性,然后分别打印出属性值、调用move方法(move方法调用后则输出--汽车开始跑了--)

20.小欧想在学校中请一些同学一起做一项问卷调查,为了实验的客观性他先用计算机生成了N个1~1000之间的随机整数(N<=1000),N是用户输入的,对于其中重复的数字,只保留一个,把其余相同的数字去掉,不同的数对应着不同的学生的号,然后再把这些数从小到大排序,按照排好的顺序去找同学做调查,请你协助小欧完成“去重”与“排序”工作

21.写一个程序,假定小欧生日为2002年12月1日,将其生日作为定值,以今天2021年11月14日为例,作为输入,则输出小欧今年18周岁了!,若以2021年12月1日为例,作为输入,则输出小欧刚好19周岁。可以去农院路庆祝了!以2004年10月15为例,则输出小欧今年1周岁了!

22.爬取拉勾网关于Java的职位并将其转为CSV格式


1、小欧拿一百块钱,一只公鸡5块钱,一只母鸡3块钱,三只小鸡1元钱。买一百只,问公鸡、母鸡、小鸡各多少只,请用列表推导式解决!

总金额100元,总数也为100,这是一个很简单的三元二次等式问题,我们设公鸡数量为x,母鸡数量为y,小鸡数量为z,可以列出表达式

x + y + z = 100,
5 * x + 3 * y + z / 3 = 100

通过简单判断,公鸡数量最多为20,母鸡数量最多为33,小鸡数量最多为100,通过列表表达式把条件引入,通过print输出,可以直接输出符合的x,y,z的列表

# cock = x
# hen = y
# chick = z
list1 = [(x, y, z) for x in range(21) for y in range(34) for z in range(101) if
         x + y + z == 100 and 5 * x + 3 * y + z / 3 == 100]
print(list1)

得出结果:

[(0, 25, 75), (4, 18, 78), (8, 11, 81), (12, 4, 84)]

2、有如下值集合[11,22,33,44,55,66,77,88,99,90], 将所有大于66的值保存至字典的第一个key中,将小于66值保存至第二个key的值中。

这题他让我们将列表中的数值中大于66的和小于66的分开为两个列表并保存到字典中,我们可以通过遍历,将列表导出,然后通过判断是否大于或小于66,将其加入提前建好的空列表中即可分别得到数值大于66和数值小于66的两个列表,同时题目要求将所有大于66的值保存至字典的第一个key中,将小于66值保存至第二个key的值中,我们便创建字典

dict1 = {'k1': s1, 'k2': s2}

即可达到题目要求

list1 = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
s1 = []
s2 = []
for i in list1:
    if i > 66:
        s1.append(i)
    if i < 66:
        s2.append(i)
dict1 = {'k1': s1, 'k2': s2}
print(dict1)

得出结果: 

{'k1': [77, 88, 99, 90], 'k2': [11, 22, 33, 44, 55]}

列表推导式版本: 

list1 = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
s1 = [i1 for i1 in list1 if i1 < 66]
s2 = [i2 for i2 in list1 if i2 > 66]
dict1 = {'k1': s1, 'k2': s2}
print(dict1)

得出的结果与上面一致

3、使用lambda函数对1~1000进行求和

这道题的目的是为了考察lambda函数的运用,我们通过lambda函数的学习可以知道,lambda函数可以接受一个参数,并返回一个值(具体建议通过看例子来了解)

求和我们可以使用sum()函数

如下

num1 = lambda a:sum(range(a+1))

我们只需要print(1000)即可输出前一千的和的值

num1 = lambda a:sum(range(a))
print(num1(1001))

得出结果:

500500

4.请你把下图的抽奖过程用程序实现并且封装成一个的函数。

这道题目考察主要我们四个点,如何区分有无中奖,函数的封装,time模块的运用,以及绘制图案时字符串的换行。    我们这里使用def封装一个函数,,运用time模块中的sleep完成倒计时,字符串后面使用n达成换行的效果以此绘制图案。

  在判断有无中奖中,我这里使用了random模块中的choice达成抽奖功能

  random.choice([0, 0, 0, 1, 1, 2])

以列表中0,1,2的这三个数字的数量的不同,将他区分成概率不同的三种奖,然后通过if判断出他是哪个数字,从而判断出他几等奖

题目原本的要求是让我们判断有无中奖,而我这里稍作改进,变成了抽中几等奖,然后绘制了自己心仪的图案,加了一点恶趣味。这可能是我们编程新手的一小点点乐趣。

def roll():
    import random
    import time
    num1 = random.choice([0, 0, 0, 1, 1, 2])
    print('开奖倒计时 3')
    time.sleep(0.5)
    print('开奖倒计时 2')
    time.sleep(1)
    print('开奖倒计时 1')
    time.sleep(1.5)
    print('   /> _ フn'
'  |          |n'
' |   。  。 | n'
' /`   _x_ ノn'
' /  ヽ   ノn'
'/ ̄| | | |n'
'| ( ̄ヽ_ヽ_)__)n')
    if num1 == 0:
        return '黑鬼,没中奖'
    if num1 == 1:
        return '恭喜小欧中三等奖'
    if num1 == 2:
        return '恭喜小欧中二等奖'
#     笑死,你以为真有一等奖??

print(roll())

  输出结果如下: 

开奖倒计时 3
开奖倒计时 2
开奖倒计时 1
   /> _ フ
  |          |
 |   。  。 | 
 /`   _x_ ノ
 /  ヽ   ノ
/ ̄| | | |
| ( ̄ヽ_ヽ_)__)

黑鬼,没中奖

5.和电脑玩一个剪刀石头布的游戏:电脑随机出拳,我们可选择出什么。(电脑随机出、用户手动输入且要判断输入是否合法)封装为一个函数。

我们要做到电脑随机出拳,可以用random模块中的choice选择石头剪刀布的其中一个视为电脑的出拳,然后玩家通过input手动输出石头剪刀布来决定自己的出拳,通过if语句以及我们玩石头剪刀布的经验就可以判断出我们与电脑直接的胜负。

def scissors():
    import random
    sfist = ['石头', '剪刀', '布']
    computer = random.choice(sfist)
    player = input('请出拳:(石头、剪刀、布)')
    if player in sfist:
        print('————战斗过程————')
        print(f'电脑出了{computer}')
        print(f'你出了{player}')
        print('————结果————')
    if player not in sfist:
        print('出错了哦')

    if player == '石头' and computer == '剪刀' or player == '剪刀' and computer == '布' or player == '布' and computer == '石头':
        return '你赢了'
    elif computer == player:
        return '平局'
    else:
        return '你输了'


print(scissors())

输出结果如下:

请出拳:(石头、剪刀、布)石头
————战斗过程————
电脑出了剪刀
你出了石头
————结果————
你赢了

6.小明、小红、小刚是同班同学,且坐在同一排,分别坐在第一位、第二位、第三位。
由于他们的身高都差不多,所以,老师计划让他们三个轮流坐在第一位。每次换座位的时候,第一位变第三位,后面两位都往前一位

这道题我们思路可以很明确知道:使用下标换位。

我在做这道题刚刚下手时,有个致命的错误,那就是逐个换位,如图:

这里在更改变量时就把小明这个变量的删除了

要在改变位置的同时,保留变量就要进行同时换位

 如下:

list1 = ['小明', '小红', '小刚']
list1 = [list1[1], list1[2], list1[0]]
print(list1)

接下来的我们只需要将他稍微修饰,放进循环中,打印多次换位的结果即可,我这里便是打印了前二十次换位的结果

list1 = ['小明', '小红', '小刚']
num = 1
while num <= 20:
    if num == 1:
        print(f'第{num}次座位为:', list1)
    if num != 1:
        list1 = [list1[1], list1[2], list1[0]]
        print(f'第{num}次座位为:', list1)
    num += 1

输出如下:

第1次座位为: ['小明', '小红', '小刚']
第2次座位为: ['小红', '小刚', '小明']
第3次座位为: ['小刚', '小明', '小红']
第4次座位为: ['小明', '小红', '小刚']
第5次座位为: ['小红', '小刚', '小明']
第6次座位为: ['小刚', '小明', '小红']
第7次座位为: ['小明', '小红', '小刚']
第8次座位为: ['小红', '小刚', '小明']
第9次座位为: ['小刚', '小明', '小红']
第10次座位为: ['小明', '小红', '小刚']
第11次座位为: ['小红', '小刚', '小明']
第12次座位为: ['小刚', '小明', '小红']
第13次座位为: ['小明', '小红', '小刚']
第14次座位为: ['小红', '小刚', '小明']
第15次座位为: ['小刚', '小明', '小红']
第16次座位为: ['小明', '小红', '小刚']
第17次座位为: ['小红', '小刚', '小明']
第18次座位为: ['小刚', '小明', '小红']
第19次座位为: ['小明', '小红', '小刚']
第20次座位为: ['小红', '小刚', '小明']

7.制作一个简易的账号密码登录系统

要求如下:

i.系统里面有多个用户,用户的信息目前保存在列表里面,账号密码一一对应

    users = ['root','westos']

    passwd = ['123','456']

ii.用户登陆(判断用户登陆是否成功)

    1).判断用户是否存在

    2).如果存在

        1).判断用户密码是否正确

        如果正确,登陆成功,推出循环

        如果密码不正确,重新登陆,总共有三次机会登陆

    3).如果用户不存在

重新登陆,总共有三次机会

这里我们整理一下思路,首先我们需要输入账号密码,判断他们是否是我们列表中的账号密码,同时账号密码要一一对应。

我的想法是运用index函数提取输入的密码在密码列表中的索引值,然后这个索引值作为账号列表的索引值,从而一步到位。

    if key == passwd[users.index(user)]:
        print('成功登录')

这里,我们需要有三次登录机会,我们将代码重复判断三次无疑是繁琐的,于是我将判断是否成功登录封装为函数作为第二、第三次登录的判断,从而有效的简洁代码。

users = ['root', 'westor']
passwd = ['123', '456']

def sign():
    user = input("输入你的账户:")
    key = input("输入你的密码:")
    if key == passwd[users.index(user)]:
        print('成功登录')
        return True
    else:
        return False

user = input("输入你的账户:")
key = input("输入你的密码:")
n = 0
while n < 2:
    if key == passwd[users.index(user)]:
        print('登录成功')
        break
    else:
        print('账户或密码出错')
        if sign():
            break
    n += 1

8.猜数字游戏

要求:

     1. 系统随机生成一个1~100的数字;

     2. 用户总共有5次猜数字的机会;

     3. 如果用户猜测的数字大于系统给出的数字,打印“too big”;

     4. 如果用户猜测的数字小于系统给出的数字,打印"too small";

     5. 如果用户猜测的数字等于系统给出的数字,打印"恭喜",并且退出循环;

  这题思路十分明确,系统让我们随机生成一个 1到100然后让我们猜数字,然后有五次机会

  我们可以运用random模块的randint来获取一个1到100的随机数

  通过for循环进行五次判断,如果判断成功便用break退出循环

import random

num = random.randint(1, 100)
for i in range(5):
    user = int(input('请输入一个一百以内的数字'))
    if user < num:
        print('too small')
    if user > num:
        print('too big')
    if user == num:
        print('恭喜')
        break

9.给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前>后没有空格。

比如: (1) “hello xiao mi”-> “mi xiao hello”

这里要我们将输入的字符串中的单词排序颠倒然后输出,这里我的第一反应是使用切片和切割

通过观察,我们可以看到我们可以通过“ ”这一空格进行切割,使用split函数,将这一串英文切割,将单词返回到列表中,如图:

['I', 'love', 'python']

我们使用切片[::-1]可以将其顺序颠倒,然后在通过遍历逐个放入一个空字符串中即可

temp1 = 'I love python'
list1 = temp1.split(' ')
list2 = list1[::-1]
temp2 = ''
for i in list2:
    temp2 = temp2 + i + ' '
print(temp2)

输出结果为:

python love I 

10.题目内容:你好,人们叫我'程序员' 这个世界的人都选择无视我 只有你看到了我并和我打招呼 我感到很孤单,很孤单 你愿意和我成为朋友吗?

请你把这段话按照下面的格式打印出来:
你好,人们叫我'程序员'
这个世界的人都选择无视我
只有你看到了我并和我打招呼
我感到很孤单,很孤单
你愿意和我成为朋友吗?

提示:本题需要运用三个知识点:换行,运用转义字符将单引号打印出来,打印函数

这题啊,一看就知道,简简单单,这题中的文本以空格隔开,我们用replace将空格替换成n即可实现换行,题目中需要我们用转义符将单引号转义,即是在单引号中加进行符号的转义。

简简单单没什么好说的

txt = '你好,人们叫我'程序员' 这个世界的人都选择无视我 只有你看到了我并和我打招呼 我感到很孤单,很孤单 你愿意和我成为朋友吗?'
print(txt.replace(' ','n'))

输出的结果为:

你好,人们叫我'程序员'
这个世界的人都选择无视我
只有你看到了我并和我打招呼
我感到很孤单,很孤单
你愿意和我成为朋友吗?

11.定义一个Person类,使用Person类,创建一个mayun对象后,添加company属性,值是"阿里巴巴";创建一个wangjianlin对象,添加company属性,值是"万达集团"

这题是需要我们定义一个person类,我们通过class创建类,然后创建对象并添加属性即可,这一部分只要是考察我们对面向对象的学习,只要去了解面向对象,进行学习就可以完成。

class Person:
    pass


mayun = Person()
mayun.company = "alibaba"

wangjianlin = Person()
wangjianlin.company = "wanda"

12.企业发放的奖金根据利润(I)的多少来提成:

低于或等于10万元时,奖金可提10%;

利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;

20万到40万之间时,高于20万元的部分,可提成5%;

40万到60万之间时高于40万元的部分,可提成3%;

60万到100万之间时,高于60万元的部分,可提成1.5%;

高于100万元时,超过100万元的部分按1%提成。

从键盘输入当月利润I,求应发放奖金总数?

这题的模型与交税款的模式差不多,在利润中的不同部分取不同百分比作为奖金,以下我提供两种写法:

一、不易理解,但是逻辑性强

I = float(input('输入利润(万元)'))
money = 0
mon = [10, 10, 20, 20, 40]
mp = [0.1, 0.075, 0.05, 0.03, 0.015, 0.01]
award1 = 0
num = 0
for i in range(len(mon)):
    money += mon[i]
    award = mon[i]*mp[i]
    award1 += award
    num += mon[i]
    if money > I > 10:
        all_award = award1 - award +(I-(num - mon[i]))*mp[i]
        break
    if I < 10:
        all_award = 0.1*I
        break
    if I > 100:
        all_award = award1 + (I -100)*0.01
        break
print(all_award,'万元')

二、容易理解,也是很多人能立刻想到的,但是显得繁杂并且代码中num的赋值繁琐

I = float(input('请输入当月利润,单位为万元:'))
if I <= 10:
    num = 10 * 0.1
elif 10 < I <= 20:
    bns = 10 * 0.1 + (I-10) * 0.075
elif 20 < I <= 40:
    num = 10 * 0.1 + 10 * 0.075 + (I-20) * 0.05
elif 40 < I <= 60:
    num = 10 * 0.1+ 10 * 0.075 + 20 * 0.05 + (I-40) * 0.03
elif 60 < I <= 100:
    num = 10 * 0.1+ 10 * 0.075 + 20 * 0.05 + 20 * 0.03 + (I-60) * 0.015
elif I > 100:
    num = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 20 * 0.03 + 40 * 0.015 + (I-100) * 0.015
print(num, '万元')

强烈建议理解第一种,对思维提升很大,反正我写的懵懵的,回过头还得好一会才理解自己写了啥。

13.有如下数字:

05 04 03
06 01 02
07 08 09

像这样扩展到最多包含前25个数字:

17 16 15 14 13
18 05 04 03 12
19 06 01 02 11
20 07 08 09 10
21 22 23 24 25

您可能会很容易注意到,第一层(也是最内层01)仅包含一个数字(),第二层-紧邻其周围-包含8个数字(02-09范围内的数字),依此类推。

您的任务是创建一个给定数字的layers(n)函数,该函数返回n在第几层

例子:

layers(1)  return 1
layers(5)  return 2
layers(25) return 3
layers(30) return 4
layers(50) return 5

这道题,看上去花里胡哨,其实这压根不难,仅仅小学奥数题难度

我们从题目可知第一层有1个数,前二层9个,前三层25个,根据一丢丢数学逻辑能力我们知道(层数x2-1)的平方就是那几层的数字个数了,同时也不难发现每一层最大的数字就是(层数x2-1)的平方。

我们可知任意数字都小于或等于他所在的那一层最大的数字,但是大于他所在的那一层的上一层的最大数字,我们从这里入手有:

0 <= (2*num2-1) ** 2 - num1 <= (2*num2-1) ** 2 - (2*num2-3) ** 2

我们通过循环,从第一层开始判断,逐渐提升层数,在符合条件时退出循环并且输出即可完成任务

def layers(num1):
    num2 = 1
    while True:
        if 0 <= (2*num2-1) ** 2 - num1 <= (2*num2-1) ** 2 - (2*num2-3) ** 2:
            print(num2)
            break
        else:
            num2 += 1
layers(66666)

这里我判断了66666所在的层数

输出的结果如下:

130

14.你的任务是,创建一个20行5列的二维数组,其取值范围是0—9(需为整数),在其所有的值中随机抽取20个位置进行修改,修改后的值为100。

建议做前先学习numpy模块

python本身是没有数组这个概念的,这里我们就需要引用numpy模块了,我们通过numpy模块创建二维数组,同时随机赋值,做法如下:

a = numpy.random.randint(0, 10, size=[20, 5])

题目中要求我们随机把20个位置的数更改成100,我第一反应是循环20次,进行随机更改,但是这便有个问题,可能会把同一个数更改两次。所以,我换了一种思路:在这个二维数组中,20行5列,即是有100个数。于是,我在100中,随机取20个数与这个二维数组的每一个位置一一对应,然后对这些数进行处理得到这些数的坐标,处理如下:

x1 = i // 5
x2 = i % 5

我们通过x1,x2作为索引值找到数组对应的位置进行修改,总代码如下:

import random
import numpy

a = numpy.random.randint(0, 10, size=[20, 5])
x = random.sample(range(100), 20)
for i in x:
    x1 = i // 5
    x2 = i % 5
    a[x1][x2] = 100
print(a)

15.A君目前在一家资产评估公司实习,他的工作日常就是跑遍市区里的住宅小区,调查小区的地址、建筑年份和每栋楼里每个单元里每一户的朝向和面积。比如一户的资料是:富安花园(小区)3栋 2单元 401户;朝向:南北朝向;面积:90平方。他需要把每一户的信息都记录下来。为了节省时间,通常他们会当场把一栋楼里所有单元的数据画在一张平面图里。等回去之后,再把平面图记录的数据,录入到excel表里。

举个例子,上面这张平面图表示的是这一栋有4个单元,每个单元有15层楼,其中1,2单元有两户,面积和朝向是140平方,南北朝向。3单元有四户,有2户面积60平方,南北朝向,2户面积80平方,东西朝向;4单元有四户,面积70平方,东西朝向。A君抱怨原本看房已经很累人了,录入更烦。可能你觉得用excel的自动填充功能不是很方便吗,事情远没有这么简单。确实,有一些重复的单元格只要填一次,自动下拉就可以复制粘贴,对于A君(excel菜鸟)来说,每次只要手动输入户室号就可以。(当然掌握一些excel技巧可以节省一些功夫)

不过,不同单元的户数、朝向和面积不完全是一样的,所以不能以一个单元的数据复制给其他单元,比如说,好不容易输入了1单元的数据,复制给了2单元,但因为3单元有4户,面积和朝向都不一样,所以3单元又得重新处理,户室号、面积、朝向都不一样。

我们的任务是用程序自动录入数据,甚至连excel都不用打开。在终端运行该程序后,打开excel对应的文件,就会发现数据是按一定的规律录入好的。(CSV格式)

这题我们首先得学习CSV模块

这里我强推这个Python 将数据写入CSV文件_lbj1260200629的博客-CSDN博客

我们在观察表格中可以发现,这里唯一的变化仅仅是户室,根据这里找规律得出结论,这里从201开始,每下一格便是轮流+1与+99,我们建立一个变量储存户室的值,通过循环不断改变户室的值并生成一行Excel表格从而达成任务,代码如下:

import csv

a = 201
f = open('户型.csv', 'w', encoding='utf-8', newline="")
csv_writer = csv.writer(f)
csv_writer.writerow(["小区名称", "地址", "建筑年份", "楼栋", "单元", "户型", "朝向", "面积"])
for i in range(10):
    for m in range(2):
        list1 = ['翻斗花园', "农院路66号", '2022年', '1栋', '1单元', a, '南北', 140]
        csv_writer.writerow(list1)
        a += 1
    a += 98

其中为何是+98,是因为在+99这个步骤中,在内嵌的循环里面进行了一次 a+=1,从而a并不需要+99,只需要+98就可以达到要求

16.你的任务是获取并输出知乎网页的源代码,最后保存为txt文本,链接为:https://www.zhihu.com/

这题的任务是爬虫,这是一个十分简单的爬虫,甚至没有任何反爬,只需要UI伪装即可

import requests
url = 'https://www.lagou.com/shenzhen-zhaopin/Java/'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                         'Chrome/95.0.4638.69 Safari/537.36'}
page_text = requests.get(url=url, headers=headers).text
with open('./text', 'w', encoding='utf-8') as fp:
    fp.write(page_text)

print(page_text)

17.使用正则表达式从下面内容获取所有jpg结尾的网页图片链接,如(这只是其中一个):
http://kr.shanghai-jiuxin.com/file/2021/1112/small95a18b4db31f407b3cd7c275d2eb7e36.jpg

王者荣耀妲己女仆咖啡带鱼屏壁纸查看:0次11-12
  • Windows 11 4k桌面壁纸查看:0次11-11
  • 微软win11 4k风景壁纸查看:0次11-11
  • 微软windows11风景4k壁纸查看:0次11-11
  • 这里要求我们用到正则表达式提取相关内容,我们通过简单的数据观察可以知道,每一个我们需要的内容都在target="_blank">
    import re
    url = '王者荣耀妲己女仆咖啡带鱼屏壁纸查看:0次11-12
  • Windows 11 4k桌面壁纸查看:0次11-11
  • 微软win11 4k风景壁纸查看:0次11-11
  • 微软windows11风景4k壁纸查看:0次11-11http://kr.shanghai-jiuxin.com/file/2021/1112/small95a18b4db31f407b3cd7c275d2eb7e36 http://kr.shanghai-jiuxin.com/file/2021/1111/small61c49fcdf69f916671dd183b6db267c5 http://kr.shanghai-jiuxin.com/file/2021/1111/small8a95f9c4ad7bf3c7bb72233739d5da78 http://kr.shanghai-jiuxin.com/file/2021/1111/small28c61714c3cd01ebbb53ef160c75b20d
  • 18.写一个程序:

    score = [23, 54, 65, 1, 0, 34, 67, 22]

    对上面的score用for循环的方法由小到大排序并输出,禁止用sort函数

    这道题的原意是让我们使用冒泡排序法(建议前往教程了解)

    代码如下

    score = [23, 54, 65, 1, 0, 34, 67, 22]
    for i in range(len(score)):
        for j in range(0, len(score) - i - 1):
            if score[j] > score[j + 1]:
                score[j], score[j + 1] = score[j + 1], score[j]
    print(score)

    但是!!!我发现了一个更加好理解的方法

    我们将列表中最小的那个数字,用min函数找出来,然后加到一个新的列表里面,并且把这个最小的数删除,以此循环,每次将最小的数字剔除直到完成排序

    score = [23, 54, 65, 1, 0, 34, 67, 22]
    list1 = []
    for i in range(len(score)):
        list1.append(min(score))
        score.remove(min(score))
    print(list1)

    19.定义一个汽车类,并在类中定义一个move方法,然后分别创建BMW_X9、AUDI_A9对象,并添加颜色、马力、型号等属性,然后分别打印出属性值、调用move方法(move方法调用后则输出--汽车开始跑了--)

    这题便是考察如何建立类,方法,对象和属性了,没啥好说的,我放下代码便得:

    class Car:
        def __init__(self, color, horsepower, model):
            self.horsepower = horsepower
            self.model = model
            self.color = color
        def move(self):
            print(f"{self.color}的{self.model}以{self.horsepower}飞过来了")
    BMW_X9 = Car('蓝色', '123456码', 'BMW_X9')
    AUDI_A9 = Car('黑色', '666666码', 'AUDI_A9')
    BMW_X9.move()
    AUDI_A9.move()

    20.小欧想在学校中请一些同学一起做一项问卷调查,为了实验的客观性他先用计算机生成了N个1~1000之间的随机整数(N<=1000),N是用户输入的,对于其中重复的数字,只保留一个,把其余相同的数字去掉,不同的数对应着不同的学生的号,然后再把这些数从小到大排序,按照排好的顺序去找同学做调查,请你协助小欧完成“去重”与“排序”工作

    这里我们有几个任务:

            输入N

            生成N个随机数

            把生成的N个数字中进行去重

    这里,我们可以通过input输入N,通过random模块的randint来生成随机数,用集合的性质来去重,代码如下:

    import random
    
    set1 = set()
    N = int(input())
    for i in range(N):
        num = random.randint(1, 1001)
        set1.add(num)
    set2 = sorted(set1)
    print(set2)

    21.写一个程序,假定小欧生日为2002年12月1日,将其生日作为定值,以今天2021年11月14日为例,作为输入,则输出小欧今年18周岁了!,若以2021年12月1日为例,作为输入,则输出小欧刚好19周岁。可以去农院路庆祝了!以2004年10月15为例,则输出小欧今年1周岁了!

    这题他是已经给定了我们一个时间,我们需要自行输入一个时间,然后计算出这两个时间的差值并以去尾的方式输出这个差值,这里我们输入时间的方式是:xxxx年xx月xx日,我们为了计算,可以通过replace函数和split函数配合,将年月日这三个中文替换,并且在这个位置进行切割做法如下:

    bir1 = bir.replace('年', ',').replace('月', ',').replace('日', '')#将年月日三字去掉,并以逗号隔开年月日
    bir2 = bir1.split(',')#将年月日分别放入列表中,并按年月日排序

    然后切割后得到的是一个[年,月,日]的形式的列表,我们通过这个年月日与之前给定的日期相减,并且将月,日换算成年这一单位即可。

    bir = str(input())#输入年月日
    bir1 = bir.replace('年', ',').replace('月', ',').replace('日', '')#将年月日三字去掉,并以逗号隔开年月日
    bir2 = bir1.split(',')#将年月日分别放入列表中,并按年月日排序
    a = 2002
    b = 12
    c = 1#将已经确定的日期,分别以abc赋值年月日
    years = (((int(bir2[0]) -a )+(int(bir2[1]) - b)/12 +(int(bir2[2])-c)/365))//1#分别计算出年月日与输入日期的差别并且统一为年这个单位并且向下取整
    print(f'小杰今年{years}周岁了')

    22.爬取拉勾网关于Java的职位并将其转为CSV格式

    这题需要我们注意的有

            1.如何爬取完一页又切换至下一页

            2.如何处理数据

    首先,我们可以通过观察url,第一页与第二页的区别在于url中的1和2,以这个规律我们只需要在每次循环中页码对应的值加一即可,在循环的最后到了页数的尽头,随着报错即意味着我们爬取完毕。

    处理数据的问题我用了两种方法分别进行尝试分别是正则表达式和xpath

    正则表达式:

    import requests
    import re
    import csv
    if __name__ == "__main__":
        header = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'}
        f = open('o.csv', 'w', encoding='utf-8', newline="")
        csv_writer = csv.writer(f)
        csv_writer.writerow(["name", "money", "address", "experience", "company", "industry"])
        n = 1
        while True:
            url = f'https://www.lagou.com/wn/jobs?kd=Java&pn={n}'
            page_text = requests.get(url=url, headers=header).text
            ex1 = '(.*?)'  # name and address
            list1 = re.findall(ex1, page_text, re.S)
            list2 = [i.split('') for i in list1]
            list_n = []
            list_a = []
            for j in list2:
                list_n.append(j[0])  # name
                list_a.append(j[1])  # address
            ex2 = '(.*?)' #sarary
            list3 = re.findall(ex2, page_text, re.S)
            ex3 = '.*?(.*?)' #experience
            list4 = re.findall(ex3, page_text, re.S)
            ex4 = '.*?(.*?)' #company
            list5 = re.findall(ex4, page_text, re.S)
            ex5 = '(.*?)' #industry
            list6 = re.findall(ex5, page_text, re.S)
            for k in range(len(list3)):
                csv_writer.writerow([list_n[k], list3[k], list_a[k], list4[k], list5[k], list6[k]])

    xpath:

    import requests
    import csv
    from lxml import etree
    
    f = open('职业.csv', 'w', encoding='utf-8', newline="")
    csv_writer = csv.writer(f)
    list0 = ['工作', '地点', '公司', '工资', '要求', '补充']
    csv_writer.writerow(list0)
    n = 1
    while True:
        url = f'https://www.lagou.com/wn/jobs?kd=Java&city=%E6%B7%B1%E5%9C%B3&pn={n}'
        cookie = {'cookie':'RECOMMEND_TIP=true; user_trace_token=20211122000852-14b360f5-5a8f-4359-aac5-4304dcc00c35; LGUID=20211122000852-005c8aea-72e8-4370-a960-cba9e1a43518; _ga=GA1.2.961423054.1637510993; _gid=GA1.2.1637177660.1637510993; __lg_stoken__=5c5efbd39a9f3064625278971f1c8706b4907ecca606db0b3991a9e06cf6d6deeeed3f92a1344d561324ac315ec2d78d5793caa01094712e1a72bd00f9cf8dd9058777ed8083; JSESSIonID=ABAAAECABIEACCAFEF3ACD546D7F610141580641C4DE095; WEBTJ-ID=20211122125957-17d4603db71a6e-086ec99c421dc7-978183a-1327104-17d4603db731051; sensorsdata2015session=%7B%7D; Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1637510993,1637557198; X_MIDDLE_TOKEN=03cdce33d58439b4b144252f4934b27a; LG_HAS_LOGIN=1; hasDeliver=0; privacyPolicyPopup=false; showExpriedIndex=1; showExpriedCompanyHome=1; showExpriedMyPublish=1; __SAFETY_CLOSE_TIME__23139559=1; index_location_city=%E5%85%A8%E5%9B%BD; gate_login_token=66304c52e8459a63b1ebacb075c957e241a61ae525770fddbea3d7fa8d464abb; LG_LOGIN_USER_ID=f54c78249219d7a962839b01843fa8f83c9a45c66d2129cabf8ceca3c635cc48; _putrc=D765D3AB6C13BCDD123F89F2B170EADC; login=true; unick=%E7%94%A8%E6%88%B70046; TG-TRACK-CODE=jobs_code; PRE_UTM=; PRE_HOST=; PRE_LAND=https%3A%2F%2Fwww.lagou.com%2Fzhaopin%2FJava%2F%3FlabelWords%3Dlabel; LGSID=20211123194240-ee4914ae-a5e0-4b31-967a-9c4fe6210f34; PRE_SITE=; _gat=1; SEARCH_ID=e08ae935a8a640c2968a962ac4cc7746; X_HTTP_TOKEN=92de061c76fc4105587766736136d0b70811362a5d; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1637667847; LGRID=20211123194305-8666e237-0227-4fd8-b4f2-cd33ce3b16eb; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2223139559%22%2C%22first_id%22%3A%2217d4342d431c8-0f8b05834d8f89-978183a-1327104-17d4342d4321277%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%2C%22%24os%22%3A%22Windows%22%2C%22%24browser%22%3A%22Chrome%22%2C%22%24browser_version%22%3A%2296.0.4664.45%22%2C%22lagou_company_id%22%3A%22%22%7D%2C%22%24device_id%22%3A%2217d4342d431c8-0f8b05834d8f89-978183a-1327104-17d4342d4321277%22%7D'}
        header = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36',
            'referer': 'https://www.lagou.com/wn/jobs?kd=Java&city=%E5%85%A8%E5%9B%BD',
            'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
        }
        page_text = requests.get(url=url, headers=header, cookies=cookie).text
        tree = etree.HTML(page_text)
        list_xpath =tree.xpath('//div/div/div/div/div/div/div/div/div/div/a/text()')
        list2_xpath =tree.xpath('//div/div/div/div/div/div/div/div/div/div/div/span/text()')
        list3_xpath =tree.xpath('//div/div/div/div/div/div/div/div/div/div/div/text()')
        list3 = list3_xpath[14::2]
        list4 = list3_xpath[15::2]
        list2 = list2_xpath[1::2]
        for m in range(len(list2)):
            while list_xpath != []:
                list1 = []
                for i in range(3):
                    list1.append(list_xpath[0])
                    list_xpath.pop(0)
                list1.append(list2[m])
                list1.append(list3[m])
                list1.append(list4[m])
                csv_writer.writerow(list1)
        print(f"第{n}页爬取成功")
        n += 1

    值得注意的是xpath中

        list3 = list3_xpath[14::2]
        list4 = list3_xpath[15::2]
        list2 = list2_xpath[1::2]

    这里是因为使用xpath定位的标签中,我们需要的内容从14/15个才开始出现,并且重复出现两次,因此有了以上处理。

    以上22题便是我初学一个多月以来所做的题目,总结over。

    转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/618565.html

    Python相关栏目本月热门文章

    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号