原链接:https://blog.csdn.net/weixin_41084236/article/details/81564963
原菜鸟教程:https://www.runoob.com/python/python-100-examples.html

001:数字组合

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

#anan
num = [1, 2, 3, 4]for i in num:for j in num:if j != i:for k in num:if k != i and k != j:print("%d " %(i*100 + j*10 + k), end="")

安安笔记
1.range
Python3 range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表。
Python3 list() 函数是对象迭代器,可以把range()返回的可迭代对象转为一个列表,返回的变量类型为列表。
Python2 range() 函数返回的是列表

>>> range(1, 5)
range(1, 5)
>>> list(range(5))
[0, 1, 2, 3, 4]

2.combinations和permutations返回的是对象地址,原因是在python3里面,
返回值已经不再是list,而是iterators(迭代器),
所以想要使用,只用将iterator 转换成list 即可,
还有其他一些函数返回的也是一个对象,需要list转换,比如 list(map())等 。

********** 原博客 *********
程序分析 遍历全部可能,把有重复的剃掉。

total=0
for i in range(1,5):for j in range(1,5):for k in range(1,5):if ((i!=j)and(j!=k)and(k!=i)):print(i,j,k)total+=1
print(total)

简便方法 用itertools中的permutations即可。

import itertools
sum2=0
a=[1,2,3,4]
for i in itertools.permutations(a,3):print(i)sum2+=1
print(sum2)

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,求应发放奖金总数?

#anan
bonus_10_max = 10*0.1
bonus_20_max = 10*0.1 + (20-10)*0.075
bonus_40_max = 10*0.1 + (20-10)*0.075 + (40-20)*0.05
bonus_60_max = 10*0.1 + (20-10)*0.075 + (40-20)*0.05 + (60-40)*0.03
bonus_100_max = 10*0.1 + (20-10)*0.075 + (40-20)*0.05 + (60-40)*0.03 + (100-60)*0.015profit = float(input("Please input profit(以万元为单位): "))if profit <= 10:bonus = profit*0.1
elif 10 < profit <= 20:bonus = bonus_10_max + (profit-10)*0.075
elif 20 < profit <= 40:bonus = bonus_20_max + (profit-20)*0.05
elif 40 < profit <= 60:bonus = bonus_40_max + (profit-40)*0.03
elif 60 < profit <= 100:bonus = bonus_60_max + (profit-60)*0.015
else:bonus = bonus_100_max + (profit-100)*0.01print(bonus)

上面的那个真的是太傻了
借鉴了一下原博客的写法,对自己的代码进行了改进

#anan_improve
thresholds = [100000, 200000, 400000, 600000, 1000000]
rate = [0.1, 0.075, 0.05, 0.03, 0.015, 0.01]profit = float(input("Please input profit: "))
bonus = 0#for i in len(thresholds):   TypeError: 'int' object is not iterablefor i in range(len(thresholds)):if profit <= thresholds[i]:bonus += (profit-thresholds[i-1])*rate[i]else:bonus += thresholds[i]*rate[i]print(bonus)

安安笔记
上面错误形象表示:不能直接写for i in 5 要写成for i in range(5)

********** 原博客 *********
程序分析 分区间计算即可。

profit=int(input('Show me the money: '))
bonus=0
thresholds=[100000,100000,200000,200000,400000]
rates=[0.1,0.075,0.05,0.03,0.015,0.01]
for i in range(len(thresholds)):if profit<=thresholds[i]:bonus+=profit*rates[i]profit=0breakelse:bonus+=thresholds[i]*rates[i]profit-=thresholds[i]
bonus+=profit*rates[-1]
print(bonus)

003:完全平方数

题目 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
(注意注意)自己下面的这个应该写的不对,之前理解题意有问题,读者需自行斟酌

#anan
import math#判断一个数是不是整数  和小数相比较
def isInteger(num):num = num*1.0   s = str(num).split(".")if s[1] == "0":return Trueelse:return Falsenum = 0while True:if isInteger(math.sqrt(num+100)) and isInteger(math.sqrt(num+268)):breakelse:num += 1print(num)

安安笔记
1.完全平方数是这样一种数:它可以写成一个正整数的平方。例如,36是6×6,49是7×7。
2.Python isdigit() 方法检测字符串是否只由数字组成。
3.不用那么麻烦导入math模块
求x的平方根:x ** 0.5
求x的平方:x ** 2
4.python 判断一个数是整数还是小数
另一种方法:int(num) == num
将这个数转换为整数,看看是否与原数相等

#别人
a=81**0.5
s=str(a).split('.')
if float(s[1])==0:print('整数')
else :print('小数')
#anan
#判断一个数是不是整数  和小数相比较
def isInteger(num):num = num*1.0   print(type(num))s = str(num).split(".")print(s)if s[1] == "0":return Trueelse:return Falseprint(isInteger(2.0))
print(isInteger(2.1))
print(isInteger(2))-------
<class 'float'>
['2', '0']
True
<class 'float'>
['2', '1']
False
<class 'float'>
['2', '0']
True

********** 原博客 *********
程序分析 因为168对于指数爆炸来说实在太小了,所以可以直接省略数学分析,用最朴素的方法来获取上限:

n=0
while (n+1)**2-n*n<=168:n+=1print(n+1)
----------85

思路是:最坏的结果是n的平方与(n+1)的平方刚好差168,由于是平方的关系,不可能存在比这更大的间隙。
至于判断是否是完全平方数,最简单的方法是:平方根的值小数为0即可。
结合起来:

n=0
while (n+1)**2-n*n<=168:n+=1for i in range((n+1)**2):if i**0.5==int(i**0.5) and (i+168)**0.5==int((i+168)**0.5):print(i-100)

004:这天第几天

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

#!/usr/bin/python
# -*- coding: utf-8 -*-#anan 2019.10.17
#题目 输入某年某月某日,判断这一天是这一年的第几天?def isLeapYear(year):year = int(year)if (year%400 == 0 or (year%100 != 0 and year%4 == 0)) :return Trueelse:return False#date格式:1998.10.10
def dayNumber(date): month_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]days_per_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]tmp = date.split(".")year = int(tmp[0])month = int(tmp[1])day = int(tmp[2])day_number = 0# print(tmp) # print(year, month, day)for i in range(len(month_list)):if month > month_list[i]:day_number += days_per_month[i]else:day_number += daybreakif isLeapYear(year) and month > 2:day_number += 1return day_numberprint(dayNumber("2000.3.2"))    #62
print(dayNumber("1998.10.10"))  #283

安安笔记
1 month_list其实可以不用写
2.原博客写的很简洁 直接用month来生成range(month)
3.代码优化:

#优化前
def isLeapYear(year):year = int(year)if (year%400 == 0 or (year%100 != 0 and year%4 == 0)) :return Trueelse:return False#优化后
def isLeapYear(y):return (y%400==0 or (y%4==0 and y%100!=0))

********** 原博客 *********
程序分析 特殊情况,闰年时需考虑二月多加一天:

def isLeapYear(y):return (y%400==0 or (y%4==0 and y%100!=0))
DofM=[0,31,28,31,30,31,30,31,31,30,31,30]
res=0
year=int(input('Year:'))
month=int(input('Month:'))
day=int(input('day:'))
if isLeapYear(year):DofM[2]+=1
for i in range(month):res+=DofM[i]
print(res+day)

005:三数排序

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

#!/usr/bin/python
# -*- coding: utf-8 -*-#anan 2019.10.17
#题目 输入三个整数x,y,z,请把这三个数由小到大输出。n = int(input("请输入要比较的整数的个数:"))
print("请输入要比较的整数:")
num = []for i in range(n):num.append(int(input()))
print(num)
num.sort()
print(num)

安安笔记
1.x=int(input('int%d: '%(i)))
2.print(sorted(raw2)) raw2是一个列表

raw2 = []
for i in range(3):x=int(input('int%d: '%(i)))raw2.append(x)---------
int0: 3
int1: 5
int2: 1

********** 原博客 *********
程序分析 练练手就随便找个排序算法实现一下,偷懒就直接调函数。

raw=[]
for i in range(3):x=int(input('int%d: '%(i)))raw.append(x)for i in range(len(raw)):for j in range(i,len(raw)):if raw[i]>raw[j]:raw[i],raw[j]=raw[j],raw[i]
print(raw)raw2=[]
for i in range(3):x=int(input('int%d: '%(i)))raw2.append(x)
print(sorted(raw2))

006:斐波那契数列

题目 斐波那契数列。

安安笔记
1.list1 = [1, 2, 3, 4, 5]
list1[0:2] 包含0, 不包含2
def Fib(n):
return 1 if n<=2 else Fib(n-1)+Fib(n-2)

********** 原博客 *********
程序分析 斐波那契数列(Fibonacci sequence),从1,1开始,后面每一项等于前面两项之和。图方便就递归实现,图性能就用循环。

# 递归实现
def Fib(n):return 1 if n<=2 else Fib(n-1)+Fib(n-2)
print(Fib(int(input())))# 朴素实现
target=int(input())
res=0
a,b=1,1
for i in range(target-1):a,b=b,a+b
print(a)

007:copy

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

#!/usr/bin/python
# -*- coding: utf-8 -*-#anan 2019.10.17
#题目 将一个列表的数据复制到另一个列表中。list1 = [1, 3, 2, 6, 8, 4]
list2 = list1
print(list2)

安安笔记
1 正所谓,无知者无畏,自己觉得这个题好简单,出题人就是个傻子,原来有这么多知识在里面呀,受教了,受教了

copy仅拷贝对象本身,而不对其中的子对象进行拷贝,故对子对象进行修改也会随着修改。(例如下面的:[1,2,3, [2,3],4] 其中[2,3] 就是子对象)
deepcopy是真正意义上的复制,即重新开辟一片空间。我们经常说的复制实际上就是deepcopy.(深拷贝之后的对象是不受原对象的影响,无论原对象发生什么修改,深拷贝的对象都不会发生改变)

********** 原博客 *********
程序分析 使用列表[:],拿不准可以调用copy模块。

import copy
a = [1,2,3,4,['a','b']]b = a                  # 赋值
c = a[:]               # 浅拷贝
d = copy.copy(a)       # 浅拷贝
e = copy.deepcopy(a)   # 深拷贝a.append(5)
a[4].append('c')print('a=',a)
print('b=',b)
print('c=',c)
print('d=',d)
print('e=',e)============ RESTART: F:\PyWorkspace\Python100\100examples\007.py ============
a= [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b= [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c= [1, 2, 3, 4, ['a', 'b', 'c']]
d= [1, 2, 3, 4, ['a', 'b', 'c']]
e= [1, 2, 3, 4, ['a', 'b']]

008:九九乘法表

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

#!/usr/bin/python
# -*- coding: utf-8 -*-#anan 2019.10.17
#题目 输出 9*9 乘法口诀表。for i in range(1, 10):for j in range(1, i+1):print("%dx%d=%-2d " %(j, i, i*j), end='')#print("\n")    #有间隔print("")       #无间隔#print()        #无间隔--------
1x1=1  1x2=2  2x2=41x3=3  2x3=6  3x3=91x4=4  2x4=8  3x4=12 4x4=16 1x5=5  2x5=10 3x5=15 4x5=20 5x5=251x6=6  2x6=12 3x6=18 4x6=24 5x6=30 6x6=361x7=7  2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=491x8=8  2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=641x9=9  2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
----------
1x1=1
1x2=2  2x2=4
1x3=3  2x3=6  3x3=9
1x4=4  2x4=8  3x4=12 4x4=16
1x5=5  2x5=10 3x5=15 4x5=20 5x5=25
1x6=6  2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7  2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8  2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9  2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81

print()默认会输出回车
#print("\n") #有间隔
print("") #无间隔
#print() #无间隔

********** 原博客 *********
程序分析 分行与列考虑,共9行9列,i控制行,j控制列。

for i in range(1,10):for j in range(1,i+1):print('%d*%d=%2ld '%(i,j,i*j),end='')print()

009:暂停一秒输出

题目 暂停一秒输出。

几个时间函数的讲解,可点击此处进行了解

********** 原博客 *********
程序分析 使用 time 模块的 sleep() 函数。

import time
for i in range(4):print(str(int(time.time()))[-2:])time.sleep(1)

010:给人看的时间

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

********** 原博客 *********
程序分析 同009.

import timefor i in range(4):print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))time.sleep(1)

011:养兔子

题目 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

#!/usr/bin/python
# -*- coding: utf-8 -*-#anan 2019.10.20#初始化
month_1 = 1
month_2 = 0
month_old = 0
month = 12for i in range(month):total = month_1 + month_2 + month_oldprint("第%2d个月的兔子:month_1=%5d, month_2=%5d, month_old=%5d, total=%5d" %(i+1, month_1, month_2, month_old, total))month_old = month_old + month_2month_2 = month_1   month_1 = month_old

********** 原博客 *********
程序分析 我认为原文的解法有点扯,没有考虑3个月成熟的问题,人家还是婴儿怎么生孩子?考虑到三个月成熟,可以构建四个数据,其中:一月兔每个月长大成为二月兔,二月兔变三月兔,三月兔变成年兔,成年兔(包括新成熟的三月兔)生等量的一月兔。

month=int(input('繁殖几个月?: '))
month_1=1
month_2=0
month_3=0
month_elder=0
for i in range(month):month_1,month_2,month_3,month_elder=month_elder+month_3,month_1,month_2,month_elder+month_3print('第%d个月共'%(i+1),month_1+month_2+month_3+month_elder,'对兔子')print('其中1月兔:',month_1)print('其中2月兔:',month_2)print('其中3月兔:',month_3)print('其中成年兔:',month_elder)

********** 原菜鸟教程 *********
原菜鸟教程第11题

#!/usr/bin/python
# -*- coding: UTF-8 -*-f1 = 1
f2 = 1
for i in range(1,22):print '%12ld %12ld' % (f1,f2),if (i % 3) == 0:print ''f1 = f1 + f2f2 = f1 + f2

012:100到200的素数

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

#!/usr/bin/python
# -*- coding: utf-8 -*-#anan 2019.10.20
#题目 判断101-200之间有多少个素数,并输出所有素数。sum = 0
flag = 1  #素数 prime number
prime = []
num_begin = 101
num_end = 200def isPrimeNumber(num):for i in range(2, int(num**0.5)+1):if num%i == 0:return Falsereturn Truefor i in range(num_begin, num_end+1):if isPrimeNumber(i):sum += 1prime.append(i)
print("素数的总数为:%d" %sum)
print(prime)------
素数的总数为:21
[101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199]

********** 原博客 *********
程序分析 判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。 用else可以进一步简化代码.

import math
for i in range(100,200):flag=0for j in range(2,round(math.sqrt(i))+1):if i%j==0:flag=1breakif flag:continueprint(i)print('\nSimplify the code with "else"\n')for i in range(100,200):for j in range(2,round(math.sqrt(i))+1):if i%j==0:breakelse:print(i)

013:所有水仙花数

题目 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

#!/usr/bin/python
# -*- coding: utf-8 -*-#anan 2019.10.20
#题目 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。def isDaffodilNumber(num):return num == (num//100%10)**3 + (num//10%10)**3 + (num//1%10)**3for i in range(100, 1000):if isDaffodilNumber(i):print("%d " % i, end="")# 153 370 371 407

安安笔记
原博客中作者的思路很好,将数字先转化成字符串,抽取其中的位数,再转化回来

********** 原博客 *********
程序分析 利用for循环控制100-999个数,每个数分解出个位,十位,百位。

for i in range(100,1000):s=str(i)one=int(s[-1])ten=int(s[-2])hun=int(s[-3])if i == one**3+ten**3+hun**3:print(i)

********** 原菜鸟教程 *********

for n in range(100,1000):i = n / 100j = n / 10 % 10k = n % 10if n == i ** 3 + j ** 3 + k ** 3:print n

经过下面验证, 菜鸟教程这种方法是不可行的

>>> 123 / 10
12.3
>>> 123 / 10 % 10
2.3000000000000007>>> 123 //10
12
>>> 123 // 10 % 10
2

014:分解质因数

题目 将一个整数分解质因数。例如:输入90,打印出90=233*5。

#!/usr/bin/python
# -*- coding: utf-8 -*-#anan 2019.10.20
#题目 将一个整数分解质因数。例如:输入90,打印出90=233*5def isPrimeNumber(num):for i in range(2, int(num**0.5)+1):if num%i == 0:return Falsereturn Truedef printFormat(num, *prime_list):print("%d = " % num, end="")for i in range(len(prime_list)):print("%d" % prime[i], end="")if i != (len(prime_list) - 1):#print(i)print("*", end="")num = int(input("请输入一个整数:"))
prime = []
tmp = numwhile True:       for i in range(2, int(num**0.5)+1):if tmp%i == 0:prime.append(i)if isPrimeNumber(tmp/i):prime.append(int(tmp/i))tmp = int(tmp/i)breakif isPrimeNumber(tmp):breakprintFormat(num, *prime)

安安笔记
1.python之列表作为函数的参数

def get_sum(*args):res = 0for i in args:res += iprint(res)lista = [1, 2, 3]
get_sum(*lista)print('-' * 40)#get_sum(*lista) 解包列表

********** 原博客 *********
程序分析 根本不需要判断是否是质数,从2开始向数本身遍历,能整除的肯定是最小的质数。

target=int(input('输入一个整数:'))
print(target,'= ',end='')if target<0:target=abs(target)print('-1*',end='')flag=0
if target<=1:print(target)flag=1while True:if flag:breakfor i in range(2,int(target+1)):if target%i==0:print("%d"%i,end='')if target==i:flag=1breakprint('*',end='')target/=ibreak

015:分数归档

题目 利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

********** 原博客 *********
程序分析 用条件判断即可。

points=int(input('输入分数:'))
if points>=90:grade='A'
elif points<60:grade='C'
else:grade='B'
print(grade)

016:输出日期

题目 输出指定格式的日期。
********** 原博客 *********
程序分析 使用 datetime 模块。

import datetime
print(datetime.date.today())
print(datetime.date(2333,2,3))
print(datetime.date.today().strftime('%d/%m/%Y'))
day=datetime.date(1111,2,3)
day=day.replace(year=day.year+22)
print(day)

017:字符串构成

题目 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

********** 原博客 *********
程序分析 利用 while 或 for 语句,条件为输入的字符不为 ‘\n’。

string=input("输入字符串:")
alp=0
num=0
spa=0
oth=0
for i in range(len(string)):if string[i].isspace():spa+=1elif string[i].isdigit():num+=1elif string[i].isalpha():alp+=1else:oth+=1
print('space: ',spa)
print('digit: ',num)
print('alpha: ',alp)
print('other: ',oth)

安安笔记
1.表示方法
string[i].isspace()
string[i].isdigit()

018:复读机相加

题目 求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。

#!/usr/bin/python
# -*- coding: utf-8 -*-#anan 2019.10.20
#题目 求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。a = input("请输入要相加的基数:")
count = int(input("请输入要相加的次数:"))
sum = 0for i in range(count):a_new = a*(i+1)sum += int(a_new)print(sum)

原博客:用了a += a[0] 我用的是* 效果是一样的

********** 原博客 *********
程序分析 用字符串解决。

a=input('被加数字:')
n=int(input('加几次?:'))
res=0
for i in range(n):res+=int(a)a+=a[0]
print('结果是:',res)

019:完数

题目 一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。

#!/usr/bin/python
# -*- coding: utf-8 -*-#anan 2019.10.20
#题目 一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。# 基本释义:指整数a除以整数b(b≠0) 的商正好是整数而没有余数,b是a的因数。
# 例句:若a是b的因数,且a是质数,则称a是b的质因数。
# 扩展资料:
# 在小学数学里,两个正整数相乘,那么这两个数都叫做积的因数,或称为约数。假如a*b=c(a、b、c都是整数),那么就称a和b就是c的因数。需要注意的是,唯有被除数,除数,商皆为整数,余数为零时,此关系才成立。 反过来称c为a、b的倍数。 # 因子不包括数本身       因数包括
# 如10的因子是1,2,5    因数是1,2,5,10# 完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。如果一个数恰好等于它的因子之和,则称该数为“完全数”。第一个完全数是6,第二个完全数是28,第三个完全数是496,后面的完全数还有8128、33550336等等。def isPerfectNumber(num):divisor = [1]  #存放数num所有的因子sum = 0if num == 1:return Falsefor i in range(2, int(num**0.5)+1):if num%i == 0:divisor.append(i)divisor.append(int(num/i))#print(divisor)for i in range(len(divisor)):sum += divisor[i]return num == sumfor i in range(10000):if isPerfectNumber(i):print(i)

********** 原博客 *********
程序分析 将每一对因子加进集合,在这个过程中已经自动去重。最后的结果要求不计算其本身。

def factor(num):target=int(num)res=set()for i in range(1,num):if num%i==0:res.add(i)res.add(num/i)return resfor i in range(2,1001):if i==sum(factor(i))-i:print(i)

020:高空抛物

题目 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

#!/usr/bin/python
# -*- coding: utf-8 -*-#anan 2019.10.20
#题目 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?height = 100
total = 100for i in range(10):print("总高度:%.4f       " % total, end="")height /= 2total += height*2       print("第%2d次反弹的高度:%.4f  " %(i+1, height))

安安笔记
1.学习format格式化
print(‘总高度:tour = {0}’.format(sum(tour)))

021:猴子偷桃

题目 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

#!/usr/bin/python
# -*- coding: utf-8 -*-#anan 2019.10.22
#题目 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。total = [0,0,0,0,0,0,0,0,0,1]
left =  [0,0,0,0,0,0,0,0,0]for i in range(8, -1, -1):#print(i, end=" ")left[i] = total[i+1]total[i] = (left[i]+1)*2print(total)
print(left)# [1534, 766, 382, 190, 94, 46, 22, 10, 4, 1]
# [766, 382, 190, 94, 46, 22, 10, 4, 1]

安安笔记
1.range(5,0,-1) 5,4,3,2,1
range(4,-1,-1) 4,3,2,1,0

022:比赛对手

题目 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

自己是按照当时C语言中的思路来做的,但是python中有一个神奇的东西,叫做集合,可以删除重合的数据,见原博客

#!/usr/bin/python
# -*- coding: utf-8 -*-#anan 2019.10.22
#题目 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。team = ["x", "y", "z"]for i in team:for j in team:if j != i:for k in team:if k!=i and k!=j:if i=="x" or k=="x" or k=="z":continueprint(i,j,k)
a = set(["x", "y", "z"])
b = set(["x", "y", "z"])
c = set(["x", "y", "z"])for i in a:for j in b:for k in c:if len(set([i, j, k])) == 3:print(i, j, k)# x z y
# x y z
# z x y
# z y x
# y x z
# y z x

********** 原博客 *********
程序分析 找到条件下不重复的三个对手即可。

a=set(['x','y','z'])
b=set(['x','y','z'])
c=set(['x','y','z'])
c-=set(('x','z'))
a-=set('x')
for i in a:for j in b:for k in c:if len(set((i,j,k)))==3:print('a:%s,b:%s,c:%s'%(i,j,k))

024:斐波那契数列II

题目 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。

#!/usr/bin/python
# -*- coding: utf-8 -*-#anan 2019.10.22
#题目 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。fenzi = 2
fenmu = 1
sum = 0for i in range(20):sum += fenzi/fenmu#print(i, fenzi, fenmu, sum)tmp = fenzifenzi = fenzi + fenmufenmu = tmpprint(sum)#32.6602607986

安安笔记
自己的方法还是用了C语言中的方法,殊不知,python中有更直白的方法(交换两个变量的值,a, b = b, a),原因如下,原博客的代码就是直接这样写的
Python的变量并不直接存储值,而只是引用一个内存地址,交换变量时,只是交换了引用的地址。

********** 原博客 *********
程序分析 就是斐波那契数列的后一项除以前一项。

a = 2.0
b = 1.0
s = 0
for n in range(1,21):s += a / ba,b = a + b,a
print (s)

025: 阶乘求和

题目 求1+2!+3!+…+20!的和。

********** 原博客 *********
程序分析 1+2!+3!+…+20!=1+2(1+3(1+4(…20(1))))

res=1
for i in range(20,1,-1):res=i*res+1
print(res)

********** 原菜鸟教程 *********

#!/usr/bin/python
# -*- coding: UTF-8 -*-s = 0
l = range(1,21)
def op(x):r = 1for i in range(1,x + 1):r *= ireturn r
s = sum(map(op,l))
print '1! + 2! + 3! + ... + 20! = %d' % s

安安笔记
python map函数

>>>def square(x) :            # 计算平方数
...     return x ** 2
...
>>> map(square, [1,2,3,4,5])   # 计算列表各个元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5])  # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]# 提供了两个列表,对相同位置的列表数据进行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]

026:递归求阶乘

题目 利用递归方法求5!。

#!/usr/bin/python
# -*- coding: utf-8 -*-#anan 2019.10.23
#题目 利用递归方法求5!。def factorial(n):return 1 if n == 1 else n*factorial(n-1)print(factorial(4))

027:递归输出

题目 利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来

#!/usr/bin/python
# -*- coding: utf-8 -*-#anan 2019.10.23
#题目 利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。#法1:非递归调用
# def reverse(str):
#     print(str[::-1])#法2:递归调用
def reverse(str):print(str[-1], end="")return reverse(str[:-1]) if len(str[:-1]) != 0 else print(" ")reverse("anan")
reverse("xinxin")

安安笔记
1.python怎么把字符串最后一个字符去掉
说明:python去除字符串最后一个字符可以使用简单的切片法。
代码:

s = ‘abcdef’
print(s[:-1])
输出:abcde

备注:s[:-1]的意思就是s字符串取从第0个字符至倒数第一个字符的前一个字符,这样就达到了去掉最后一个字符的目的。

2.使用字符串长度判断
len(s) ==0 则字符串为空

028:递归求等差数列

题目 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

#!/usr/bin/python
# -*- coding: utf-8 -*-#anan 2019.10.23
#题目 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?def age(n):return age(n-1) +2 if n != 1 else 10print(age(5))

实例029:反向输出

题目 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

#!/usr/bin/python
# -*- coding: utf-8 -*-#anan 2019.10.23
#题目 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。n = input("请输入一个不对于5位的正整数:")
print("%s的位数为:%d,逆序输出为:%s" %(n, len(n), n[::-1]))

030:回文数

题目 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

#!/usr/bin/python
# -*- coding: utf-8 -*-#anan 2019.10.23
#题目 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。def huiwenshu(n):n = str(n)for i in range(len(n)//2):if n[i] != n[-1-i]:return Falsereturn Trueprint(huiwenshu(12345))
print(huiwenshu(12321))

031:字母识词

题目 请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

#!/usr/bin/python
# -*- coding: utf-8 -*-#anan 2019.10.23
#题目 请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。week = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]character = input("请输入一个字符(单词首字母大写):")
week1 = []
n = 0while True:for i in week:if i[n] == character:week1.append(i)week = week1[:]week1.clear()#print(week)if len(week) == 1:print(week[0])breakelse:print("字符匹配多个星期")character = input("请再输入一个字符:")n += 1

安安笔记
1.使用clear()方法清除列表

lists = [1, 2, 1, 1, 5]
lists.clear()
print(lists)

[]

2.关于clear之后,两个列表的关系

week1 = [1, 2, 3]
week = week1[:]
week
[1, 2, 3]
week1.clear()
week
[1, 2, 3]

********** 原博客 *********
程序分析 这里用字典的形式直接将对照关系存好。

weekT={'h':'thursday','u':'tuesday'}
weekS={'a':'saturday','u':'sunday'}
week={'t':weekT,'s':weekS,'m':'monday','w':'wensday','f':'friday'}
a=week[str(input('请输入第一位字母:')).lower()]
if a==weekT or a==weekS:print(a[str(input('请输入第二位字母:')).lower()])
else:print(a)

032:反向输出II

题目 按相反的顺序输出列表的值。

********** 原博客 *********
程序分析 无。

a = ['one', 'two', 'three']
print(a[::-1])

033:列表转字符串

题目 按逗号分隔列表。

********** 原博客 *********
程序分析 无。

L = [1,2,3,4,5]
print(','.join(str(n) for n in L))

安安笔记
1.已知输入形式是1+3+2+1,要求输出形式为1+1+2+3
print("+".join(sorted(input()[::2])))
or
print(’+’.join(sorted(input(“请输入:”).split(’+’))))
2.print(’,’.join(str(n) for n in L)) 还能这样写,太强了吧

036:算素数

题目 求100之内的素数。

在Python中,for-else用于处理遍历失败。
在for循环完整完成后才执行else;如果中途从break跳出,则连else一起跳出。

********** 原博客 *********
程序分析 用else执行for循环的奖励代码(如果for是正常完结,非break)。

lo=int(input('下限:'))
hi=int(input('上限:'))
for i in range(lo,hi+1):if i > 1:for j in range(2,i):if (i % j) == 0:breakelse:print(i)

037:排序

题目 对10个数进行排序。

038:矩阵对角线之和

题目 求一个3*3矩阵主对角线元素之和。

1.疑问:如何输入矩阵

mat=[[1,2,3],[3,4,5],[4,5,6],[5,6,7]]print(mat)
print(len(mat))# [[1, 2, 3], [3, 4, 5], [4, 5, 6], [5, 6, 7]]
# 4

********** 原博客 *********
程序分析 无。

mat=[[1,2,3],[3,4,5],[4,5,6]]
res=0
for i in range(len(mat)):res+=mat[i][i]
print(res)

********** 原博客 *********
********** 原菜鸟教程 *********


计算字符串中最后一个出现某种符号的下标

str = "I am %s, is a %s girl."
#第一个%的下标是5
#第二个%的下标是14  倒着数是7print(len(str))         #22
print(str.count("%"))   #2
print(str.index("%"))   #5
print(str[::-1].index("%"), str)    #7 I am %s, is a %s girl.
print(len(str)-str[::-1].index("%")-1)
print(str.index("%") + 1 + str[str.index("%")+1:].index("%"))

计算字符串中最后一个出现某种符号的下标


str = "I am %s, is a %s girl, is %d years old."
#第一个%的下标是5
#第二个%的下标是14  倒着数是7
#第三个%的下标是26  倒着数是12print(len(str))         #39
print(str[::-1].index("%"), str)    #12 I am %s, is a %s girl.
print(len(str)-str[::-1].index("%")-1)  #26  #计算字符串中最后一个出现某种符号的下标
print(str.index("%") + 1 + str[str.index("%")+1:].index("%"))  #14

split输出

str = "cpe:2.3:a:foxitsoftware:foxit_reader:*:*:*:*:*:*:*:*"
print(str.split(":"))
#['cpe', '2.3', 'a', 'foxitsoftware', 'foxit_reader', '*', '*', '*', '*', '*', '*', '*', '*']   生成一个列表


sorted排序

d = {"a":5, "b":1, "c":7}
print(sorted(d.items(), key=lambda item:item[1], reverse=True))
print(d)
#说明sorted排序不改变原序列 输出一个列表
# [('c', 7), ('a', 5), ('b', 1)]
# {'a': 5, 'b': 1, 'c': 7

}

python3 100例(安安)相关推荐

  1. python练手经典100例-python零基础练手项目100+

    文章目录 Python3 100例 实例001:数字组合 实例002:"个税计算" 实例003:完全平方数 实例004:这天第几天 实例005:三数排序 实例006:斐波那契数列 ...

  2. python输出一个简单的田字格、用函数简化其代码_Python练习100例,随时随地学习,菜鸟用了都说好...

    学习Python最害怕的是枯燥无味的,一定要注重Python实战! 新手用这100个Python实例测试下你的学习水平再好不过,Python前期的学习,尽量多练习,光学不练效率会很低,多练习其实也是给 ...

  3. Python3算法基础练习:编程100例( 21~ 25)

    往期练习: Python3算法基础练习:编程100例(1~5) Python3算法基础练习:编程100例(6 ~ 10) Python3算法基础练习:编程100例(11 ~ 15) Python3算法 ...

  4. Python3算法基础练习:编程100例(11 ~ 15)

    往期练习: Python3算法基础练习:编程100例(1~5) Python3算法基础练习:编程100例(6 ~ 10) Python3算法基础练习:编程100例(11 ~ 15) 11.兔子问题 1 ...

  5. Python3算法基础练习:编程100例( 31 ~ 35 )

    上期文章: Python3算法基础练习:编程100例( 26 ~ 30) 目录 31 判断星期几 32 反序输出列表 33 分隔列表 34 函数调用 35 文本加颜色 31 判断星期几 题目:请输入星 ...

  6. Python3算法基础练习:编程100例( 26 ~ 30)

    上期文章: Python3算法基础练习:编程100例( 21~ 25) 目录 26 递归求 20! 的阶乘 27 字符串反转 28 猜岁数 29 整数打印每一位数字 30 回文数 26 递归求 20! ...

  7. Python3算法基础练习:编程100例(6 ~ 10)

    往期练习: Python3算法基础练习:编程100例(1~5) Python3算法基础练习:编程100例(6 ~ 10) 6.斐波那契数列 7.列表复制 8.乘法口诀表 9.暂停输出 10.格式化时间 ...

  8. Python3算法基础练习:编程100例(1~5)

    Python3基础练习:编程100例(1~5) 1.无重复数字 2.发放奖金 3.完全平方数 4.判断这一天是这一年的第几天? 5.三个数从小到大输出 1.无重复数字 题目:有四个数字:1.2.3.4 ...

  9. python入门经典100例-Python3经典100例(含习题答案) DOC 清晰版

    给大家带来的一篇关于Python3入门相关的电子文档资源,介绍了关于Python3.python习题方面的内容,本书是由python学习社区出版,格式为DOC,资源大小46.6 KB,Mrs.莫建辉编 ...

最新文章

  1. 我的《超级马里奥》我做主:会漂移掉头还带刹车音效,C++从零打造,网友:小心任天堂找你...
  2. Qt编译过程中出现的问题
  3. SpringCloud Zuul(七)之POST Filter
  4. 如何使用sklearn优雅地进行数据挖掘?
  5. java学习(67):匿名内部类
  6. Hadoop配置机架感知
  7. JavaScript的数据结构与算法(三) —— 单向链表
  8. “中兴捧月”报文监视器的实现
  9. 【转载】qsort 与 bsearch 的魔力
  10. 基于Microsoft Translator API的vim翻译插件
  11. Stanford CS230深度学习(五)CNN和ResNet
  12. P1 Human Pose Estimation人体姿态综述估计调研
  13. intelliJ idea 激活和配置
  14. android jni 结构体_中高级安卓开发技术!Android开发核心知识笔记共2100页,完整版开放下载...
  15. 雷林鹏分享:jQuery EasyUI 数据网格 - 自定义排序
  16. Chrome小恐龙游戏前端修改代码【含原理和代码】
  17. 电脑在登陆界面如何打开计算机管理,无线路由器管理界面如何登录 无法进入管理界面怎么办...
  18. 在职攻读教育硕士专业学位有计算机专业吗,在职攻读教育硕士专业怎样?
  19. 根据订单id查询该订单和商品信息
  20. 台式计算机怎么设置,台式机双显卡怎么设置

热门文章

  1. Fiddler抓取主流新闻客户端搜索url
  2. python操作三大主流数据库视频教程_Python操作三大主流数据库
  3. 这些操作系统的概念你必须要知道
  4. Codeforces1442 D. Sum(dp+分治优化)
  5. 【愚公系列】2021年12月 攻防世界-简单题-REVERSE-005(game)
  6. 利用爬虫和Tkinter控件实现电影展示与收藏
  7. BUUCTF misc 梅花香自苦寒来
  8. html图片管理,图像管理器(ImageManager)
  9. 大牛项目经理10年经验分享!
  10. 制作一个中国蔬菜产量图