python习题一

1.26个字母大小写成对打印,例如:Aa,Bb......

方法1:

for i in range(26):
  print(chr(65+i)+chr(97+i))

方法2:

for i in range(26):
  print(chr(ord("A")+i),chr(ord("a")+i))

2.一个list包含10个数字,然后生成一个新的list,要求新的list里面的数都比之前的数多1

s = list(range(10))
list = []
for i in s:
  list.append(i+1)
print(list)

3.倒序取出每个单词的第一个字母,例如:I am a good boy!

方法1:

s = "I am a good boy!"
s = s.split()
s.reverse()
result = []
for i in s:
  result.append(i[0])
print(result)

方法2:

a = "I AM A BOY"
result = []
for i in a.split()[::-1]:
  result.append(i[0])
print(result)

4.输入一个自己的生日月份,用if和else判断一下当月是不是你的生日月

import time
month = input("send a month: ")
current_time = time.strftime('%Y-%m-%d',time.localtime(time.time()))
#print(type(current_time.split("-")[1]))
#print(current_time.split("-")[1])
if abs(int(current_time.split("-")[1])) == int(month):
  print("This month is mybirthday!")
else:
  print("This month is not mybirthday!")

5.输入3个字母:e、a、r,如果输入e,那么退出循环,如果输入a,执行continue,如果输入r,那么再读取一次字母,并打印,用死循环实现。

while 1:
letter = input("send a letter:")
if letter == 'r':
letter = input("send a letter:")
elif letter == 'e':
break
elif letter == 'a':
continue

6.输入3个字母:e、a、r,如果输入e,那么退出循环,如果输入a,执行continue,如果输入r,那么再读取一次字母,并打印,只允许输入三次字母,重复输入的字母不算在内。

count = 0
for i in range(3):
letter = input("send a letter%d:"%i)
if letter == 'e':
break
elif letter == 'a':
continue
elif letter == 'r':
count += 1
if count == 2:
input("send a letter dddd:")
P.S感觉这道题目可能有问题,哈哈。。。

7.把一个字符串"abcdefg"插入到一个list中,每个字母占一个list中的元素位置,例如:["a","b",
"c","d","e","f","g"]

s = "abcdefg"
lists = []
for i in s:
  lists.append(i)
  print(lists)
#反思
a = ["a","b","c","d","e","f","g"]
print("".join(a))

8.['a','b','c','d','e','f','g']操作这个list,拼出一个字符串"adg"

s = ['a','b','c','d','e','f','g']
print("".join(s[::3]))

9.做一个小图书馆程序,图书馆的书放到一个list里保存,使用add命令:添加一本书,使用lend命令:减去一本书,如果不存在,要提示一下,使用getall命令:可以查询所有没有借出去的书,然后退出程序。

library = []
while 1:
  command = input("your command and book name is: ")
  command = command.strip()
  if "add" in command:
    library.append(command.split(" ")[1])
    print("add book complete!")
  elif "lend" in command:
    if command.split(" ")[1] in library:
      library.remove(command.split(" ")[1])
      print("lend book complete!")
    else:
      print("The book your lend doesn't exist!")
      continue
  elif "getall" in command:
    if len(library) >= 1:
      for book in library:
        print(book)
    else:
      print("No book in the library!")
  elif "." == command:
    print("Wrong!")
  else:
    print("Bye!")
    break

10.写一个函数,统计一下一句话中的数字个数。例如:I am a 19 years old boy!666!

a = "I am a 19 years old boy!666!"
def total_num(s):
  if not isinstance(s,str):
    print("is not str!")
  return 0
  result = 0
  for i in s:
    if i in "1234567890":
      result += 1
  return result

print(total_num(a))

P.S: 数字也可以用string.digits表示,但是要import string

11.写一个函数,使用可变参数*arg,计算函数所有参数之和。

def sum(*arg):
  sum = 0
  for i in arg:
    sum += i
  return sum

print(sum(1,5,7,8,8))

12.写一个函数,使用可变参数**kw,输出的key、value。

def key_value(**kw):
  for k,v in kw.items():
  print(k,":",v)

print(key_value(a=2,b=3,c=5))

13.使用**kw,把可变的所有参数算一个乘积。

def key_value(**kw):
  sum = 1
  for v in kw.values():
    sum *= v
  print(sum)

key_value(a=4,b=5,c=5)

14.同时使用*arg和**kw,算一下字母的长度之和,注意所有参与数均使用字符串,字符串都是字母。

def total(*arg,**kw):
    sum = ""
    for i in arg:
        sum += i
    for i in kw.values():
        sum += i
    print(len(sum))


total("a","b","c",b="a",d="c")

15.统计一下一共出现了多少个单词,每个英文单词出现的次数。例如:I am a boy.I am a good man.

s = "I am a boy.I am a good man."
s = s.replace("."," ")
s = s.split(" ")
s = s[:-1]
num = {}
for i in s:
  count = s.count(i)
  num[i] = count


print(num)

16.判断1-127阿斯克码里都是什么字符。

while 1:
  number = input("send a num: ")
  number = int(number)
  if number >=1 and num <= 127:
    ascii = chr(number)
    print(ascii)
  else:
    print("Not in 1-127!")
    break

17.输入a、b、c、d,四个整数,计算a+b-c*d的结果。

while 1:
  a = input("send a is: ")
  b = input("send b is: ")
  c = input("send c is: ")
  d = input("send d is: ")
  if a and b and c and d:
    int_a = int(a)
    int_b = int(b)
    int_c = int(c)
    int_d = int(d)
    result = int_a+int_b-int_c*int_d
    print(result)
  else:
    print("Bye!")
    break

18.3个人在餐厅吃饭,想分摊饭费。总共花费35.27美元,他们还想给15%的小费,每个人该怎么付钱。

per_fee = round((35.27+35.27*0.15)/3.2)

19.初始化一个车里有多少升油,调用run方法,实现车的运行,没有的时候提示:需要加油。跑一次里程数需要加100公里,汽油减少20.调用add_gas方法可以实现加油,让车继续运行,check_distance方法查看车跑的里程数。

class car():
    def __init__(self,gas_volume,gas_valume_num,distance):
        self.gas_volume = gas_volume
        self.gas_valume_num = gas_valume_num
        self.distance = distance

    def run(self):
        if self.gas_volume > = self.gas_valume_num:
            self.distance += 100
            self.gas_volume -= 20
       else:
            print("need to add gas!")


    def add_gas(self,n):
        self.gas_volume += n

    def check_distance(self):
        return self.distance

    def check_gas(self):
        return self.gas_volume

c = car(100,20,0)
for i in range(3):
    c.run()
    print("check gas is :",c.check_gas())
print("check distance is :",c.check_distance())
c.add_gas(100)
print("check gas is :",c.check_gas())

20.统计一下,当前目录下的文件数量总和。

import os
file_count = 0
dir_count = 0
for i in os.listdir("e:\"):
    if os.path.isdir(i):
        dir_count += 1
    else:
        file_count += 1

print(file_count)

print(dir_count)

21.程序建立一个10级的目录pic1到pic10。

import os
os.makedirs("e:\pic")
os.chdir("e:\pic")
for i in range(1,11):
    os.mkdir("pic"+str(i))
    os.chdir("pic"+str(i))

22.写一个函数,统计一下字母个数。例如:I am a 19 years old boy!666!

s = "I am a 19 years old boy!666!"

def letter_nums(s):
  list = []
  for i in s:

    if i >= chr(65) and i <= chr(90) or i >= chr(97) and i <= chr(122):
      list.append(i)
  print(len(list))


letter_nums(s)

23.写一个函数,统计一下字母和数字个数。例如:I am a 19 years old boy!666!

s = "I am a 19 years old boy!666!"

def letter_nums(s):
  dict = {}
  count = 0
  for i in s:

    if i >= chr(65) and i <= chr(90) or i >= chr(97) and i <= chr(122):
      dict[i] = s.count(i)
    elif i >= chr(48) and i <= chr(57):
      dict[i] = s.count(i)
  print(dict)

letter_nums(s)

24.写一个函数,统计一下非字母和非数字个数。例如:I am a 19 years old boy!666!

s = "I am a 19 years old boy!666!"
import string
def letter_nums(s):
  list = []
  for i in s:
    if i not in string.ascii_letters and i not in string.digits:
      list.append(i)
  print(len(list))
  print(list)

letter_nums(s)

25.随机生成10位密码,包含数字和字母

方法1:

import random
import string
password = ""
mi = string.ascii_letters+string.digits
for i in range(10):
    password += random.choice(mi)

print(password)

方法2:

import random
import string
password = []
mi = string.ascii_letters+string.digits

for i in range(10):
    password += mi[random.randint(1,len(mi))]

print("".join(password))

方法3:

import random
import string
password = []
for i in range(10):
    if random.randint(0,1):
        letter = random.choice(string.ascii_letters)
    else:
        letter = random.choice(string.digits)
    password.append(letter)

print("".join(password))

方法4:(三目运算)

import string
import random
"".join([random.choice(string.ascii_letters) if random.randint(0,1) else random.choice(string.digits) for i in range(10)])

26.一个数可以被2和5整除就打印。

import random

while 1:
    num = random.randint(1,100)
    if num % 2 == 0 and num % 5 == 0:
        print("this num is %d!"%num)
        break
    else:
        continue

27.[1,2,3,4]用for循环求和。

方法1:

s = [1,2,3,4]
sum = 0
for i in range(len(s)):
    sum += s[i]

print(sum)

方法2:

sum = 0
for i in [1,2,3,4]:
    sum += i

print(sum)

28.[1,2,3,4,5,6,7]输入一个数字,判断是否在list中,执行3此这个逻辑。

for i in range(3):
    num = input("send a num: ")
    if int(num) in [1,2,3,4,5,6,7]:
        print("%s in the list!"%int(num))
    else:
        print("%s not in the list!"%int(num))

29.输入一个数,判断是奇数还是偶数,当输入的数字是100时结束。

while 1:
    num = input("send a num: ")
    if int(num) == 100:
        break
   elif int(num) %2 == 0:
      print("this %d is oushu!"%int(num))
   else:
        print("this %d is jishu!"%int(num))

30.随机生成10个小写字母

方法1:

import random
import string
list = []
for i in range(10):
    letter = random.choice(string.ascii_lowercase)
    list.append(letter)
print("".join(list))

方法2:

import random
list = ""
for i in range(10):
    letter = random.randint(ord("a"),ord("z"))
    list += chr(letter)
print(list,end ="")

方法3:

import random
list = []
for i in range(10):
    letter = random.randint(ord("a"),ord("z"))
    list.append(chr(letter))
print("".join(list))

31.随机生成10个大写字母

方法1:

import random
import string
list = []
for i in range(10):
    letter = random.choice(string.ascii_uppercase)
    list.append(letter)
print("".join(list))

方法2:

import random
list = ""
for i in range(10):
    letter = random.randint(ord("A"),ord("Z"))
    list += chr(letter)
print(list,end ="")

方法3:

import random
list = []
for i in range(10):
    letter = random.randint(ord("A"),ord("Z"))
    list.append(chr(letter))
print("".join(list))

32.随机生成5个小写,5个大写字母

方法1:

import random
import string
list = []
for i in range(5):
    letter = random.choice(string.ascii_uppercase)
    list.append(letter)
for i in range(5):
    letter = random.choice(string.ascii_lowercase)
    list.append(letter)
print("".join(list))

方法2:

import random
list = []
for i in range(5):
    letter = random.randint(ord("A"),ord("Z"))
    list.append(chr(letter))
for i in range(5):
    letter = random.randint(ord("a"),ord("z"))
    list.append(chr(letter))
print("".join(list))

33.生成随机不限定大小写个数的10个字母

方法1:

import random
import string
list = []
for i in range(10):
    letter = random.choice(string.ascii_letters)
    list.append(letter)
print("".join(list))

方法2:

import random
list = ""
lower_letter_num = random.randint(1,9)
upper_letter_num = 10-lower_letter_num
for i in range(lower_letter_num):
    list += chr(ord("a")+random.randint(1,25))
for i in range(upper_letter_num):
    list += chr(ord("A")+random.randint(1,25))
print(list)

方法3:

import random
import string
"".join([random.choice(list(string.ascii_letters)) for i in range(10)])

方法4:

import random
result = ""
for i in range(5):
    result += chr(ord("a")+random.randint(1,25))+chr(ord("A")+random.randint(1,25))
print(result)

34.写一个程序,找到id不一样的那个数,从1开始遍历后面的数,找到第一个不一样的数

方法1:

num = 1

for i in range(1,1000):

    if id(i) == id(num):

        num += 1

    else:

        print(i)

        break

方法2:

num =  1

for i in range(1,1000):

    if id(i) != id(num)"

        print(i)

        break

    num += 1

35.s= "gssdgsfbooksdfsdfs" 取出“book”

s[7:11]

36.求全部元素的和[1,2,1,2,3,3,3,3]

s = [1,2,1,2,3,3,3,3]

sum = 0

for i in s:

    sum += i

print(sum)

37.求全部偶数的和[1,2,1,2,3,3,3,3]

s = [1,2,1,2,3,3,3,3]

sum = 0

for i in s[::2]:

    sum += i

print(sum)

    

38.统计个数字出现的个数[1,2,1,2,3,3,3,3]

s = [1,2,1,2,3,3,3,3]

num = {}

for i in s:

    num[i] = s.count(i)

print(num)

39.算出一个bc字母的ascii码之和

print(ord("b")+ord("c"))

40.算出a-z字母的ascii码之和

sum = 0

for i in range(ord("a"),ord("z")+1):

    sum += i

print(sum)

41.算出a的后面2,4,6,8,10之后的字母是什么

方法1:

for i in range(ord("a")+2,ord("a")+11,2):

    print(chr(i))

方法2:

for i in range(2,12,2):

    print(chr(ord("a")+i))

42.把a-z逆序输出

str = ""

for i in range(ord("a"),ord("z")+1):

    str += chr(i)

print(str[::-1])

43.判断一个年是否是闰年(能被4整出并且不能被100整除,或者可以被400整除)

while 1:
    year = input("send a year: ")
    if int(year) % 4 == 0 and int(year) % 100 != 0 or int(year) % 400 ==0:
        print("this year %d is runnian"%int(year))
    else:
        print("this year %d is not runnian"%int(year))

        break

44.输出1000以内的能被2,3,5同时整除的数

for i in range(1,1001):
    if i % 2 == 0 and i % 3 == 0 and i % 5 == 0:
        print(i)

45.输出1000以内能被2,3,5任意一个整除的数,每10个数为一行

count = 0

for i in range(1,1001):

    if i % 2 == 0 or  i % 3 == 0 or  i % 5 == 0:

        print(i,end = "  ")

        count += 1

        if count % 10 == 0:

            print()

备注:end = " "是不换行

46.找出列表中最大的值 a = [2,3,56,6,8,7]

a = [2,4,5,6,6,7]
max = a[0]
for i in a:
    if i > max:
    max = i

print(max)

47.找出最大的2个数a = [2,3,56,6,8,5,7,66]

a = [2,3,56,6,8,5,7,66]
max = a[0]
max_l = a[1]
for i in a:
    if i > max:
        max = i
    for j in a[1:]:
        if j != max and j > max_l:
            max_l = j
print(max,max_l)

48.二进制1010,算出他的十进制数  (如:1*2^3+0*2^2+1*2^1+0*2^0)

a = "1010"
sum = 0
for i in range(len(a)):
    print(i)
    sum += int(a[i])*2**(len(a)-1-i)
print(sum)

49.a=10,10一直除2,一直到商为0为止,输出商。

a = 10

while a != 0:

    a = a//2

    print(a)

50.猜拳,输出一个数,比大小,猜对退出

import random
while 1:
     num = input("send a num: ")
     if int(num) > random.randint(1,3):
        print("it is big!")
     elif int(num) < random.randint(1,3):
        print("it is small!")
    elif int(num) == random.randint(1,3):
        print("you win!")
        break

51.随机生成一个数,如果是3就退出

方法1:

 import random
 while 1:
    num = random.randint(1,10)
    print(num)
    if num == 3:
        print("wow 333")
        break

方法2:

import random

a = 1

while a != 3:

    a = random.randint(1,10)

    print(a)

52.统计字符串里有几个数字  s = "1b3m5m6m7m77k8"

方法1:

s = "1b3m5m6m7m77k8"
num = 0
for i in s:
    if i in "0123456789":
    num += 1
print(num)

方法2:

import string
s = "1b3m5m6m7m77k8"
num = 0
for i in s:
    if i in string.digits:
    num += 1
print(num)

方法3:

import string
s = "1b3m5m6m7m77k8"
num = 0
for i in s:
    if i not in string.ascii_letters:
    num += 1
print(num)

53.把add(1,2,3,4,5)函数中所有的值求和并返回。用*c ,**f

方法1:*c

def add(a,b*c):
    sum = 0
     for i in c:
        sum += i
    return sum+a+b

方法2:**f

def add(a,b,**f):

    sum = 0

    for i in f.values():

        sum += i

    return a+b+sum

54."llllllllllooove"里有多少个l

a = "llllllllllooove"
count = a.count("l")
print(count)

55.“i am a boy. i am a girl" 把空格和 去掉

方法1:

a = "i am a boy. i am a girl"
a = a.split()
print("".join(a))

方法2:

a = "i am a boy. i am a girl"

new = ""

for i in a:

    if a != " " or a != " ":

        new += i

print(new)

56.“i am a boy"不包含a的单词有哪些

a = "i am a boy"
w = []
for i in a.split():
    if "a" not in i:
    w.append(i)
print(w)

57.“i am a boy"偶数位置字母后加*

分析1:

>>> s = "i am a boy"
>>> ss = []
>>> for i in s:
... ss.append(i)
...
>>> ss
['i', ' ', 'a', 'm', ' ', 'a', ' ', 'b', 'o', 'y']

分析2:

>>> s = "i am a boy"
>>> bb = ""
>>> for i in range(len(s)):
... if i % 2 == 0:
... bb += s[i]+"*"
...
>>> bb
'i*a* * *o*'

解题:

s = "i am a boy"
ss = ""
for i in range(len(s)):
    if i % 2 == 0:
        if (s[i] >= "a" and s[i] <= "z") or (s[i] >= "A" and s[i] <= "Z"):
            ss += s[i]+"*"

print(ss)

58."abdfgh"第一个字母和最后一个字母拼接

a = "abdfgh"

print(a[:1:1]+a[:-2:-1])

print(a[:1]+a[-1])

print(a[0]+a[-1])

print(a[::5])

59."abdfgh"取偶数位字母

a = "abdfgh"

print(a[::2])

60.使用两种方式求2-20之间,偶数的和。一种用for ,一种用while

方法1:

sum = 0
for i in range(2,21,2):
    sum += i

print(sum)

方法2:

i = 2
sum = 0
while i <= 20:
    sum += i
    i += 2

print(sum)

61.输入100个数,从1-100,要求使用2层循环,再求个和

方法1:

sum = 0
for i in range(10):
    for j in range(1,11):
        sum += i*10+j

print(sum)

方法2:

 sum(list(range(1,101)))

62.生成一个9位随机密码,包含数字、大写字母和小写字母各3个,且数字、大写和小写均随机分布。

u = [random.choice(string.ascii_uppercase) for i in range(3)]

l = [random.choice(string.ascii_lowercase) for i in range(3)]

d = [random.choice(string.digits) for i in range(3)]

result = u+l+d

random.shuffle(result)

"".join(result)

备注:random.shuffle原地排序,被排序的列表的发生了变化,但不能返回一个新列表,返回值为None

63.1-10倒序输出

i = 10
while i >=1:
    print(i)
    i -= 1

64.遍历[1,2,3,(4,5,6)]

for i in s:
    if isinstance(i,tuple):
        for j in i:
            print(j)
    else:
        print(i)

65.在0-10中,使用continue语句来实现打印1,3,5,7,9

for i in range(1,10):
    if i % 2 == 0:
        continue
    print(i)

备注:不用else也可以

66.嵌套循环输出10-50中各位带1-5的所有数字

for i in range(1,5):
    for j in range(1,11):
        a = i*10+j
        if j >=1 and j <= 5:
            print(a)

67.写一个判断素数的函数

def is_prime(a):
    for i in range(2,a):
        if a % i == 0:
            return False
            break
    else:
        return True

68.实现一个add函数,只允许输入2个数字相加,否则返回None

def add(a,b):
    if isinstance(a,(int,float,complex)) and isinstance(b,(int,float,complex)):
        return a+b
    return None

69.写一个函数:用户可以输入n次数据,可能是数字,也可能是字符串,请将用户输入的所有数字类型进行累加求和,当用户输入bye的时候,结束函数的执行并且返回求和的结果。

def add():
    result = None
    while 1:
        user_input = input("send a your data:")
        if user_input == "bye":
            return result
        try:
            float(user_input)
            if result is None:
                result = 0
            result += float(user_input)
        except:
            pass

add()

70.计算2,1000000中所有的素数,并计算耗时。

质数(Prime number),又称素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个因数的数)。

import time

def is_prime(a):
    for i in range(2,a):
        if a % i == 0:
            return False
            break
    else:
        return True

result = []

s = time.time()

for i in range(2,1000001):
    if is_prime(i):
        result.append(i)

e = time.time()

print(len(result))

print(e-s)

71.计算圆的面积

def area(r):
    return round(math.pi*r*r,2)

72.算文件的行数

方法1:

fp=open(r"C:Users11067Desktopdd.txt","r",encoding="utf-8")
len(fp.readlines())
fp.close()

方法2:

fp = open(r"C:Users11067Desktopdd.txt","r",encoding="utf-8")
fp.seek(0,0)
count = 0
for i in fp:
    count += 1

print(count)
fp.close()

方法3:

fp = open(r"C:Users11067Desktopdd.txt","r",encoding="utf-8")
fp.seek(0,0)
count = 0
while fp.readline():
    count += 1

print(count)
fp.readline()   #读到结尾是‘’,即为false,所以是自动退出。
fp.close()

73.打印1-100,用2层循环

方法1:

for i in range(10):
    for j in range(1,11):
        print(i*10+j,end=" ")
    print()

方法2:

num = 1
for i in range(10):
    for j in range(10):
        print(num,end=" ")
        num += 1
    print()

74.打印1-100,用2层循环,求和

result = 0
for i in range(10):
    for j in range(1,11):
        result += i*10+j

print(result)

75.写一个函数,统计一下一句话中的大写英文个数、小写英文个数和数字个数。如:I am a 18 years old boy!Do u believe,do you?

s = "I am a 18 years old boy!Do u believe,do you?"

import string
upper = 0
letter = 0
digit = 0
for i in s:
    if i in string.ascii_lowercase:
        letter += 1
    if i in string.ascii_uppercase:
        upper += 1
    if i in string.digits:
        digit += 1

print(letter,upper,digit)

76.1,1,2,3,5,8,13,求第7个是13的函数

def num(num):
    num1 = 0
    num2= 1
    sum = 0
    for i in range(num):
        sum = num1+num2
        num2 = num1
        num1 = sum
        #print(num1,num2)
    print(sum)

77.写一个求平均值的函数,参数必须为列表或者元组,里面包含的元素可能不是数字

方法1:

def average(a):
    if not isinstance(a,(list,tuple)):
        return None
    sum = 0
    num = 0
    for i in a:
        if isinstance(i,(int,float)):
            num += 1
            sum += i
    if num == 0:
        return None
    return sum/num

方法2:

def average(a):
    if not isinstance(a,(list,tuple)):
        return None
    sum = 0
    for i in a:
        if isinstance(i,(int,float)):
            sum += i
    if len(a) == 0:
        return None
    return sum/len(a)

78.写一个函数:统计一句话的单词个数,找到长度最长的字母个数。函数计算结果返回2个值,一个是单词个数,一个是最长的字母个数。 

def count_num(sentence):
    if not isinstance(sentence,str):
        return None
    word_num = len(sentence.split())#单词个数
    word_max_length=0
    for i in sentence.split(): #循环单词列表
        if len(i) > word_max_length:
            word_max_length = len(i)  #假如某个单词大于最大单词长度,就把他赋值给他
    return word_num,word_max_length

79.写一个函数,有2个参数,一个是列表,一个待删除的元素。函数实现在列表中删除所有的待删除元素,然后把删除后的列表剩余元素返回。

def delElm(list_elm,del_elm):
    if not isinstance(list_elm,list):
        return None
    for i in list_elm:
        if not isinstance(del_elm,int):
            return None
        if i == del_elm:
            list_elm.remove(i)
     return list_elm

80.单词中去掉所有的a

def removeA(word):
    if not isinstance(word,str):
        return None
    new_word = list(word)
    for letter in new_word:
        if letter == "a":
            new_word.remove("a")
    return "".join(new_word)

81.统计一个目录下(一层目录),统计一下有多个文件,统计一下有多少个目录,提示:用os.listdir  和判断文件和路径的api来进行计数

import os
import os.path
file_count = 0
dir_count = 0
for i in os.listdir("E:\test"):  #所有文件和文件夹的列表
    if os.path.isfile("E:\test\"+i): #判断test里的文件或者文件夹到底是不是文件
        file_count += 1
    else:
        dir_count += 1

print("file_count:%s"%file_count)
print("dir_count:%s"%dir_count)

Tips:

>>> os.listdir("E:\test")   #输出的是个列表
['a.txt', 'b.txt', 'test1', 'test2']

82.创建一个10级目录,每个目录的名字从gloryroad1-10,每个目录创建一个文件,文件的名字是1-10.txt,文件内容写上文件名

import os
def creat10dir(dir_path,num):
    os.chdir(dir_path)
    for i in range(int(num)):
        os.mkdir("gloryroad1"+str(i))
        os.chdir("gloryroad1"+str(i))
        with open("gloryroad1"+str(i),"w") as fp:
            fp.write("gloryroad1"+str(i))
            fp.close()

83.统计一个英文句子中包含2个a的单词有几个,并将两个a替换为星号,不能用count函数

count函数:

def count(word,letter):
    if (not isinstance(word,str)) or (not isinstance(letter,str)):
        return None
    num = 0#字母的数量
    i = 0 #循环的计数
    while i <= len(word)-1:
        if word[i:i+len(letter)] == letter:
            num += 1
            i += len(letter)
        else:
            i += 1
    return num

 方法1:

s = "I am a abandon aaaa  boy aabbaa  aacc!"
word_list = s.split()
result_num=0
new_sentence=""  #新句子
for word in word_list:
    if count(word,"a")==2:
        result_num+=1
        new_word = "" #替换*后的单词
        for i in word:
            if i!="a":
                new_word+=i #不等"a"就把字母加进去
            else:
                new_word+="*"  #等"a"就把字母"a"换成*
        new_sentence+=new_word+" "  #"a"个数等于2,就把新单词加入新句子
    else:
        new_sentence+=word+" "  #否则直接把单词加入新句子


new_sentence[:-1]
result_num

 方法2:

s = "I am a abandon,aaaa  boy aabbaa  aacc!"
s=list(s)
new_s=[]
for i in s:#过滤标点,只保留空格和大小写字母
    if i ==" " or ((i >="a" and i<="z") or 
(i >="A" and i<="Z")):
        new_s.append(i)
    else:
        new_s.append(" ")

s="".join(new_s)
result_num=0
word_list = s.split()  #取出来单词列表
for i in range(len(word_list)):  #遍历单词列表
    if word_list[i].count('a')==2:
        result_num+=1
        word_list[i]=word_list[i].replace("a","*")#替换的词重新赋值
            

print("包含a的单词一共:%s 个" %result_num)
print(" ".join(word_list))

84.统计一个2维列表的所有元素之和

def sum2list(list2):
    result = 0
    for i in list2[0]:
        result += i
    for j in list2[1]:
        result += j
    return result

a=[[1,2,3], [4,5,6]]
sum2list(a)

85.统计一句话中仅出现一次的字母

def letter1(sentence):
    ss = list(sentence)
    letter = []
    for i in ss:
        if ss.count(i) == 1:
            letter.append(i)
    return letter

86.把字母都变成大写,s = "I am a boy!"

s = "I am a boy!"
s.upper()

Tips:

str.upper() # 把所有字符中的小写字母转换成大写字母
str.lower() # 把所有字符中的大写字母转换成小写字母
str.capitalize() # 把第一个字母转化为大写字母,其余小写
str.title() # 把每个单词的第一个字母转化为大写,其余小写

87.

1 2 3
4 5 6
7 8 9
上面转换成下面
1 4 7
2 5 8
3 6 9

[[j[i] for j in a] for i in range(3)]

解释:

i=0--->j[0]=[1,4,7]

i=1--->j[0]=[2,5,8]

i=2--->j[0]=[3,6,9]


88.删除2维列表的第2列,a = [[1,2,3],[4,5,6],[7,8,9],[11,12,13]]

a = [[1,2,3],[4,5,6],[7,8,9],[11,12,13]]

[[i[j] for j in [0,2]] for i in a]

 解释:

i[0]-->1,4,7,11

i[2]-->3,6,9,13

89.序号为偶数的,字母后加*

s="sdfsdf"
ss = list(s)
b=[]
for i in range(len(ss)):
    if i % 2 == 0:
        b.insert(i+1,ss[i]+"*")
    else:
        b.append(s[i])

"".join(b)

90.图书馆系统(registerlogin)   20190126

91.只要奇数坐标的字符串“abcdef”

s="abcdef"
for i in s[1::2]:
    print(i)

92.把偶数位置的字母均替换为*,"a1v23333de"

s= "a1v23333de"
ss=list(s)
for i in range(len(ss)):
    if i % 2 == 0:
        if (ss[i]>="a" and ss[i]<="z") or (ss[i]>="A" and ss[i]<="Z") :
            ss[i] = "*"

"".join(ss)

93.生成随机的字母和数字,需要类似的格式:字母数字字母数字。。。,生成长度为10的字符串

方法1:

import string
impirt random
def ss():
    for i in range(5):
        print(random.choice(string.ascii_letters)+random.choice(string.digits),end="")
    print()

方法2:

import string
impirt random

def ss():
    result = ""
    for i in range(5):
        result += string.ascii_letters[random.randint(0,52)]+string.digits[random.randint(0,9)]
    return result

方法3:


import string
import random
def ss():
    result = ""
    for i in range(10):
        if i % 2==0:
            result += string.ascii_letters[random.randint(0,52)]
        else:
            result += string.digits[random.randint(0,9)]
    return result

94.生成随机的字母和数字,需要类似格式:用函数实现且生成的字符串长度,可以通过函数参数来指定

方法1:

import string
import random
def ss(num):
    result = ""
    for i in range(num):
        result += string.ascii_letters[random.randint(0,52)]+string.digits[random.randint(0,9)]
    return result

方法2:

import random
def ss(length,a,b):
    if not (isinstance(length,int) and (isinstance(a,int) and isinstance(b,int)) and length>0 and a>=97 and a<=122):
        return "请输入字母在97到122之间!"
    result = ""
    for i in range(length):
        if i % 2 == 0:
            result += chr(random.randint(a,b))
    else:
        result += str(random.randint(0,9))
    return result

95.统计一句话的单词数量,例如:I am a 18 years old boy!Do u believe,do you?

s="I am a 18 years old boy!Do u believe,do you?"
s = list(s)
for i in range(len(s)):
    if not ((s[i]>="a" and s[i]<="z") or (s[i]>="A" and s[i]<="Z")):
        s[i] =" "

len("".join(s).split())

96.单词逆序输出,"I am a 18 years old boy!Do u believe,do you?"

s="I am a 18 years old boy!Do u believe,do you?"
s = list(s)
for i in range(len(s)):
    if not ((s[i]>="a" and s[i]<="z") or (s[i]>="A" and s[i]<="Z")):
        s[i] =" "

" ".join("".join(s).split()[::-1])

97.练习找到句子中第二长的所有单词!

s="you do believe u Do CCboy old years a am I"
word_list=s.split()
max_length=0
sec_max_length=0
for word in word_list:
    if len(word) > max_length:
        max_length = len(word)
    elif len(word)<max_length and len(word)>sec_max_length:
        sec_max_length = len(word)

print(sec_max_length)
for word in word_list:
    if len(word)==sec_max_length:
        print(word)

98.将一个字符串中的所有重复字符去掉,只保留重复出现字符的最后一个

def a(s):
    s=list(s)
    result=[]
    for i in range(len(s)):
        if s[i] in s[i+1:]:
            continue
        else:
            result.append(s[i])
    return "".join(result)

99.将一个字典中的所有内容存到一个列表中,且格式为一个key一个value

def a(a):
    result=[]
    for k,v in a.items():
        result.append(k)
        result.append(v)
    return result

a({1:"a",2:"b",3:"c"})

100.把一个文件中包含数字的所有行,筛选存到一个新文件中

fp1 = open("e:\a.txt","r")
fp2 = open("e:\result.txt","w")
for i in fp1:
    for j in i:
        if j in "1234567890":
            fp2.write(i)
            break

fp1.close()
fp2.close()

101.把一个文件的所有行倒序输出

fp1 = open("e:\a.txt","r")
fp2 = open("e:\result.txt","w")
for i in fp1.readlines()[::-1]:
    if " " in i:
        fp2.write(i)
    else:
        fp2.write(i+" ")

fp1.close()
fp2.close()

102.把一个文件下所有的文件删除,在所有的目录下,新建一个文件a.txt,里面随便写个关键字

import os

for i in os.listdir():
    if os.path.isfile(i):
        os.remove(i)
    else:
        os.chir(i)
        with open("a.txt","w") as pf:
            pf.write("i love u")
        os.chdir("..")  #退出当前文件夹

103.统计每个文件一共有多少行,有多少空行,多少注释行,多少代码行。

import os
import os.path

def count_lines(fp):  # 输入句柄判断行数
    line_number = 0  #总行数
    blank_line_number = 0  #空白行数
    code_line_number = 0  # 代码行数
    comment_number = 0  #注释行数
    try:
        for line in fp:
            line_number += 1
            if line.strip() == "":
                blank_line_number += 1
            elif line.strip().startswith("#"):
                comment_number += 1
            else:
                code_line_number += 1
        return line_number,blank_line_number,code_line_number,comment_number
    except:
        print("统计文件%s代码时候出错" %fp.name)


def count_code_line(file_path):

    if not os.path.exists(file_path):
        print("文件的路径不存在,请重新输入!")
        return None
    try:
        fp = open(file_path,"r",encoding="gbk")
        return count_lines(fp)
    except:
        fp = open(file_path,"r",encoding="utf-8")
        return count_lines(fp)

104.统计一下多级目录个数,统计一下多级目录下所有的文件个数,统计一个多级目录下的python文件个数

dir_num = 0 #文件夹个数
file_num =0 #文件个数
py_file_num = 0 #py文件个数
for root,dirs,files in os.walk("e:\test"):  #os.walk多级目录统计
    for dir in dirs:
        dir_num +=1
    for file in files:
        file_num +=1
        if os.path.splitext(file)[1]==".py":  #切割
            py_file_num+=1


print("""
总目录个数:%s
总文件个数:%s
py文件个数:%s
""" %(dir_num,file_num,py_file_num)) 

Tips:

>>> s = "sdfsf.py"
>>> os.path.splitext(file)[1]
'.txt'

105.一个英文句子,统计字母个数,并且按照4a3b0c的格式输出,字母个数在前,字母在个数后面

def count_letter(s):
    import string
    result = []
    for i in string.ascii_lowercase: #小写字母 a--z
         result.append(str(s.count(i)))
         result.append(i)
    return "".join(result)

print(count_letter('adfkjbaadasdkljbs'))

106.判断一个日期是一年中的多少天

def is_leap_year(year):  #判断是不是闰年
    try:
        year = int(year)
        if (year % 400 ==0) or (year%4==0 and year%100!=0):
            return True
        else:
            return False
    except:
        return False

def count_days():  #计算天数
    date = input("year-month-day:")
    year,month,day = date.split("-")
    if int(day) > 31:
        return None
    elif int(month) == 2:
        if int(day) >29:
            return None
    result = 0
    try:
        for i in range(1,int(month)): #最后一个月不算在内,算+day
            if i not in range(1,13):
                return None
            elif i in [1,3,5,7,8,10,12]: #1,3,5,7,8,10,12月
                result+=31
            elif i ==2:
                result+=28
                if is_leap_year(year):
                    result+=1 #闰年+1
                else:
                    result+=30 #4,6,9,11月
        result+=int(day)
    except:
        result = 0
    return result


一切技术都是为业务服务,脱离业务的技术一文不值!

原文地址:https://www.cnblogs.com/bubutianshu/p/10124214.html