统计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)
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,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']
调用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)
给定一个整数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))
判断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]
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
输一个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']
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}
输入一个正整数数组,把数组里所有数字拼接起来排成一个数。打印能拼接出的所有数字中最大的一个?
"""
解题思路:
先做冒泡排序,使序列从小到大排序
然后使用列表的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