开发面试题及算法思想(一)

一,初探python

#习题1:一个列表,排重,不能用set,也不能用字典
'''
1,创建一个空列表result,储存排序后的结果
2,遍历列表l,判断列表l元素是否存在列表result里,
3,存在,不做处理,不存在,添加在列表result里,打印列表result
'''
result=[]
l=[1,2,2,2,3,6,4,77,8]

for i in l:
    if i not in result:
         result.append(i)
print(result)

#习题2:输出大写字母、小写字母、大小写字母、数字、大小写字母和数字
'''
1, 大写字母ASCII表里是[65,90]
2, 小写字母ASCII表里是[97,122]
3, 数字ASCII表里是[48,57]
4, 定义一个空字符串,用range 函数创建序列,用chr  函数转换序列,加入到空字符串,打印字符串
'''
upper=''
for i in range(65,91):    #range 函数创建的序列包含头,不包含尾 半开半闭区间
    upper += chr(i)       #chr  函数是把ASCII表里的数字转换为字符
print(upper)

lower = ''
for i  in range(97,123):
    lower += chr(i)
print(lower)

up_low = upper+lower
print(up_low)

digit = ''
for i  in range(48,58):
    digit += chr(i)
print(digit)
print(up_low+digit)



#习题3:生成字符串a1b2c3d4e5f6g7h8i9j10
'''
1,小写字母ASCII表里是[97,106]
方法一, 字符串是不可变对象,用字符串拼接方式每次都要生成中间字符串,效率差
方法二, 定义一个空列表,用append 方法把拼接的字符串加入列表中,再用join 方法链接
'''
#方法一
s=''
res=''
for i in range(1,11):
    s=chr(i+96) + str(i)
    res+=s
print(res)

#方法二
string_list=[]
for i in range(1,11):
    string=chr(i+96)+str(i)
    string_list.append(string)
print('string_list=',''.join(string_list))

#习题4:生成字符串a1B2c3D4e5F6g7H8i9J10
'''
1, 大写字母ASCII表里是[65,90]
2, 小写字母ASCII表里是[97,122]
3, 数字ASCII表里是[48,57]
'''
# 方法一,定义一个空列表,储存字符串,用range 函数加步长取变量,用chr 函数,append  函数,join 函数链接字符串
string_list1=[]
for i in range(1,11,2):
    string1=chr(i+96)+str(i)+chr(i + 65) + str(i+1)
    string_list1.append(string1)
print('string_list1=',''.join(string_list1))

# 方法二,定义一个空列表,储存字符串, 用if 判断是奇数还是偶数,奇数用小写字母,偶数用大写字母,用chr 函数,append  函数,join 函数链接字符串
string_list2=[]
for i in range(1,11):
    if i%2 == 1:
        s=chr(i+96)+str(i)
    else:
        s=chr(i+64)+str(i)
    string_list2.append(s)
print('string_list2=',''.join(string_list2))

# 方法三,定义一个空列表,储存字符串, 用if 判断是奇数还是偶数,奇数用小写字母,偶数用大写字母,大写字母用upper 函数转换
# 用chr 函数,append  函数,join 函数链接字符串

string_list3=[]
for i in range(97,107):
    if i%2 == 1:
        s=chr(i)+str(i-96)
    else:
        s=chr(i).upper()+str(i-96)
    string_list3.append(s)
print('string_list3=',''.join(string_list3))

#习题5:输出奇数字母和偶数字母到两个列表中
'''
1, 大写字母ASCII表里是[65,90]
2, 小写字母ASCII表里是[97,122]
3, 数字ASCII表里是[48,57]
'''
list1=[]
list2=[]
for i in range(65,91):
    if i%2==1 :
        list1.append(chr(i))
        list1.append(chr(i).lower())
    else:
        list2.append(chr(i))
        list2.append(chr(i).lower())
print(list1,list2)


#习题7:判断一个输入的句子中有多少个字母
value= input("请输入一个句子:")
count=0
for key  in value:
    if (key>='a' and key<='z') or (key>='A' and key <='Z'):
        count+=1
print(count)

#习题8: 26个字母大小写成对打印,例如:Aa,Bb....
for i in range(65,91):
    print(chr(i)+chr(i+32)+',',end="")
print('')
#习题9、一个list包含10个数字,然后生成新的list,要求,新的list里面的数都比之前的数多1
list1=[1,4,23,65,2,765,24,456,236,9]
list2=[]
for i in list1:
    list2.append(i+1)
print(list2)

print([i+1 for i in range(1,11)])

#习题10、倒序取出每个单词的第一个字母。
'''
1, 按空格先分割字符串   split(s)函数    按s分割,s省略将按空格分割
2,倒序排列字符串       reverse()函数   
3,遍历倒序的字符串,截取
'''
s='I,am,a good,boy'
s1=s.split(',')
s1.reverse()
s2=[]
for i in s1:
    s2.append(i[0])
print(s2)

s3='I,am,a good,boy'
s4=s.split(',')
list5=''
for i in range(len(s4)-1,-1,-1):
    list5+=s4[i][0]
print(list5)
#习题11:找出s=”aabbccddxxxxffff”中,出现次数最多的字母
'''
1, 创建一个空字典,用key 存S里出现的字母,用value存该字母出现的次数
2, 用一变量存储最大的value
4, 遍历字典。判断次数,最大的打印出来
'''
s='aabbccddxxxxffff'
s_dic={}
for i in s:
    s_dic[i]=s.count(i)
max_count= max(s_dic.values())
for k,v in s_dic.items():
    if v== max_count:
        print(k)

#习题12、自定义count函数  只统计单个字符出现次数情况
'''
1,  设计一个方法,入参为一个统计的字符串s和一个被统计字符串 latter
2,  设定一个变量time,存储latter 在 s 里出现的次数
3,  判断s ,latter 是不是字符串,不是直接返回0
4, 遍历s,  如果s  里的字符串等于latter,time+1
5,  返回time
'''
a='sterteadasasqwasfadsadadadasda'
def count_latter(s,latter):
    times=0
    if not isinstance(s,str) or not isinstance(latter,str):
        return 0
    else:
        for v in s:
            if v == latter:
                times += 1
    return times
print(count_latter(a,'s'))

#自定义count函数  兼容统计多个字符出现次数的情况
'''
1,  设计一个方法,入参为一个统计的字符串s和一个被统计字符串 latter
2,  设定一个变量time,存储latter 在 s 里出现的次数
3,  判断s ,latter 是不是字符串,不是直接返回0,判断s 是否在latter 里,不再直接返回0
4, 遍历latter,  如果latter 字符串包含s,计数加1
5,  返回time
'''

def count_num(s,latter):
    times =0
    s_len = len(s)
    if not isinstance(s,str) or not isinstance(latter,str):
        return 0
    else:
        if  s not in latter:
            return 0
        else:
            for i in range(len(latter)):
                if s==latter[i:i+s_len]:
                    times += 1
        return times
s='werwe'
latter= 'werwegwerwecwerwegfgh'
print(count_num(s,latter))

#习题13:自定义divmod

def divmod(a,b):
    if not isinstance(a,(int,float)) or not isinstance(b,(int,float)):
        return '***********'
    c= a//b
    d=a%b
    return c,d


print(divmod('a','b'))
print(divmod('a',10))
print(divmod(15,10))
print(divmod(15.0,10.25))

#习题14、把字符串中的所有数字去掉。
'''
方法一
1,创建一个空列表pre,存储去掉数字的字符串
2,遍历字符串,如果不是数字就存放在列表pre里
3,把列表值转换为字符串
方法二
用filter() 函数及lambda()函数取值
'''
pre = []
def del_digit(s):
    if not isinstance(s,str):
        return 0
    else:
        for i in s:
            if i not in '0123456789':
                pre.append(i)
    return ''.join(pre)

s='wertre12wertfwe12wertsdf85werwe1'
print(del_digit(s))
print(''.join([v for v in s if v.isalpha()]))
print(''.join(filter(lambda x: x not in '0123456789',s)))
print(''.join(filter(lambda x:x.isalpha(),s)))

#习题15、三个数排序
'''
1,创建一个入参为3个数值型的函数sort2
2,判断入参是否为数值型,不是直接返回0
3,入参俩俩比大小,交换位置排序
'''
def sort2(a,b,c):
    if not isinstance(a,(int,float)) or not isinstance(b,(int,float)) or not isinstance(c,(int,float)):
        return 0
    else:
        if a>b:
            a,b = b,a
        if a>c:
            a,c = c,a
        if b>c :
            b,c = c,b
    return a,b,c

print(sort2(3,6,1))
print(sort2('3',6,1))
print(sort2(3,6,'1'))
print(sort2(3.65,3.64,1.65))

#习题16、求一个列表中的最大值
'''
1,创建一函数,入参为列表
2,循环列表,判断列表数据是不是数值型,有不是数值型的数据返回0
3,定义一个变量a等于列表第一个值
4,循环列表且与a 比较,如果比a 大,把当前索引的列表值赋值给a,如果比a 小,不做任何操作
5,返回a
'''
def max(s):
    a=s[0]
    if not isinstance(s,list):
        return 0
    for i in s:
        if not isinstance(i,(int,float)):
            return 0
    for j in range(1,len(s)):
        if a<s[j]:
            a=s[j]
    return a

s=[4,632.655,2543,3.351,67,3423,7]
print(max(s))

#习题17:生成9位数字的密码
'''
1,利用随机函数 randint()函数随机生成9位数字密码
'''
import random
numbers_password = ''
for i in range(9):
    numbers_password += str(random.randint(0,9))
print(numbers_password)
print(type(numbers_password))

#习题18、生成9位字母的密码
'''
1,利用随机函数 randint()函数随机生成9位数字
2,利用sting函数的ascii_letters()方法生成字母
'''
import random
import string
numbers_password_a = ''
for i in range(9):
    numbers_password_a += string.ascii_letters[random.randint(0,51)]
print(numbers_password_a)

#习题19、生成9位数字和字母的密码
'''
1,定义一个只生成0,1 的随机数,定义一个空字符串
2,当随机数为1时(为真时),空字符串里增加数字密码
3,当随机数为0时(为假),字符串里添加字母密码
'''
import random
import string

num_pw = ''
for i in range(9):
    if random.randint(0,1):
        num_pw+=str(random.randint(0,9))
    else:
        num_pw+=string.ascii_letters[random.randint(0,51)]
print(num_pw)

#习题20、正整数10进制数转换成32位的2进制
'''
1,正整数10进制转换为2进制用除2反向取余法 (2除整数取商,2除商一直到余数为0)
2,先判断转换的数是不是正整数,是,继续,不是返回0
3,定义2个空列表,一个存放正整数除以2的余数 一个存放不足32位时补齐32位的0
4,循环取余数,直到商为0退出
5,判断够不够32位,不够用0补齐
6,合并列表,倒序取出列表数据就是所需要的二进制数
'''

def devTobin(num):
    num_dev=[]
    zeno=[]
    if not isinstance(num,int) or num<0:
        return 0
    while True:
        num_dev.append(str(num%2))
        num=num//2
        if num ==0:
            break
    print(len(num_dev))
    number=len(num_dev)
    while number<32:
        zeno.append(str(0))
        number+=1
    return ''.join(zeno[::])+''.join(num_dev[::-1])

print(devTobin(28))

#习题21、二进制转换为十进制
'''
1,二进制转换为10进制用2的次幂方式计算  即1100=0×2^0+0×2^1+1×2^2+1×2^3=12
2,判断是不是2进制字符串,不是,返回0,是,循环取出存放在空列表
3,遍历空列表,且用pow()函数计算
'''
def binTodiv(binNum):
    result = 0
    bin=[]
    for i in binNum:
        if i not in('0','1'):
            print(i)
            return 0
        else:
            bin.append(i)
    num_bin = len(bin)
    for j in range(num_bin):
        print('j:',j)
        print(bin[-(j+1)])
        result += (int(bin[-(j+1)])*pow(2,j))
    return result

print(binTodiv('1111'))

#22、实现一个简单的单词本
'''
 功能:
 可以添加单词和词义,当所添加的单词已存在,让用户知道;
 可以查找单词,当查找的单词不存在时,让用户知道;
 可以删除单词,当删除的单词不存在时,让用户知道;
 以上功能可以无限制操作,直到用户输入bye退出程序。

'''
'''
算法
1,先定义一个增删查单词的信息打印出来供用户选择(可以不定义)
2,定义一个空字典,存放单词和词义,key 存放单词  value 存词义
3,循环 让用户输入增查删单词的信息,判断单词是否存在单词本,然后做出对应的操作
4, 如果用户输入的信息错误提示一次信息错误,重新输入,再次输错,5秒后退出程序,输入正确做相应的操作
'''
import time

info = '''
add  :  add the word and word mean
find :  find the word
del  :  delete the word
bye  :  quit the program
'''
print(info)
word_dict = {}
com = input(' please input the command:')
while True:
    if com =='add':
        word = input('please input the word:')
        word_mean = input('please input the word mean:')
        if word not in word_dict:
            word_dict[word] = word_mean
        else:
            print('word already exist')
            com = input(' please input the command:')
    elif com == 'find':
        word = input('please input the word:')
        if word in word_dict:
            print(word_dict[word])
        else:
            print('word not exist')
            com = input(' please input the command:')
    elif com == 'del':
        word = input('please input the word:')
        if word in word_dict:
            del word_dict[word]
        else:
            print(' delete word not exist')
            com = input(' please input the command:')
    elif com == 'bye':
        break
    else:
        print('please input  right info: add or del or find or bye')
        com = input(' please input the command:')
        if com in ['add','del','find','bye']:
            continue
        else:
            time.sleep(5)
            break

开发面试题及算法思想(二)https://blog.csdn.net/zhangguangyi520/article/details/122113734

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值