两万多字诠释python最经典基础算法之100题【内含思路、程序和答案】【python初学者必备】_zhulin1028的博客-CSDN博客_python基础算法题
题目1:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
L=[1,2,3,4]
a=0
for n in L:
sum=a+n*100
for m in L:
if m!=n:
sum1=a+m*10
for k in L:
if k != m and k != n:
sum2=a+k
print(sum+sum1+sum2)
#这个很好,慢慢试出来的。这个每次都拿a(值为0)加是一种不错的轮流使用每个数的思维。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
for i in range(1,5):
for k in range(1,5):
for j in range(1,5):
if (i != k) and (i != j) and (k != j):
print(i,j,k)
#这是给的答案。
#1,2,3,4四个数字能组成多少个互不相同的无重复数字的三位数?各是多少?
#要求:三位数,互不相同,无重复, 基础数字只有4个
#输入:无输入
#输出:输出所有的数字,且计算数字总共的个数
L=[1,2,3,4]
t=0
for i in range(1,5,1):
for j in range(1,5,1):
for k in range(1,5,1):
if i!=j!=k:
print(i,j,k)
t=t+1
print(t)
L=[31,28,31,30,31,30,31,31,30,31,30,30,31]
L1=[31,29,31,30,31,30,31,31,30,31,30,30,31]
x=input('请输入年份(例:2022):')
y=input('请输入月日(例:0301):')
x=int(x)
y=int(y)
sum=0
if x%400==0 or (x%4==0and x%100!=0):
m=y//100
for n in range(12):
if n<m-1:
sum=sum+L1[n]
else:
m=y//100
for n in [0,1,2,3,4,5,6,7,8,9,10,11]:
if n<m-1:
sum=sum+L[n]
k=sum+y-m*100
print('天数',k)
#注意,12月只把前11个月的天加满,再加单独的日子。
#if x%400==0 or (x%4==0and x%100!=0): 注意这个and or 的用法
range(12)==[0,1,2,3,4,5,6,7,8,9,10,11]
# -*- coding: UTF-8 -*-
year = int(input("请输入年份:"))
month = int(input("请输入月份:"))
day = int(input("请输入某一个月份的天数:"))
#将月份逐渐相加添加到列表中
months = [0,31,59,90,120,151,181,212,243,273,304,334]
if 0 < month <= 12:
sum = months[month-1]
else:
print("超出了年份的范围,年月份是你家定的啊!")
sum += day
if ((year % 400 == 0) or (year %4 == 0) and (year % 100 != 0)):
if(month > 2):
sum += 1
print('这一天是这一年的%d日'%sum)
#这个闰年的第几天就是,非闰年的天数加上一天
#输入某年某月某日 判断输入的是第几天
#输入,输出,计算
#输入:年月日
#输出:第几天
#计算:首先判断是闰年还是非闰年,然后通过输入的月份把此月份之前的日子加上,然后通过几号再加上这个月的天数就是这一天
#在这一年中的天数了
#闰年规则:能被4 整除,但不能被一百整除,或者能被400整除
t=input('请输入年月日(例:20220316)')
n=0
year=int(t[0:4])#这里用eval怎么用?
month=int(t[4:6])#这里用冒号“:”不能用逗号“,”
day=int(t[6:8])
if year%4!=0 or year%100==0:
if year%400==0:
L=[0,0,31,60,91,121,152,182,213,244,274,305,335]
n=n+L[month]
n=n+day
else:
L=[0,0,31,59,90,120,151,181,212,243,273,304,334]
n = n + L[month]
n = n + day
else:
L=L=[0,0,31,59,90,120,151,181,212,243,273,304,334]
n = n + L[month]
n = n + day
print('这是一年中的第%d天'%n)
x=input('x:')
y=input('y:')
z=input('z')
x=int(x)
y=int(y)
z=int(z)
L=[x,y,z]
L.sort()
print(L)
#L.sort()是把列表L从小到大排列。
#1、列表的成员函数:L.sort(),在原位重新排列列表,未创建新的列表;
# 2、内建函数:sorted(L),产生一个新的列表,不改变原列表;
#!/usr/bin/python
# -*- coding: UTF-8 -*-
first = int(input("请输入第一个数:"))
second = int(input("请输入第二个数字:"))
last = int(input("请输入第三个数字:"))
if((first > second) and (first > last) and (second > last)):
print(first,second,last)
if((last > second) and (last > first) and (second > last)):
print(last,second,last)
if((second > first) and (second > last) and (first > last)):
print(second,first,last)
#答案用的比较的方式
#输入3个整数,把这3个数从小到大输出
#输入:3个整数
#输出;从小到大排列的这3个整数
#计算;先比较将最小的赋值给T,然后比较剩下的,再赋值再输出
a=int(input('请输入一个整数:'))
b=int(input('请输入一个整数:'))
c=int(input('请输入一个整数:'))
if (a<=b) and (b<=c) and a<c:
print(a,b,c)
elif a<=b and b>=c and a<=c:
print(a,c,b)
elif a>=b and b>=c:
print(c,b,a)
elif a>=b and b<=c and a>=c:
print(b,c,a)
elif a>=b and b<=c and a<=c:#这里可以直接else 好像,在这种要求上就一种可能了。
print(b,a,c)
#总结并不一定要赋值什么的,也可以饱和式救援,直接列出他们的条件就可以了。
#题目4:斐波那契数列。
x=input('前几项:(直接输入数字)')
x=int(x)#开始没注意这个
b=1
n=2
if x==1:#开始没注意
print([1])
elif x==2:
print([1,1])
else:
L = [1, 1, 2]
while n<x-1:#开始是n<x-1,多输出了一项。,###while 相当于多个if的组合?
a=L[-2]+L[-1]
L.append(a)
n=n+1
print(L)#开始放在前面,输入1的时候,即输出[1],也输出[1,1,2]了。
print(len(L))#用来验证数列数量的正确性。
答案
#!/usr/bin/python
# -*- coding: UTF-8 -*-
n = int(input("请输入指定斐波那契的具体哪一个数值:"))
def name(n):
if (n == 1 or n == 2):
return 1
else:
return name(n-1) + name(n - 2)
print(name(n))
#第一项0第二项1,后面每一项是前两项之和
#输入:第几项
#输出:数列的前N项
#计算:不断叠加
n=int(input('请输入数列长度'))
L=[0]
t=1
a=0
b=1
c=0
while t<n:#用while不能用if 开始用了if导致只能输出长度为1的数列
L.append(b)
c=a+b
a=b
b=c
t=t+1
print(L)
题目5:将一个列表的数据复制到另一个列表中。 题目5:将一个列表的数据复制到另一个列表中。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
cla = [0,1,2,3,4,5,6,7,8,9]
alc = []
alc = cla.copy()
print(cla)
print(alc)
L=list(range(30))# 要顶格写 啊,一直报错,没找到原因,结果是没有顶格写。
print(L)
M=[]
for i in L:
M.append(i)
print(M)
第三次
#将一个列表中的数据复制到另一个列表中
#输入:无
#输出:另一个列表
#计算:将表1中的数据一个一个复制到另一个列表里:计算中表1的数据量,
L=[1,2,3,4,5,6]
n=len(L)
M=[]
for i in L:
M.append(i)
print(M)
题目6:输出 9*9 乘法口诀表。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
import numpy as np
L=np.array([])
for i in range (1,10):#为什么不能for i,j in rangge(10),range(10)
for j in range(1, 10):
k=i*j
print('%d*%d=%d'%(i,j,k),end=',')
print()
答案
#!/usr/bin/python
# -*- coding: UTF-8 -*-
for i in range(1,10):
for j in range(1,i+1):
print("%d*%d=%d" % (i,j,i*j),end = " ")
print()
#输出9*9乘法口诀
#输入:无
#输出99乘法口诀
for i in range(1,10):
for j in range(1,10):
m=i*j
print('%d*%d=%d'%(i,j,m),end=',')#%后面如果不止一个变量,要用括号括起来。 2.是%d 不是d%。
print(end='\n')#\t :表示空4个字符,类似于文档中的缩进功能,相当于按一个Tab键。\n :表示换行,相当于按一个 回车键\n\t : 表示换行的同时空4个字符。
题目7:暂停一秒输出。 程序分析:使用 time 模块的 sleep() 函数。
import time
print("kaishi")
time.sleep(3)
print("henshuai")
再次练习的结果:
#暂停输出一秒
#
from time import sleep
print('第一个输出')
sleep(1)#这个需不需要time.sleep
print('延迟了一秒输出')
答案
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import time
print time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
# 暂停一秒
time.sleep(1)
print time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
————————————————
版权声明:本文为CSDN博主「Ctrl精」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43468607/article/details/103205745
from datetime import datetime
import time
dt=datetime.now()
shijian=dt.strftime('%Y/%M/%d %H:%M:%S')
print('算好了,等一秒。')
time.sleep(1)
print(shijian)
#暂停输出一秒,并格式化当前时间
#先输出当前时间 暂停一秒再输出格式化之后的当前时间
from time import sleep
import time
import datetime
shijian=datetime.datetime.now()
geshi=time.strftime('%Y%m%d%H%M%S',time.localtime())
print('时间为:',shijian)#这里的shijian是的格式是字符,并不是变量。相当于一个已经加了"''"的字符串
sleep(1)
geshi=time.strftime('%Y%m%d%H%M%S',time.localtime())
print('一秒后:',end='')
print(geshi)
#题目9:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
#分析问题
#输入 输出 计算
#计算 一个自变量时间 可以设3个因变量 ,3生产单元设一个变量,每增加一个月,那个月的的生产单元乘以2,而 #生产单元# 也随月份变化
#存量单元,就是输出的当前月份有的兔子的对数,每个新的存量单元就是,旧的存量单元加上生产单元乘以2 #第三个变量输出是储存的当前的兔子的数量
#关于生产单元0120 3 45 1 6 2 7 3 8 4 9 6 10 9 11 13 i(k-1)+i(k-3)
#关于存量单元 k=1+i(1)+i(2)+.....i(k)
#
T=input('第几个月(例:1,2,3...):')
T=int(T)
L=[0,0,0,1]#这是生产单元的数量
i=3
def f(x):
return L[x-3]+L[x-1]
while i<T:
L.append(f(i+1))
i=i+1#这个循环让L的生产单元更新到输入的月份
j=0
M=1
while j<=T:
M=M+L[j]
j=j+1
print('%d月有%d对兔子'%(T,M))
#这次很重要的是把因变量进行了分离,分开解决,复合起来太复杂了。
#计算中分析选择 自变量 因变量和缕清他们的关系很重要。
答案
#不死神兔
# !/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 + f2
f2 = f1 + f2
##题目9:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
# #小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
#输入:月份
#输出:这个月份兔子的总数
#流程:1 0 2 3 5
# +0 +0 +1 +1 +2 +3 +5 +8
#增加的数列为在前面增加了一项的斐波那契数列
n=int(input('请输入月份'))
L=[0,0]
t=1
a=0
b=1
c=0
while t<n-1:#用while不能用if 开始用了if导致只能输出长度为1的数列
L.append(b)
c=a+b
a=b
b=c
t=t+1
print(L)
SUM=1
for i in L:
SUM=SUM+i#这里是SUM+i,不是1+i,因为SUM是不断跟之前的值叠加的,因为如果是1+i的话,SUM就不是叠加的了。
print('兔子的个数是:',SUM)
题目10:判断101-200之间有多少个素数,并输出所有素数。
#目10:判断101-200之间有多少个素数,并输出所有素数。
#分析问题 什么事素数?(除了一和本身没有其他因数的数) 如何确定一个数不是素数?
#过程中遇到的问题
L=list(range(101,201))
M=[]
for i in range(101,201):
for j in range(2,101):#这里可以改成(2,i-1),就对所有的素数符合定义。
# def notsu(n):
# return n%j==0
# M=list(filter(notsu,L))
if i%j==0 :#如果是不等号的话,每个都满足(因为每个数都要被除一下)。
print(i,j)
M.append(i)
N=[]
for k in L:
if k not in M: #这个很有用
N.append(k)
print(N)
print(len(N))
# !/usr/bin/python
# -*- coding: UTF-8 -*-
h = 0
leap = 1
from math import sqrt
from sys import stdout
for m in range(101, 201):
k = int(sqrt(m + 1))
for i in range(2, k + 1):
if m % i == 0:
leap = 0
break
if leap == 1:
print('%-4d' % m)
h += 1
if h % 10 == 0:
print('')
leap = 1
print('输出的素数的个数是: %d' % h)
#判断101-200之间有多少个素数:
#2、素数指的是在正整数范围内,大于1并且只能被1和自身整除的数。
#输入:一个数
#输出:是否为素数
#计算:从一到这个数每个都除一下
t=int(input('请输入一个正整数'))
if t>1:
m=0
for i in range(2,t):
n=t%i
if n==0:
print('%d不是素数'%t)
m=1
break#这个break很重要,不然就会输出几个“这不是一个素数”
if m==0:
print('%d是一个素数'%t)
if t==1:
print('1是一个素数')
m=0
for j in range(101,201):
for i in range(2,j):
n=j%i
if n==0:
m=m+1
break#这里的break很重要,如果没有break,那么一个非素数有几个公约数那么,在这个非素数里m就会+几。
m=100-m
print('101到200中间的素数有%d个'%m)
#题目11:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
#分析问题 输入 输出
#无输入 输出很直接
#三位数 各位立方和等于本身
for i in range(100,1000):
t=str(i)
bai=eval(t[0])
shi=eval(t[1])
ge=eval(t[2])
if i==bai**3+shi**3+ge**3:
print(i)
#总结: str 加上 eval 的组合 任取数字中的某一位数的效果很好
答案
#!/usr/bin/python
# -*- coding: UTF-8 -*-
for i in range(1,10):
for j in range(0,10):
for k in range(0,10):
u1 = pow(i,3) + pow(j,3) + pow(k,3)
u2 = i*100 + j*10 + k
if u1 == u2:
print("满足的水仙花数为:" + str(u1))
elif u1 < u2 or u1 > u2:
pass
else:
pass
答案的思路的 把他分成两个数相等的就是他的思路也很好。
#题目11:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
#分析问题 输入 输出
#输入:3位数
#输出:是否为水仙花数
#计算:用eval提取每个位置上的数。
t=input('请输入一个3位数:')
m=int(t)
a=eval(t[0])
b=eval(t[1])
c=eval(t[2])
if m==a**3+b**3+c**3:
print('%d是一个水仙花数'%m)
else:
print('%d不是一个水仙花数'%m)
print('水仙花数有:',end='')
for i in range(100,1000):
a = int(str(i)[0])
b = int(str(i)[1])
c = int(str(i)[2])
if i==a**3+b**3+c**3:
print(i,end=',')
题目12:学习成绩分类:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示
'''题目12:学习成绩分类:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示
分析问题,
输入 输出 计算
计算 判断分数范围 然后输出
'''
t=input('请输入名字:')
m=input('请输入分数:')
m=eval(m)
if m>=90:
print(t,':','A')
elif m>=60:
print(t, ':', 'B')
else:
print(t, ':', 'C')
这是改的一个录入学生成绩的程序
'''题目12:学习成绩分类:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示
分析问题,
输入 输出 计算
计算 判断分数范围 然后输出 如何循环关于 判断是否输入的计算? 用while 在循环末尾加上一个判断条件的输入或者改变条件?
'''
n=input('请输入输入(1) or 完成(2)(只用输入文字):')
d={}#不能放到循环里面去 否则d会不符按重置
if eval(n)==1:
while eval(n)==1:
t=input('请输入名字:')
m=input('请输入分数:')
m=eval(m)
d[t]=m
n=input('请输入输入(1) or 完成(2)(只用输入文字):')
print(d)
#这个循环内外的 input 很重要。
#while相当于很多个 if;for 相当于很多和陈述执行语句?
答案
#!/usr/bin/python
# -*- coding: UTF-8 -*-
score = int(input('输入分数:\n'))
if score >= 90:
grade = 'A'
elif score >= 60:
grade = 'B'
else:
grade = 'C'
print('%d 属于 %s' % (score,grade))
'''题目12:学习成绩分类:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示
分析问题,'''
#输入:学生的成绩
#输出:对应的字母
#计算:几个条件判断
t=float(input('请输入分数'))
if t<60:
print('该同学成绩为C')
elif t<=89:
print('该同学成绩为B')
else:
print('该同学成绩为A')
#题目13:获取当前的时间并输出指定格式的日期。
#输入:无输入 输出:格式化后的当前时间 #
#方法:导入 datetime库 获得时间并 在输出的时候格式化
import datetime
import time
dt=datetime.datetime.now()#为什么时两个datetime
dt=dt.strftime("%Y年%m月%d日%H时%M份%S秒")#为什么这个没有 time 或者 datetime 的前缀
print(dt)
#若from datetime import datetime 则使用datetime.now() 即可
#若import datetime 则要datetime.datetime.now()
#应该是第一个已经导入了datetime 函数 可以直接使用,第二个需要先指明datetime库再用datetime.now() 来使用函数。
【Python】日期时间格式化输出_暗潮汹涌的博客-CSDN博客_日期格式化输出python
这个里面有格式化时间的时候,各个符号代表什么的说明。
import datetime
import time
shijian=datetime.datetime.now()
print(shijian)
#shijian=str(shijian)
print(shijian.strftime('%Y年%m月%d日%H时%M分%S秒'))#只可以是这个格式,
# 不可以time.strftime(format,shijian),运行不出来,相关的可以研究一下
#题目14:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符输出的数并分别统计每一种类型的个数。
#输入:一行字符 输出:其中不同类型字符的数量
#计算:首先用len()函数统计数量,再分别把打字符串分成一个一个字符组成的单独的字符, 判断每一个字符为哪一种类型,然后
t=input('请输入字符串:')
n=len(t)
letter=0#这些先赋予变量,且先等于0 我在写计算规划的时候没有写。
shuzi=0
zhongwen=0
kongge=0
qitazifu=0
for i in range(n):
if '\u4e00' <= t[i] <= '\u9fff':#这里一开始中文会被算到 英文字符里面去,然后调整了一下顺序,先判断是否为中文就可以了。
#因为中文的判定条件更加的逼近,所有有重合的情况下先判定这个,可以避免中文的个数统计到英文里,而且经过这一筛查,下一个判断里的结果就不包含中文了。(更精确。)
zhongwen=zhongwen+1
elif t[i].isalpha():#汉字也会被算在里面(还有其他的除了英文的字符会被算在吗?)
letter=letter+1
elif t[i].isspace():
kongge=kongge+1
elif t[i].isdigit():
shuzi=shuzi+1
else:
qitazifu=qitazifu+1
print('英文字符有%d个,中文字符有%d个,数字有%d个,空格有%d个,其他字符有%d个'%(letter,zhongwen,shuzi,kongge,qitazifu))
print(n)
print(t)
(这个思路很好。)
#题目14:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符输出的数并分别统计每一种类型的个数。
#输入:一行字符
#输出:各个类型个字符的个数
#计算;用不同的函数分别同济中文个数,英文个数,数字个数,空格个数,以及其他类别的个数
t=input('请输入一串字符:')
n=len(t)
zimu=0
kongge=0
shuzi=0
zhongwen=0
qita=0
for i in t:
if '\u4e00' <= i <= '\u9fff':
zhongwen=zhongwen+1
elif i.isspace():#这里的函数ture,直接执行if的ture。(知识点)
kongge=kongge+1
elif i.isdigit():
shuzi=shuzi+1
elif i.isalpha():#这个是判断是否为字母的,就是中英文都算,所以放到后面,等中文的判断完了,不是中文,
# 再接着判断,否则输出的英文个数会包括中文的个数。
zimu=zimu+1
else:
qita=qita+1
print('英文个数为:%d,中文个数为:%d,数字个数为:%d,空格个数为%d,其他字符个数为%d'%(zimu,zhongwen,shuzi,kongge,qita))
答案:
#!/usr/bin/env python3
#先让其输入进行判断的字符串
InPut = input('输入任意字符:')
#列出四种类型的列表来盛放相应的字符
letters = []
spaces = []
digits = []
others = []
#这里用的是for循环
for i in iter(InPut):
# 对输入的字符串进行判断
if i.isalpha() == True: #为字母
letters.append(i)
elif i.isspace() == True: #为空字符就是空格
spaces.append(i)
elif i.isdigit() == True: #为数字
digits.append(i) #为其他不识别的东西
else:
others.append(i)
#此处的输出方法有很多种,这里只是其中的一种
print('''
字母: {}, 个数: {};
空字符: {}, 个数: {};
数字: {}, 个数: {};
其他: {}, 个数: {}'''.format(letters, len(letters), spaces, len(spaces), digits, len(digits), others, len(others)))
题目15:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
#题目15:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,
# 共经过多少米?第10次反弹多高?
#输入:无 输出:路程和第10次反弹的高度 计算:分开计算,第10次反弹的高度比较好计算,然后根据反弹的每次的高度来计算路程
t=100*(0.5**10)
print('第十次反弹的高度是%.15f米'%t)
n=100
m=100
for i in range(9):
n=0.5*n
m=n+m*2
print('路程是%.15f米'%m)
任意次反弹的。(精确度只在小数点后15 位)
#题目15:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,
# 共经过多少米?第10次反弹多高?
#输入:无 输出:路程和第10次反弹的高度 计算:分开计算,第10次反弹的高度比较好计算,然后根据反弹的每次的高度来计算路程
k=input('第几次反弹:')
k=eval(k)
t=100*(0.5**k)
print('第十次反弹的高度是%.15f米'%t)
n=100
m=100
for i in range(k-1):#for循环也可以用来直接循环想要的次数?这样可以吗?
n=0.5*n
m=n+m*2
print('路程是%.15f米'%m)
#题目15:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,
# 共经过多少米?第10次反弹多高?
#输入:无
#输出:第十次反弹的高度,还有一共的里程数。
#计算:设置一个变量计算每次的反弹的高度,然后叠加计算总的里程。
m=100
t=0
n=0
while t<10:
m=m*0.5
t=t+1
n=n+m*2#第二次到第九次的帅被 应该减去第十次反弹的高度加上第一次的高度
n=n+100-100*(0.5**10)
print('第四次的高度为%f,一共的里程为%f'%(m,n))
这个是print 格式化输出的,帖子。
print()格式化输出_巧乐兹呀的博客-CSDN博客_print格式化
题目16:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。题目16:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
#几个数相加由键盘控制。
#输入:a的值,有几个数相加 输出:等式结果
#计算:首先 看有几个数相加,这个决定了有几项,最大的数有几位。
a=input('a的值为:')
t=input('有几个数相加:')
L=[]
t=int(t)
a=int(a)
m=a
s=0
for i in range(t):
L.append(a)#这个会修改自身 ,所有不能去赋予变量。(即不可以L=L.append(a))
a=a*10+m#这里不能是+a只能+m,因为这里是要加个位数,但是a已经改变不是个位数了,只能加一开始把个位数的a 赋值在的m。
#这里也是试运行了一下才改过来的。
for i in range(t):
s=s+L[i]
print(s)
#用了两个循环,一个确定a aa aaa aaa aaaaa..... 使得他们在一个列表中
#另一个把列表中每一个数相加。
#求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
#输入:a的值,还有加的次数
#输出:结果(带算式的结果)
#计算:for i in range(次数),
a=int(input('请输入a的值'))
t=int(input('请输入累加的次数'))
m=0
c=1
n=a
for i in range(1,(t+1)):#不能range(t),因为这里的i要用,是1到10。一开始用的range(t),结果错了。
while c<i:
n=n*10+n
c=c+1#没有这个的话t大于1时就会一直循环,运行不出来。因为C一直小于2
m=m+n
print('%d次%d的叠数相加的结果为:'%(t,a),m)
#题目17:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将
#剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
#输入: 输出:开始摘了多少个 计算:9次 一半减一 之后剩下一个
a=1
for i in range(9):
a=(a+1)*2
print(a)
不爆栈的递归的方法
#题目17:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将
#剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
#输入: 输出:开始摘了多少个 计算:9次 一半减一 之后剩下一个
def taozi(n,product):#q其实这就是两个变量,怎么命名都行。(day,num) 也行。
if n==9:
return product
return taozi(n+1,(product+1)*2)
print(taozi(0,1))
#题目17:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将
#剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
#输入;无
#输出:摘了的桃子
#计算:n=(n+1)*2
n=1
for i in range(9):
n=(n+1)*2
print('摘了%d个桃子'%n)
题目18:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
#题目18:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。
#已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
#输入:无 输出:xyz abc 三个人的对应 计算:
for a in ['x','y','z']:
for b in['x','y','z']:
for c in ['x','y','z']:
if a!='x' and c!='x' and c!='z':
if a!=b and b!=c and a!=c:
print('abc分别跟%s,%s,%s打'%(a,b,c))
##题目18:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。
#已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单
for a in ['x','y','z']:
for b in['x','y','z']:
for c in ['x','y','z']:
if a!='x':
if c!='x' and c!='z':
if a!=b and a!=c and b!=c:#这一步很重要。
print('abc分别和%c%c%c打'%(a,b,c))
题目19,输出以下图形

#题目19,输出以下图形
print(' *')
print(' ***')
print(' *****')
print('*******')
print(' *****')
print(' ***')
print(' *')
3:
##题目19:输出图形
for i in range(1,5):
print(' '*(4-i),end='')
print('*'*(2*i-1))
for i in range(1,4):
print(' '*i,end='')
print('*'*(2*(4-i)-1))
题目20:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
Python 中分数的使用。
python中如何运算分数_patrickpdx的博客-CSDN博客_python计算分数
#题目20:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
#输入:前多少项 输出:和 计算:递归函数,确定每项,再用一个空数组延长,求和。#递归函数不行 递归函数是由高到低停止的,或者到高的话有明显的可以预测的量,
#因为这个每一项不是可叠加的线性或者类似的增加
t=input('请输入第几项:')
t=int(t)
c=2
m=1
p=2
n=2
k=0
L=[2,1.5]
if t ==1:
print('2/1')
elif t==2:
print('7/2')
else:
while n<t:
n=n+1
c=m+p
m=p
p=c
d=p+m
L.append(d/c)
#print(c)
#print('%d/%d'%(d,c))
for i in L:
k=k+i
print(k)
#题目20:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和.
#输入 :
#输出:前20项之和
#计算:用之前的斐波那契数列分别构造分子分母,然后用Fraction函数构造成分数,然后求和。
from fractions import Fraction
L=[1]
t=1
a=1
b=2
c=0
while t<20:#用while不能用if 开始用了if导致只能输出长度为1的数列
L.append(b)
c=a+b
a=b
b=c
t=t+1
M=[2]
t=1
a=2
b=3
c=0
while t<20:#用while不能用if 开始用了if导致只能输出长度为1的数列
M.append(b)
c=a+b
a=b
b=c
t=t+1
z=0
for i in range(20):
print(Fraction(M[i],L[i]))
z=z+Fraction(M[i],L[i])
print(z)
#题目21:求1+2!+3!+...+20!的和。题目21:求1+2!+3!+...+20!的和。
n=0
def jiecheng(x,project):
if x==1:
return project
else:
return jiecheng(x-1,x*project)
for i in range(1,21):
n=n+jiecheng(i,1)
print(n)
#题目:#题目21:求1+2!+3!+...+20!的和。题目21:求1+2!+3!+...+20!的和。
def jiecheng(n):
if n==1:
return 1
return n*jiecheng(n-1)
t=0
for i in range(1,21):
t=t+jiecheng(i)
print('阶乘的结果为:',t)
#题目22:利用递归方法求5!。
t=input('阶乘:')
t=int(t)
n=1
def f(x,y):
while x>1:
y=y*x
x =x-1
return y
m=f(t,1)
print('结果为:',m)
#题目22:利用递归方法求5!。
def jiecheng(x,y):
if x==1 :
return y
return jiecheng(x-1,y*x)
print('5的阶乘是:',jiecheng(5,1))
题目23:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
t=input('请输入五个字符:')
def n(x):
m = len(x)
if m==1:
print(x)
else:
print(x[-1],end='')
x=x[0:-1]#注意一定是[0:-1],一开始写的[1:-1],导致老是少输出前面的几项。
return n(x)
n(t)
#出现了输入5个数,但是只反向输出3个数的情况。
#不是return n(x-1)算递归吗?
#题目22:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
#输入:输入5个字符
#输出:相反的顺序打印出来
#计算;递归函数
t=input('请输入5个字符:')
t=list(t)
def daoxu(x,y):
if len(x)==0:
return y
return daoxu(x[:-1],y+x[-1])#字符的增减可以直接用加号
print(daoxu(t,''))
j=' '+'1+''2'
print(j)
#题目24:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。
# 问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
a=10
for b in range(200):
for c in range(200):
for d in range(200):
for e in range(200):#所有变量要定义,就是要Bin range 多少,或者所有浮点数、整数等。对于变量至少要给定一个范围,不能直接给个变量。
if b==a+2:
if c==b+2:
if d==c+2:
if e==c+2:
print(e)
#题目24:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。
# 问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
diyi=10
for dier in range(200):#range()里的数字越大,运行出结果的时间就越久。
for disan in range(200):
for disi in range(200):
for diwu in range(200):
if dier==diyi+2 and disan==dier+2 and disi==disan+2 and diwu==disi+2:
print(diwu)
题目25:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字
#题目25:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字
t=input('请输入数字')
m=len(t)
print('这是%d位数'%m)
print(t[::-1])#直接用t就可以,不用eval函数
题目26:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
#题目26:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
#输入:五位数 输出:是回文数 不是回文数 计算:
t=input('请输入一个五位数:')
if t[0]==t[-1]:
if t[1]==t[-2]:
print('是回文数')
else:
print('不是回文数')
else:
print('不是回文数')
#用了之前的倒叙的代码
t=input('请输入一个不多于5位的正整数:')
print('正整数长度是:',len(t))
def daoxu(x,y):
if len(x)==0:
return y
return daoxu(x[:-1],y+x[-1])#字符的增减可以直接用加号
if daoxu(t,'')==t:
print('%s是一个回文数'%t)
else:
print('%s不是一个回文数'%t)
更进一步,输入任何整数判断是否为回文数。
#题目26:一个数字,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
#输入:数字数 输出:是回文数 不是回文数 计算:先判断就奇偶,判断几位数,然后根据奇偶不同给不同的相近的判定条件。
#这是一种新思路,相同的数的数量等于数字位数的一半,就是他有这么多相同的,也就是回文数。
t=input('输入一个数:')
m=len(t)
l=0
if m%2==0:
for i in range(m//2):#len函数 的结果是int型,不能直接用float来一起计算。(0.5是float数)
if t[i]==t[-i-1]:
l=l+1
if l==m//2:
print('是回文数')
else:
print('不是回文数')
elif m%2==1:
for i in range((m-1)//2):#range后面的的最后一个不包括,所以虽然最后一位要减一,但是在range里右象限自动不包括了,就相当于自动减了。
if t[i]==t[-i-1]:
l=l+1
if l==(m-1)//2:
print('是回文数')
else:
print('不是回文数')
#一开始,没注意range 函数不包括右象限,除了一位数,不管怎么运行都是“不是回文数”,因为比较前面和后面的数的时候,
# 都少比对了一对数,但是后面的数量是按所有的数量来算的所以数量对不上,就一直判定“不是回文数”。
问题:两个整数 不用整除,会是float数吗?
#题目27:添加逗号分隔列表成字符串。
#输入:列表 输出:用逗号分隔的字符串 计算:使用jion函数
t=['d','d','df','ds','da','dfa']
m='sep'.join(t)
print(m)
join函数的使用
python join()函数的用法_denise的博客-CSDN博客
#问题:将列表变成各元素以逗号分隔的字符串
t=['1','2','5','s','是的']#这里面只能是字符,不能是直接1234,要'1234'这样。
k=','.join(t)
print(k)
题目28:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。 程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母
#题目28:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
# 程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母
#输入:星期几的第一个或者第二个字母, 输出:星期几 计算:判断语句先判断第一个字母,无法判断就第二个
#星期一:Monday,英文缩写Mon。星期二:Tuesday,星期三:Wednesday星期四:Thursday,英文缩写Thur。
# 星期五:Friday,英文缩写Fri。星期六:Saturday,英文缩写Sat。星期日:Sunday,英文缩写Sun。
n=input('请输入第一个字母:')
if n=='m':
print('星期一')
elif n=='t':
n=input('请输入第二个字母:')
if n=='u':
print('星期二')
elif n=='h':
print('星期四')
elif n=='w':
print('星期三')
elif n=='f':
print('星期五')
elif n=='s':
n=input('请输入第二个字母:')
if n=='a':
print('星期六')
elif n=='u':
print('星期日')
#判断语句中 ,可以用变量是否等于字符串判定。是被允许的。
#题目28:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
#输入:星期几的前面的字母
#输出:星期几
#分析:Monday Tuesday Wednesday Thursday Friday Saturday Sunday
t=input('请输入首字母:')
if t=='M':#记得加冒号,因为这里的M是字母,不是变量。
print('周一')
elif t=='W':
print('周三')
elif t=='F':
print('周五')
elif t == 'S':
t=input('请输入第二个字母:')
if t=='a':
print('周六')
else:
print('周日')
elif t == 'T':
t = input('请输入第二个字母:')
if t=='u':
print('周二')
else:
print('周四')
题目032:按相反的顺序输出列表的值。
L=list(range(9))#range 是 iterator,不是 iterable。即generation,不是list
print(L[::-1])
题目033:按逗号分隔列表。
题目033:按逗号分隔列表
L=['1','2','3']
print('L.'.join(L))
Python中的join()函数_Ejasmine的博客-CSDN博客_join()函数
这个没看完,可以看看。
有一个很有意思的思路,就是for 循环加 str 加join函数,加eval函数,的使用。
L=['1',2,3,4,5]
M=[]
for i in L:
M.append(str(i))
print(M)
r='-'.join(M)
r=eval(r)
print(r)
题目036:求100之内的素数。
#题目036:求100之内的素数。
#输入:无
#输出;无
#计算:只能被自己和1整除,用%取余。
L=[]
for i in range(1,101):
for j in range(2,i):
if i%j==0:
# print(i)
L.append(i)
break
for i in range(1,101):
if i not in L:
print(i)
题目037:对10个数进行排序
#题目037:对10个数进行排序
#输入;无
#输出:排序好的十个数
#计算:sorted
a=[1,5,3,4,9,8,1,3,4,7,]
a.sort()
print(a)
b=sorted(a)
print(b)
#这两个上下结果是一样的,可以对比一下。
题目038:求一个3*3矩阵主对角线元素之和。
#题目038:求一个3*3矩阵主对角线元素之和。
#输入:无、
#输出:矩阵的迹
#计算:用trace
import numpy as np
a=np.random.randn(3,3)
b=a.trace()#记得括号,开始括号忘记打了b没有结果
print(a)
print(b)
#输入:无
#输出;插入到位置的排序好的列表
#计算;随机生成数组,排序,插入数据。
import numpy as np
L=np.random.random(6)
print(L)
L=sorted(L)
m=0.64126456
print(L)
for i in range(6):
if m>=L[i] and m<=L[i+1]:
L.insert(i+1,m)
break
print(L)
、
题目042:学习使用auto定义变量的用法
num = 2
def autofunc():
num=5
print('internal num = %d'%num)
for i in range(9):
num=num+1
print('num=%d'%num)
autofunc()
#有一个问题,这个num放在哪个位置,局部变量和全局变量,里的Num不是一个变量,
#但是名称相同放在不同的位置,调用的时候不是按名称识别吗?
题目044:两个3*3的矩阵,实现其对应位置的数据相加,并返回一个新矩阵:
import numpy as np
np.random.seed(1)
a=np.random.random([3,3])#random 里面是列表,randn里面不用[],这个要主要。
print(a)
b=np.random.randn(3,3)
print(b)
c=a+b
print(c)
#题目045:统计 1 到 100 之和。
t=0
for i in range(101):
t=t+i
print(t)
题目046:求输入数字的平方,如果平方运算后小于 50 则退出。
#题目046:求输入数字的平方,如果平方运算后小于 50 则退出。
#输入:数字
#输出:平方,大于50 不输出
t=int(input('请输入数字:'))
m=t**2
if m<=50:
print('%d的平方是%d'%(t,m))
#if 语句中可以不写else。
题目047:两个变量值互换。
#两个变量的值互换
#输入:两个变量
#输出:两个变量的值呼唤
a=float(input('请输入a:'))
b=float(input('请输入b:'))
c=a
a=b
b=c
print('a的值是%f'%a)
print('b的值是%f'%b)
一直放在最下面,方便找题。
两万多字诠释python最经典基础算法之100题【内含思路、程序和答案】【python初学者必备】_zhulin1028的博客-CSDN博客_python基础算法题
https://blog.csdn.net/qq_43468607/article/details/103205745?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164931697416780255292800%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164931697416780255292800&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-103205745.142%5Ev6%5Epc_search_result_control_group,157%5Ev4%5Econtrol&utm_term=python%E7%BB%83%E4%B9%A0&spm=1018.2226.3001.4187#2_22
https://blog.csdn.net/qq_43468607/article/details/103205745?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164931697416780255292800%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164931697416780255292800&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-103205745.142%5Ev6%5Epc_search_result_control_group,157%5Ev4%5Econtrol&utm_term=python%E7%BB%83%E4%B9%A0&spm=1018.2226.3001.4187#93_258
https://blog.csdn.net/qq_32502511/article/details/82910465?ops_request_misc=&request_id=&biz_id=102&utm_term=Python%E5%88%A4%E6%96%AD%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%98%AF%E5%90%A6%E4%B8%BA%E4%B8%AD%E6%96%87&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-5-82910465.142%5Ev9%5Econtrol,157%5Ev4%5Econtrol&spm=1018.2226.3001.4187
461





