【学编程】Python基础编程题100道(1-20)

实例 001:数字组合

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

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

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)

12345678

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

import itertools sum2=0

a=[1](#1),[2](#2),[3](#3),[4](#4)

for i in itertools.permutations(a,3):

print(i)

sum2+=1 print(sum2)

12345678

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

程序分析 分区间计算即可。

profit=int(input('Show me the money: '))

bonus=0

thresholds=[100000](#100000),[100000](#100000),[200000](#200000),[200000](#200000),[400000](#400000)

rates=0.1,0.075,0.05,0.03,0.015,0.01 for i in range(len(thresholds)):

if profit<=thresholdsi:

bonus+=profit*ratesi

profit=0

break else:

bonus+=thresholdsi*ratesi

profit-=thresholdsi bonus+=profit*rates-1

print(bonus)

1234567891011121314


实例 003:完全平方数

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

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

n=0

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

n+=1

print(n+1)


85

123456789

思路是: 最坏的结果是 n 的平方与 (n+1) 的平方刚好差 168 ,由于是平方的关系, 不可能存在比这更大的间隙。

至于判断是否是完全平方数,最简单的方法是:平方根的值小数为 0 即可。

结合起来:

n=0

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

n+=1

for 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) 1234567

实例 004:这天第几天

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

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

def isLeapYear(y):

return (y%400==0 or (y%4==0 and y%100!=0)) DofM=[0](#0),[31](#31),[28](#28),[31](#31),[30](#30),[31](#31),[30](#30),[31](#31),[31](#31),[30](#30),[31](#31),[30](#30)

res=0

year=int(input('Year:'))

month=int(input('Month:'))

day=int(input('day:'))

if isLeapYear(year):

DofM[2](#2)+=1

for i in range(month):

res+=DofMi

print(res+day)

实例 005:三数排序

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

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

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 rawi>rawj:

rawi,rawj=rawj,rawi print(raw)

raw2=\[\]

for i in range(3):

x=int(input('int%d: '%(i)))

raw2.append(x)

print(sorted(raw2))

123456789101112131415161718

实例 006:斐波那契数列题目 斐波那契数列。

程序分析 斐波那契数列 ( 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)

12345678910111213

实例 007 :copy

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

程序分析 使用列表 :,拿不准可以调用 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](#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']

1234567891011121314151617181920212223

实例 008:九九乘法表

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

程序分析 分行与列考虑,共 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()

1234

实例 009:暂停一秒输出题目 暂停一秒输出。

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

import time

for i in range(4):

print(str(int(time.time()))-2:)

time.sleep(1)

1234

实例 010:给人看的时间

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

程序分析 同 009.

import time

for i in range(4):

print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))

time.sleep(1) 12345

实例 011:养兔子

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

程序分析 我认为原文的解法有点扯,没有考虑 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_el

der+month_3

print(' 第 %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)

123456789101112

实例 012 : 100 到 200 的素数

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

程序分析 判断素数的方法: 用一个数分别去除 2 到 sqrt( 这个数 ) ,如果能被整除, 则表明此

数不是素数,反之是素数。 用 else 可以进一步简化代码 .

import math

for i in range(100,200):

flag=0

for j in range(2,round(math.sqrt(i))+1):

if i%j==0:

flag=1

break if flag:

continue

print(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:

break

else:

print(i)

123456789101112131415161718192021

实例 013:所有水仙花数

题目 打印出所有的 " 水仙花数 " ,所谓 " 水仙花数 " 是指一个三位数,其各位数字立方和等于

该数本身。 例如: 153 是一个 "水仙花数 " ,因为 153=1 的三次方+ 5 的三次方+ 3 的三次方。程序分析 利用 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)

1234567

实例 014:分解质因数

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

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

target=int(input(' 输入一个整数: '))

print(target,'= ',end='')

if target<0:

target=abs(target)

print('-1*',end='')

flag=0

if target<=1:

print(target)

flag=1

while True:

if flag:

break

for i in range(2,int(target+1)):

if target%i==0:

print("%d"%i,end='')

if target==i:

flag=1
break

print('*',end='') target/=i

break

1234567891011121314151617181920212223242526

实例 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) 12345678

实例 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)

1234567

实例 017:字符串构成

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

程序分析 利用 while 或 for 语句 ,条件为输入的字符不为 ' \n '。

string=input(" 输入字符串: ")

alp=0 num=0 spa=0 oth=0

for i in range(len(string)):

if stringi.isspace():

spa+=1

elif stringi.isdigit():

num+=1

elif stringi.isalpha():
alp+=1

else:

oth+=1 print('space: ',spa)

print('digit: ',num)

print('alpha: ',alp)

print('other: ',oth)

12345678910111213141516171819

实例 018:复读机相加

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

程序分析 用字符串解决。

a=input(' 被加数字: ')

n=int(input(' 加几次?: ')) res=0

for i in range(n):

res+=int(a)

a+=a[0](#0)

print(' 结果是: ',res) 1234567

实例 019:完数

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

1000 以内的所有完数。

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

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 res

for i in range(2,1001):

if i==sum(factor(i))-i:

print(i)

123456789101112

实例 020:高空抛物

题目 一球从 100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第 10

次落地时,共经过多少米?第 10 次反弹多高?程序分析 无

high=200.

total=100

for i in range(10):

high/=2

total+=high

print(high/2)

print(' 总长: ',total) 1234567

相关推荐
维克兜率天1 小时前
【维克】一个极端值,毁掉了整个因子
大数据·人工智能·python·算法·机器学习
Wang's Blog1 小时前
Java框架快速入门: Spring Security+OAuth2之环境配置与多环境部署
java·开发语言·spring
小羊没烦恼!1 小时前
Office文件的奥秘——.NET平台下不借助Office实现Word、Powerpoint等文件的解析(完)
java·大数据·前端·网络·word·powerpoint·.net
船厂电气自动化ai大模型1 小时前
AI大模型与数学 第75课 基、维度、向量空间坐标
数据结构·线性代数·算法·机器学习·推荐算法
博界IT精灵1 小时前
专题1:线性表
考研·算法
估值探索者2 小时前
【AI+量化实战 #05】财报季的信息洪流:用LLM给业绩预告分类+算事件窗口收益
java·c语言·c++·人工智能·python·分类·数据挖掘
CSDN_RTKLIB2 小时前
树、图高层抽象模型
算法
热爱编程的小李2 小时前
基于若以开发的新版情怀麻将后台
java
zhanghaha13145 小时前
HTML系列教程:14_HTML 表单与输入框 <form>、<input> 零基础详解
java·前端·javascript