python100例详解-Python 经典算法100及解析(小结)

1:找出字符串s="aaabbbccceeefff111144444"中,字符出现次数最多的字符

(1)考虑去重,首先将字符串进行过滤去重,这样在根据这些字符进行循环查询时,将会减少循环次数,提升效率。但是本人写的代码较为臃肿,有更好的希望留言评论

str = 'a1fsfs111bbbcccccvvvvvnnnnboooooosssnb'

class Countvalue():

def countvalue(self, str1):

'''

利用set自身的去重功能

:param str1: 对传进来的字符串过滤

:return: 返回一个不含重复字符的list

'''

list1 = []

result = []

for x in str1:

list1.append(x)

result = set(list1)

return result

def count(self, str1):

'''

对已经去重的list进行遍历,因已去重

从而减少循环次数,提高检索效率

:param str1:

:return:

'''

list = Countvalue().countvalue(str1)

a = 0

tump = {}

for x in list:

test = str1.count(x)

if test > a:

tump.clear()

a = test

tump[x] = a

elif test == a:

a = test

tump[x] = a

return tump

if __name__ == '__main__':

print(Countvalue().count(str))

(2)不考虑去重

s = "xssdddeeeeeeeffff"

max_times = 0

result = {}

for i in s:

if s.count(i) > max_times:

result.clear()

result[i] = s.count(i)

max_times = s.count(i)

elif s.count(i) == max_times:

result[i] = s.count(i)

print result

以下内容摘抄自:https://blog.csdn.net/watfe/article/details/79206165

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

'''

2018.1.30

Python 练习100题

http://www.runoob.com/python/python-100-examples.html

'''

'''

题目001:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

'''

def tm001():

'''

【个人备注】:按题意直接写出来

'''

arr = []

for i in range(1,5):

for j in range(1,5):

for k in range(1,5):

num = 100*i+10*j+k

if i!=j and j!=k and i!=k and num not in arr:# 互不相同且无重复数字的三位数

arr.append(num)

print(len(arr),arr)

def tm001_1():

'''

【个人备注】:其实python自带排列组合模块,可以直接调用。

也知道这个写法,只是函数记不住,还是百度一下才能写出来。

如果这是面试题,能写出后一种当然好,不能的话还是老老实实的按照上面的思路来吧。

'''

import itertools

temp_arr = list(itertools.permutations([1, 2, 3, 4], 3)) # 排列 # A_4^3 = (4)!/(4-3)! = (4*3*2*1)/1 = 24

arr = [100*t[0]+10*t[1]+t[2] for t in temp_arr]

print(len(arr),arr)

'''

题目002:企业发放的奖金根据利润(I)的多少来提成:

低于或等于10万元时,奖金可提10%;

利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;

20万到40万之间时,高于20万元的部分,可提成5%;

40万到60万之间时高于40万元的部分,可提成3%;

60万到100万之间时,高于60万元的部分,可提成1.5%;

高于100万元时,超过100万元的部分按1%提成。

从键盘输入当月利润I,求应发放奖金总数?

'''

def tm002():

'''

程序分析:请利用数轴来分界,定位。

【个人备注】:这种处理数轴问题的写法,值得参考。比elif的写法,简洁方便的多。

'''

money = int(input('净利润:'))

arr = [1000000,600000,400000,200000,100000,0]

rat = [0.01,0.015,0.03,0.05,0.075,0.1]

bonus = 0

for i in range(len(arr)):

if money>arr[i]: # 对于处于区间的部分

bonus+=(money-arr[i])*rat[i] # 计算并累加奖励

money=arr[i] # 剩余部分

print(bonus)

'''

题目003:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

'''

def tm003():

'''

【个人备注】:网站上是求了一下方程,没细看。

python又不是没有开方函数,直接按字面意思解了。

'''

import math

for i in range(1000):

x = math.sqrt(i+100)

y = math.sqrt(i+100+168)

if x%1==0 and y%1==0:

print(i)

'''

题目004:输入某年某月某日,判断这一天是这一年的第几天?

'''

def tm004():

'''

【个人备注】:知道python有时间元组这一概念,这道题完全不需要计算。

时间元组包含九个属性

tm_year 年

tm_mon 月(1~12)

tm_mday 日(1~31)

tm_hour 时(0~23)

tm_min 分(0~59)

tm_sec 秒(0~61, 60或61是闰秒)

tm_wday 星期(0~6, 0是周一)

tm_yday 第几天(1~366, 366是儒略历)

tm_isdst 夏令时(平时用不到)

'''

import time

date = input('输入时间(例如2018-01-23):')

st = time.strptime(date,'%Y-%m-%d') # 时间文本转化成时间元祖

num = st.tm_yday

print(num)

'''

题目005:输入三个整数x,y,z,请把这三个数由小到大输出。

'''

def tm005():

print('输入三个数字')

x = input('输入第1个数字:')

y = input('输入第2个数字:')

z = input('输入第3个数字:')

l = [x,y,z]

arr = sorted(l) # 你也可以使用list.sort()方法来排序,此时list本身将被修改

print(arr)

'''

题目006:斐波那契数列。

'''

def tm006():

'''

程序分析:斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。

【个人备注】:很多种解法,我是按照分割的方式,每次取列表后两项,然后相加。

'''

l = [0,1]

for i in range(10):

arr = l[-2:]

l.append(arr[0]+arr[1])

print(l)

'''

题目007:将一个列表的数据复制到另一个列表中。

'''

def tm007():

'''

【个人备注】:如果系统的看过python教程之类的应该都知道。

Python里面一切都是对象,list的复制需要用[:]的方式。

至于b=a只是相当于给a取了个别名而已,指向的是同一个列表,并没有实现复制。

'''

a = [1, 2, 3]

b = a[:]

'''题外话'''

a[0]=0

print(id(a),id(b)) # 可以看到a,b的内存不一致,是复制

print(a,b) # 修改a,b不变

a = [1, 2, 3]

b = a

a[0]=0

print(id(a),id(b)) # 如果去掉[:],可以看到a,b的内存一致,并没有复制,指向的是同一个列表

print(a,b) # 修改a,b也变

'''

题目008:题目:输出 9*9 乘法口诀表。

'''

def tm008():

'''

【个人备注】:已经忘了,百度了才想起来口诀表具体长什么样。

注意 %-7s 和 end='' 的用法,其他没什么。

'''

for i in range(1,10):

for j in range(1,10):

if j<=i:

string = '%d*%d=%d'%(j,i,j*i)

print('%-7s'%string,end='')

print('')

def tm008_1():

'''

csdn用户isgoto用format方法生成字符串,也可以参考。

用循环到i+1的方法,比上面还能少写一行。

'''

for i in range(1,10):

for j in range(1, i + 1):

print("{0} * {1} = {2}".format(i, j, i * j),end=" ")

print()

'''

题目009:暂停一秒输出。

'''

def tm009():

'''

【个人备注】:time.sleep(),用过的都知道。

'''

import time

a = time.time()

time.sleep(1)

b = time.time()

print(b-a)

'''

题目010:暂停一秒输出,并格式化当前时间。

'''

def tm010():

'''

【个人备注】:用过几次,用过就忘。

'''

import time

a = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) # time.localtime()时间戳转化成时间元祖

print(a)

time.sleep(1)

b = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) # time.strftime()时间元祖转化成时间文本

print(b)

'''

题目011:古典问题:

有一对兔子,

从出生后第3个月起每个月都生一对兔子,

小兔子长到第三个月后每个月又生一对兔子。

假如兔子都不死。

问每个月的兔子总数为多少?

'''

def tm011():

'''

其实这道题就是斐波那契数列的由来。

【个人备注】:理清思路是关键,理解成满两个月后,每月都能生兔子,就好办了。

'''

m1=1 # 满月

m2=0 # 满俩月(下个月生兔子)

mm=0 # 可以月月生兔子了

for i in range(1,10):

# 过了1个月后

mm = mm+m2 # 加入新增成年的兔子

m2 = m1 # 满月的变成满俩月

m1 = mm # 这个月新出生兔子

print(i,mm+m1+m2) # 每个月有多少对兔子

'''

题目012:判断101-200之间有多少个素数,并输出所有素数。

'''

def tm012():

'''

【个人备注】:按照素数不能被之前

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值