Python编程题自用(一)

  1. 统计python源代码文件中,代码行数,去除注释,空行,进行输出?

"""

解题思路:

  • 打开文件并读取文件,readlines()方法一次性读取整个文件,并自动将内容分析成一个行的列表,循环一行一行读取判断

  • 切除空格.strip方法,判断注释.startswith('#')

  • read() 读取整个文件,并将整个文件放入一个字符串变量中

  • readline() 每次读取一行,返回一个字符串对象并保留当前行的内存

  • readlines() 读取整个文件,并将整个文件按行解析成列表

"""


with open('./demo.py', 'r', encoding='UTF-8') as f:
    res = f.readlines()
count_line = 0
for line in res:
    if len(line.strip()) != 0 and not line.startswith('#'):
        count_line += 1
        print(line)
print(count_line)
  1. python调用cmd并返回结果

"""

解题思路:

  • popen函数,主要用来执行linux命令(这种调用方式是通过管道的方式来实现,函数返回一个file-like的对象)

  • 格式: os.popen(‘ipconfig’,‘r’)

  • os.system 是无法获取返回值的

  • OS.popen 带返回值的。使用.read()读取

"""


import os

cmd = os.popen('ipconfig', 'r').read()  # 'r' 消除转义符带来的影响,即'\'
print('读取cmd执行结果为:\n' + cmd)
  1. 求1,2,3,4这4个数,能组成多少个互不相同且无重复的三位数,都是多少?

nums = []
for i in range(1, 5):
    for j in range(1, 5):
        for k in range(1, 5):
            if (i != k) and (i != j) and (k != j):
                n = f'{i}' + f'{j}' + f'{k}'
                nums.append(n)
print(f'一共可以组成{len(nums)}个无重复三位数,分别是:\n', nums)

输出:
一共可以组成24个无重复三位数,分别是:
 ['123', '124', '132', '134', '142', '143', '213', '214', '231', '234', '241', '243', '312', '314', '321', '324', '341', '342', '412', '413', '421', '423', '431', '432']
  1. 调用python打印出10000以内的对称数(回文数)(对称数(回文数)特点:数字左右对称,如:1,2,11,121,1221等)

"""
解题思路:
1、回文数(对称数),利用字符串反转,判断反转前后是否相等[::-1]
2、使用for循环 : 找出5位数中所有的回文数
"""
lis = []
for i in range(1, 10000):
    i = str(i)
    # if i == i[::-1]:  #str[::-1]直接反转字符串
        lis.append(i)
        print(f"10000以内的回文数(对称数)是{i}")
print(len(lis))

# 使用for循环 : 找出5位数中所有的回文数
for n in range(10000, 100000):
    n = str(n)
    if n[0] == n[-1] and n[1] == n[-2]:
        print(n)
  1. 给定一个整数N,和一个0-9的数K,要求返回0~N中数字K出现的次数

"""

解题思路:

  • 遍历循环0-N之间的数

  • 出现一次K,计数器+1

  • 需要将这个数的个十百千位上都遍历一遍和要找的数字进行对比

  • 采用取余取模的方式

"""



def countK(n, k):
    count = 0
    for i in range(0, n + 1):
        if i == 0 and k == 0:
            count += 1
        while i > 0:
            j = i % 10 # 取模 - 返回除法的余数
            # 按照个十百千位上都遍历一遍
            i = i // 10 # 取整除 - 返回商的整数部分(向下取整)
            if j == k:
                count += 1
    return count


print(countK(20,8))
  1. 判断101-200之间有多少个素数,并输出所有素数(质数)?

"""

解题思路:

  • 循环遍历101-200之间的数。

  • 然后用101-200之间的数去整除2到该数前面的一个数(例如是113,则用113整除2~112之间的数)

  • 只要整除不等于0,就是素数

"""


newList = []
for i in range(101, 200):
    for j in range(2, i):  # 遍历因子数
        if i % j == 0:
            break
    else:
        newList.append(i)
print(newList)

输出:
[101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199]
  1. excel文件中,把某个英文替换成数字?

"""

解题思路:

  • 引入pandas,读取文件

  • 使用loc索引器,选取行列组合

  • df1['列名'] = df1['列名'].astype('int') # 强制修改格式

"""


import pandas as pd

# 读取excel
df1 = pd.read_excel(r"E:/python.xlsx", sheet_name="Sheet1", header=0)
# 提取一个营业额列,一个列就是一个Series
print(df1.head(2))
df1.loc[0,'营业额'] = '11111' #修改第0行 营业额列的值
print(df1.head(2))

输出:
      年    月     公司       营业额
0  2018  Jan  10104     aaaaa
1  2018  Jan  10105  14211.79
      年    月     公司       营业额
0  2018  Jan  10104     11111
1  2018  Jan  10105  14211.79
  1. 输一个IP地址,然后拼出它C段 ?

"""

解题思路:

  • 字符串切割拼接新字符串192.168.1.1~192.168.1.1.255

  • 截取前3位 拼接+循环1-256

"""



# 使用 str.split() 切割字符串,切片,生成列表
# " ".join(list) 列表拼接字符串
def c_ip(ip):
    # ip = "192.168.2.5"
    for i in range(1, 256):
        i = str(i)
        str_ip = ip.split('.')[0:3]  # 字符串切割取前3位相同数字
        str_ip.append(i)
        cip = ".".join(str_ip)
        print(cip)

print(c_ip("192.168.1.5"))

输出:
192.168.1.1
192.168.1.2
......
192.168.1.253
192.168.1.254
192.168.1.255


# 使用字符串的 rfind() 方法可以查找指定字符串的最后一次出现的位置
def get_ips(ip):
    iplist = []
    ips_str = ip[:ip.rfind('.')] 
    # print(ips_str)
    for ips in range(1, 256):
        ipadd = ips_str + '.' + str(ips)
        iplist.append(ipadd)
    return iplist

print(get_ips("115.114.0.2"))

输出:
['115.114.0.1', '115.114.0.2', '......','115.114.0.254', '115.114.0.255']
  1. python统计字符串每个字母出现的次数

str = "abcabcefg"
d = {}
for i in str:
    count = str.count(i)
    d[i] = count
print(d)

输出:
{'a': 2, 'b': 2, 'c': 2, 'e': 1, 'f': 1, 'g': 1}
  1. 输入一个正整数数组,把数组里所有数字拼接起来排成一个数。打印能拼接出的所有数字中最大的一个?

"""

解题思路:

  • 先做冒泡排序,使序列从小到大排序

  • 然后使用列表的reverse()方法,做逆序排列,使整个列表从大到小排序,结果直接体现在原来的列表里面

  • 对列表做join拼接处理,此时注意,list里面是int,需要遍历把数字全部转化为字符串

  • join(以指定的字符连接生成一个新的字符串)

"""



def num(lis):
    for i in range(len(lis) - 1):
        for j in range(len(lis) - i - 1):
            if lis[j] > lis[j + 1]:
                lis[j], lis[j + 1] = lis[j + 1], lis[j]
    return lis

lis = [55, 33, 2, 88]
lis1 = num(lis)
lis1.reverse() # 倒叙直接作用在原字符串
print(lis1)
res = "".join("%s" % id for id in lis1)  # 遍历list,把list里面的数字全部转化为字符串
print(f"拼接出的所有数字中最大的一个是 :{res}")

输出:
[88, 55, 33, 2]
拼接出的所有数字中最大的一个是 :8855332
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值