HL1 发表于 2018-8-20 15:17:01

python学习记录

python小白一枚,记录下自己写过的

HL1 发表于 2018-8-20 15:19:39

1.二进制转换
def my_bin(x):
        s = ''
        while x:
                n = x % 2
                x = x // 2
                s = '{}'.format(n) + s
        print(int(s))
my_bin(13)

注意 n = x % 2和x = x // 2两句上下不要颠倒,否则会少输出一位(汗{:5_104:} )

HL1 发表于 2018-8-20 15:43:40

2.寻找三位数的水仙花数
def my_fun():
        for x in range(100, 1000):
                m = x // 100
                n = (x % 100) // 10
                k = x % 10
                if m**3 + n**3 + k**3 == x:
                        print(x)
my_fun()
感觉计算量有点大。。。。

HL1 发表于 2018-8-20 16:02:09

3.寻找字符串
def my_fun():
        temp1 = input('请输入目标字符串:')
        temp2 = input('请输入子字符串(两个字符):')
        count = temp1.count(temp2)
        print('子字符串在目标字符串中共出现%d次' % count)
my_fun()
出现零次即为没找到

HL1 发表于 2018-8-20 17:05:55

4.判断回文联
def my_fun():
        temp = input('请输入一句话:')
        if temp == temp[::-1]:
                print('是回文联')
        else:
                print('不是回文联!')
my_fun()
不知道切片法是不是最简单

HL1 发表于 2018-8-20 17:59:15

5.统计字符串中字母,数字,空格等的个数
def my_fun(*arg):
        count1 = 1
        count2 = 0
        count3 = 0
        count4 = 0
        count5 = 0
        while count1 < (len(arg)+1):
                for x in range(len(arg)):
                        if arg.isalpha():
                                count2 += 1
                        elif arg.isdigit():
                                count3 += 1
                        elif arg == ' ':
                                count4 += 1
                        else:
                                count5 += 1
                print('第%d个字符串共有:英文字母%d个,数字%d个,空格%d个,其他字符%d个' % (count1, count2, count3, count4, count5))
                count1 += 1
                count2 = 0
                count3 = 0
                count4 = 0
                count5 = 0
my_fun('I love fishc.com.','I love you, you love me.','I am')
注意range()是前闭后开

HL1 发表于 2018-8-20 19:17:55

6.在很长一段字符串中统计个字符及其出现的次数
str1 = ''' '''
list1 = []
for each in str1:
    if each not in list1:
      if each== '\n':
         print(r'\n',str1.count(each))
      else:
            print(each,str1.count(each))
    list1.append(each)
注意缩进,最后会有Good luck

HL1 发表于 2018-8-21 09:46:12

本帖最后由 HL1 于 2018-8-21 10:03 编辑

7.寻找密码, 密码为小写字母,左三和右三均为大写字母
str1 = ''''''
str2 = str1.replace('\n', '') #去掉\n换行符
length = len(str2)
for i in range(3,length-3):
        if str2.isupper() and str2.islower() and str2.isupper():
                if str2.islower() and str2.islower():
                        print(str2, end='')
忘记了仅有二字{:5_104:} ,结果为 i love fishc

HL1 发表于 2018-8-21 10:52:26

8.将列表绑在一起
list1 = list(map(lambda x,y:, , ))
结果为:[, , , , ]
注意python3中map()函数返回的是一个迭代器

HL1 发表于 2018-8-21 15:07:21

9.递归求幂指数
def power(x,y):
        if y > 1:
                return power(x,y-1) * x
        else:
                return x
print(power(2,3))
非整数情况感觉好难

HL1 发表于 2018-8-21 15:17:09

10.递归用欧几里得算最大公约数
def gcd(x, y):
        if y != 0:
                x , y = y, x%y
                return gcd(x, y)
        if y == 0:
                return x
print(gcd(32,27))

HL1 发表于 2018-8-21 15:35:12

11.递归法转换二进制
def my_bin(x):
        str1 = ''
        if (x // 2) != 0:
                str1 = str(my_bin(x // 2)) + str(x%2) + str1
        if (x // 2) == 0:
                str1 = str(x%2) + str1
        return str1
print(my_bin(789))

HL1 发表于 2018-8-21 16:21:00

12.取出参数按顺序放入列表中
list1 = []
def get_digits(n):
        m = len(str(n))
        if m == 1:
                list1.append(n)
        else:
                list1.append(n // 10**(m-1))
                n = n % 10**(m-1)
                return get_digits(n)
        print(list1)
get_digits(12345)
注意list1不能放入函数中否则会随着递归的过程中不断初始化为空列表{:5_104:}
注意list1.append(n // 10**(m-1))和n = n % 10**(m-1)两行不能弄反了,经常出现这个错误{:5_104:}
小甲鱼答案更简洁
list1 = []
def get_digits(n):
        ifn > 0:
                result.insert(0,n%10)
                get_digits(n//10)
get_digits(12345)
print(result)
学习学习

HL1 发表于 2018-8-21 16:28:47

13.求岁数
def p(n):
        ifn == 1:
                return 10
        else:
                return p(n-1) + 2
print(p(5))
这个比较简单,不过不要忘记了return

HL1 发表于 2018-8-21 16:50:08

14.字符串的replace()真的好用
删除字符串中的空格 string.replace(' ', '')
删除换行符string.replace('\n', '')
string.split(',')以逗号为分隔符将字符串分隔为列表

HL1 发表于 2018-8-21 17:21:55

15.通讯录
print('''---欢迎进入通讯程序---
        ---1:查询联系人资料---
        ---2:插入新的联系人---
        ---3:删除新的联系人---
        ---4:退出通讯录程序---''')
dict1 = dict()

while True:
        m = int(input('请输入相关的指令代码:'))
        if m == 1:
                name = input('请输入联系人姓名:')
                if name in dict1:
                        print(name + ':' + dict1)
                else:
                        print('不存在')
        ifm == 2:
                if name in dict1:
                        print('已存在')
                        print(name + ':' + dict1)
                        if input('修改?:') == 'y':
                                dict1 = input('请输入电话:')
                else:
                        dict1 = input('请输入电话:')
        if m == 3:
                name = input('请输入联系人姓名:')
                if name in dict1:
                        del(dict1)
                else:
                        print('不存在')
        if m == 4:
                break
print('|---感谢使用通讯录程序---|')
字典中的删除方法dict1.clear()是删除所有数据,返回值为None
pop()是删除给定键的值

HL1 发表于 2018-8-21 18:24:18

16.创建并写入内容
def file_write(file_name):
    f = open(file_name,'w')
    print('请输入内容:【单独输入\':w\'保存退出】:')

    while True:
      write_some = input()
      if write_some != ':w':
            f.write('%s\n' % write_some)
      else:
            break

    f.close()
file_name = input('请输入文件名:')
file_write(file_name)
自己没出来{:5_104:}没有想到用循环语句和换行符在IDLE中一换行按ENTER键就输入完毕了{:5_104:}学习学习

HL1 发表于 2018-8-21 18:52:57

17.比较两文件内容
def cmp_file():
    file1_name = input('请输入需要比较的头一个文件名:')
    file2_name = input('请输入需要比较的另一个文件名:')
    f1 = open(file1_name)
    f2 = open(file2_name)
    count = 0
    differ = []

    for line1 in f1:
      line2 = f2.readline()
      count += 1
      if line1 != line2:
            differ.append(count)

    f1.close()
    f2.close()

    if len(differ) == 0:
      print('相同')
    else:
      print('两个文件共有【%d】处不同:' % len(differ))
      for each in differ:
            print('第%d行不一样' % each)
cmp_file()
想的过于复杂了,比较每行有哪些不同

HL1 发表于 2018-8-21 19:03:31

18.打印文件的前n行
def open_file():
    file_name = input('请输入要打开的文件名:')
    count = int(input('请输入需要显示改文件前几行:'))
    f = open(file_name)

    while count:
      line = f.readline()
      count -= 1
      print(line)

    f.close()
open_file()
小甲鱼答案:def open_file():
    file_name = input('请输入要打开的文件名:')
    count = int(input('请输入需要显示改文件前几行:'))
    f = open(file_name)

    while count:
      line = f.readline()
      count -= 1
      print(line)

    f.close()
open_file()
原来不用设置count即可逐行打印

HL1 发表于 2018-8-21 19:04:11

HL1 发表于 2018-8-21 19:03
18.打印文件的前n行
def open_file():
    file_name = input('请输入要打开的文件名:')


也不要line
页: [1] 2
查看完整版本: python学习记录