python100例之1-32

目录

前言

python练习实例1

python练习实例2

注意:

python练习实例3

收获:

python练习实例4

python练习实例5

python练习实例6

python练习实例7

python练习实例8

python练习实例9

python练习实例10

python练习实例11

python练习实例12

python练习实例13

python练习实例14

收获:

python练习实例15

python练习实例16

python练习实例17

python练习实例18

python练习实例19

python练习实例20

python练习实例21

python练习实例22

python练习实例23

python练习实例24

python练习实例25

python练习实例26

python练习实例27

python练习实例28

python练习实例29

python练习实例30

python练习实例31

python练习实例32


前言

今天开始打卡的第一天,希望能够一直坚持下去。

因为python这东西,只看不练是没什么效果的。所以我就先稍微复习了一些川川的教程,然后开始今天的案例。

python练习实例1

题目:

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

分析:

直接三重循环暴力遍历,计数并输出,比较简单。

源代码:

n = 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 i != k:
                n += 1
                print(i, j, k)
print(n)

python练习实例2

题目:

企业发放的奖金根据利润提成。利润(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,求应发放奖金总数?

分析:

最直接的方法是多重if条件语句直接计算,但是我觉得这样没有意义,所以想了以下方法。

思路是用列表的索引来循环计算每部分利润并求和。

具体实现:

将节点临界值(10w、20w等)赋值一个列表rim,提成作为权值赋值给另一个列表p。比较输入I与rim列表的值大小,以此分割计算区域。索引rim[i-1]及以前临界值差与权值乘积求和,I-索引rim[i]的值与对应权值乘积并求和。实现利润计算。

第一次写,思路还是有些写不明白,见谅。

源代码:

I = int(input("请输入利润I(万元):"))
rim = [0, 10, 20, 40, 60, 100]
p = [0.1, 0.075, 0.05, 0.03, 0.015, 0.01]
s = 0
for i in range(5, -1, -1):
    if I > rim[i]:
        for j in range(i):
            s += p[j] * (rim[j + 1] - rim[j])
        s += p[i] * (I - rim[i])
        break
print('%.2f万元' % s)

注意:

这个代码中比较重要的一点是 j循环下的break语句。

因为是从大到小比较,所以I大于大的值,肯定也大于更小的值,如果不加break语句,就会继续循环导致计算出错。

就好像你需要算1+2+3的值,但不加break的话算的就是1+(1+2)+(1+2+3)的值。

python练习实例3

题目:

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

分析:

这道题需要用数学知识把题目的已知条件做些转化,以便能够用python编程实现求解。

因为我也没想出来什么方法,所以在此借用菜鸟的分析:

假设该数为 x。

1、则:x + 100 = n2, x + 100 + 168 = m2

2、计算等式:m2 - n2 = (m + n)(m - n) = 168

3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数

4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。

5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。

6、由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1

7、接下来将 i 的所有数字循环计算即可。

源代码:

for i in range(1, 85):
    if 168 % i == 0:
        j = 168 / i
        if i > j and (i + j) % 2 == 0 and (i - j) % 2 == 0:
            m = (i + j) / 2
            n = (i - j) / 2
            x = n * n - 100
            print(x)

收获:

编程往往需要运用数学知识对问题已知条件做合适的转化,来达到简单编程的目标。需要加强这方面的学习和应用。

python练习实例4

题目:

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

分析:

首先要知道闰年这个概念:

普通闰年:能被4整除但不能被100整除

世纪闰年:能被400整除

当判断是闰年的时候,月份为3以上时天数要+1

源代码:

year = int(input('请输入年份:'))
month = int(input('请输入月份:'))
day = int(input('请输入日:'))
s = 0
days = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]
if ((year % 4 == 0 and year % 100 != 0) or year % 400 == 0) and month > 2:
    s = days[month - 1] + day + 1
else:
    s = days[month - 1] + day
print('这是一年的第%d天' % s)

python练习实例5

题目:

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

分析:

三个数,算是一个小型冒泡排序。

源代码:

x = int(input('first number:'))
y = int(input('second number:'))
z = int(input('third number:'))

if x > y:
    x, y = y, x
if y > z:
    y, z = z, y
if x > y:
    x, y = y, x

print(x, y, z)

python练习实例6

题目:

斐波那契数列

分析:

用一个python特有的多元赋值语句解决,比较简单。

源代码:

a, b = 0, 1
list1 = [0, 1]
n = int(input('请输入n(n>2):'))

for i in range(n-2):
    a, b = b, a+b
    list1.append(b)

print(list1)

python练习实例7

题目:

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

源代码:

a = [1, 23, 45, 265, 7]
b = a.copy()
print(b)

python练习实例8

题目:

输出 9*9 乘法口诀表。

分析:

用python的格式化输出print完成。

‘-’表示左对齐,‘.’前面的数字表示占位数,后面表示小数点保留位数。

源代码:

for i in range(1, 10):
    for j in range(1, i+1):
        print('%dx%d=%-4d' % (i, j, i * j), end='')
    print('')

python练习实例9

题目:

暂停一秒输出。

分析:

利用time包的sleep暂停。

源代码:

import time

num = [1, 2, 3, 4, 5, 6]
for i in range(len(num)):
    print(num[i])
    time.sleep(1)

python练习实例10

题目:

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

分析:

用time包的格式化时间。

time.strftime(format, t)
  • %y 两位数的年份表示(00-99)
  • %Y 四位数的年份表示(000-9999)
  • %m 月份(01-12)
  • %d 月内中的一天(0-31)
  • %H 24小时制小时数(0-23)
  • %I 12小时制小时数(01-12)
  • %M 分钟数(00-59)
  • %S 秒(00-59)
  • %a 本地简化星期名称
  • %A 本地完整星期名称
  • %b 本地简化的月份名称
  • %B 本地完整的月份名称
  • %c 本地相应的日期表示和时间表示
  • %j 年内的一天(001-366)
  • %p 本地A.M.或P.M.的等价符
  • %U 一年中的星期数(00-53)星期天为星期的开始
  • %w 星期(0-6),星期天为星期的开始
  • %W 一年中的星期数(00-53)星期一为星期的开始
  • %x 本地相应的日期表示
  • %X 本地相应的时间表示
  • %Z 当前时区的名称
  • %% %号本身

源代码:

import time

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

python练习实例11

题目:

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

分析:

1,1,2,3,5,8……

可见,这是斐波那契数列。我记得最早了解斐波那契数列的引例就是这个。

因此,让我们拿出python练习实例6来稍作修改,去掉第一个0。

源代码:

a, b = 1, 1
list1 = [1, 1]
n = int(input('请输入月份n(n>2):'))

for i in range(n-2):
    a, b = b, a+b
    list1.append(b)

print(list1)

python练习实例12

题目:

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

分析:

用这个数分别除以2到它本身-1,都不能整除则为素数。

为了减少计算量,可以排除偶数,只遍历奇数。

源代码:

n = 0
for i in range(101, 201, 2):
    k = 0
    for j in range(2, i):
        if i % j != 0:
            k += 1
    if k == i-2:
        n += 1
        print(i)
print(f'101-200内素数的个数为{n}个')

python练习实例13

题目:

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

分析:

重点是如何取出每一位数。我的方法是:

百位通过整除100取出,

十位先取余100再整除10,

个位取余10.。

但是我做的时候竟然把三次方输成了二次方,我说怎么一个结果也没有。

看清题目很重要。。。

源代码:

for i in range(100, 1000):
    x = i // 100
    y = (i % 100) // 10
    z = i % 10
    if i == x ** 3 + y ** 3 + z ** 3:
        print(i)

python练习实例14

题目:

将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

分析:

这道题做了很久,说明基础还是不太扎实。

这道题有几个重要的点:

一是要让每次判断n能被整除时更新n的值

       n = n / i

二是要更新n值后让for i循环重新开始(为了能让重复的质因数出现)

       参考示例,将for循环置于while n not in [1]循环下,每次n更新并输出i后break一下,否则continue

三是最后的输出问题,需要一个停止(不能一直输出2*2*这样的,没有结尾)

       判断最后的n==1则不输出*

源代码:

n = int(input('请输入需要分解的正整数:'))
print(f'{n}=', end='')
while n not in [1]:
    for i in range(2, int(n)+1):
        n /= i
        if n == 1:
            print(f'{i}', end='')
            break
        elif n % 1 == 0:
            print(f'{i}', end='*')
            break
        else:
            n = int(n*i)
            continue

收获:

break和continue语句应该熟练掌握,考虑问题时要知道循环应该从哪里结束或者继续。

python练习实例15

题目:

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

分析: 

很简单,很基础。

注意python里是elif,不是else if。

源代码:

while 1:
    score = int(input('请输入学习成绩(百分制):'))
    if score >= 90:
        print('A')
    elif score >= 60:
        print('B')
    else:
        print('C')

  

python练习实例16

题目:

输出指定格式的日期。

分析:

datetime包与time用法基本一样。采用strftime方法格式化输出时间。

源代码:

import datetime

x = datetime.datetime.now()

print(x.strftime("%Y-%m-%d"))
print(x.strftime("%Y-%m-%d %A %H:%M:%S"))

python练习实例17

题目:

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

分析:

通过比较计数。其中英文字母的大小写要分开用or连接。

源代码:

x = input('请输入一行字符:')
empty = 0
english = 0
number = 0
other = 0
for i in x:
    if 'a' <= i <= 'z' or 'A' <= i <= 'Z':
        english += 1
    elif i == ' ':
        empty += 1
    elif '0' <= i <= '9':
        number += 1
    else:
        other += 1
print(f'empty={empty}\nenglish={english}\nnumber={number}\nother={other}')

python练习实例18

题目:

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

分析:

需要有一个b在每次循环中自乘10加a,作为a,aa,aaa,aaaa等,然后s求和。

源代码:

a = int(input('请输入a值:'))
n = int(input('请输入n值:'))
s = a
b = a
for i in range(n-1):
    b = b * 10 + a
    s += b
print(s)

python练习实例19

题目:

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

分析:

这次是找因子,并非质因数。

所以找到一个就加进去。

Tip:为了避免重复因子的影响,我们选择用集合。后面可以强制转换列表来索引。

源代码:

for i in range(4, 1001):
    x = {1}
    for j in range(2, i):
        a = i / j
        if a % 1 == 0:
            x.add(int(a))
            x.add(j)
    s = 0
    x = list(x)
    for k in x:
        s += k
    if i == s:
        print(i, end="=")
        print(x[0], end='')
        for m in range(1, len(x)):
            print(f'+{x[m]}', end='')
        print('')

python练习实例20

题目:

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

分析:

只要理清节点就很简单。

源代码:

h = 100
s = 100
for i in range(10):
    s += h
    h /= 2
print(f's={s}')
print(f'h={h}')

python练习实例21

题目:

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

分析:

简单的逆向思维问题。

源代码:

x = 1
for i in range(9):
    x = (x+1)*2
print(x)

python练习实例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 i != j:
            for k in team:
                if i != k and j != k:
                    if i != 'x' and k != 'x' and k != 'z':
                        print(f'a--{i}\nb--{j}\nc--{k}')

python练习实例23

题目:

打印出如下图案(菱形):

   *
  ***
 *****
*******
 *****
  ***
   *

分析:

找出i与空格、‘*’的对应数学关系,循环输出。

源代码:

empty = ' '
for i in range(7):
    if i < 4:
        print(empty*(3-i)+'*'*(2*i+1))
    else:
        print(empty*(i-3)+'*'*(2*(7-i)-1))

python练习实例24

题目:

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

分析:

我们又看到了熟悉的东西:斐波那契数列。

于是我们再次找到实例6的代码,稍作修改加以引用。

源代码:

a, b = 1, 2
list1 = [1, 2]
n = 21

for i in range(n-2):
    a, b = b, a+b
    list1.append(b)
s = 0
for i in range(len(list1)-1):
    s = s + list1[i+1]/list1[i]
print(s)

python练习实例25

题目:

求1+2!+3!+...+20!的和。

分析:

循环相乘求和。

源代码:

a = 1
s = 0
for i in range(1, 21):
    a *= i
    s += a
print(s)

python练习实例26

题目:

利用递归方法求5!。

分析:

因为需要用递归解决问题,所以我们需要定义一个函数来实现递归算法,其中的传递参数为n。

源代码:

def n_1(n):
    if n == 0 or n == 1:
        return 1
    else:
        return n * n_1(n - 1)


print(n_1(5))

python练习实例27

题目:

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

分析:

这个题目还是递归,但是需要传递两个参数来控制递归。一个是字符串str1,一个是需要用到的字符串索引数n。

源代码:

def invert(n, str1):
    if n == 0:
        return
    print(str1[n - 1], end="")
    invert(n - 1, str1)


str1 = input('请输入字符串:')
n = len(str1)
invert(n, str1)

python练习实例28

题目:

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

分析:

读题发现是很简单的一道题,但是蕴含了递归的思想,于是我们用递归算法来解决这个问题。

源代码:

def age(n):
    if n == 1:
        return 10
    else:
        return age(n-1)+2


print(age(5))

python练习实例29

题目:

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

分析:

因为给定了不多于5位的正整数是,因此我们可以直接用5次的for循环,只需要给定一个结束循环并打印的条件就行。

源代码:

number = int(input('请输入一个不多于五位的正整数:'))
for i in range(5):
    n = number % 10
    number = int((number - n) / 10)
    print(n)
    if number == 0:
        print(f'这是一个{i+1}位数')
        break

python练习实例30

题目:

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

分析:

if判断语句

源代码:

n = int(input('请输入一个5位数:'))
a = n // 10000
b = (n - a * 10000) // 1000
d = n % 10
c = (n % 100 - d) // 10
if a == d and b == c:
    print('是回文数!')
else:
    print('不是回文数')

python练习实例31

题目:

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

分析:

我的思路是:创建一个可索引的列表week,将七个单词以列表的形式储存到week中,以便后面的索引。

这样,我们就可以用for循环来解决问题。

最后输出时,要想得到连续的字母,需要用到''.join()语句。

源代码:

week = [list('Monday'), list('Tuesday'), list('Wednesday'), list('Thursday'), list('Friday'), list('Saturday'), list('Sunday')]
first_letter = str(input('请输入第一个字母:'))
n = 0
a = 0
for i in range(7):
    if first_letter == week[i][0]:
        a = i
        n += 1
if n == 1:
    print(''.join(week[a]))
elif n == 2:
    second_letter = str(input('请输入第二个字母:'))
    for i in range(7):
        if second_letter == week[i][1]:
            print(''.join(week[i]))
else:
    print('error')

python练习实例32

题目:

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

源代码:

list1 = [1, 2, 3, 4, 5, 6]
list2 = list1[::-1]
print(list2)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值