Python3学习笔记(python100例-50 )

2020.03.16

python100例—50道

python100例

1. 题目: 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
解析:for循环,然后用if判断数字是否相等。
代码:

a = 0
for i in range(1,5):
    for j in range(1,5):
        for z in range(1,5):
            if (i != j) and (i != z) and (j != z):
                print(i,j,z)
                a += 1
print("能组成%r个互不相同且无重复数字的三位数" % a)

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,求应发放奖金总数?
解析1:可以使用if-elif-else语句。
代码:

salary = float(input("请输入本月的利润:"))

if salary <= 100000:
    salary = salary * 0.1
    
elif salary < 200000:
    salary = (salary-100000)*0.075 + 10000
    
elif salary < 400000:
    salary = (salary-200000)*0.05 + 17500
    
elif salary < 600000:
    salary = (salary-400000)*0.03 + 27500

elif salary < 1000000:
    salary = (salary-600000)*0.015 + 33500

else:
    salary = (salary - 1000000)*0.01 + 39500

print(salary)

解析2:可以将奖金界限和相应的利润率分别存放在列表中,在使用用for循环打印。
代码:

list1 = [1000000,600000,400000,200000,100000,0]
list2 = [0.01,0.015,0.03,0.05,0.075,0.1]
salary = float(input("请输入本月的利润:"))
a = 0
for i in range(0,6):
    if salary > list1[i]:
        a += (salary-list1[i])*list2[i]
        salary = list1[i] 

print(a)

3.题目: 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
解析:x + 100 = n^2, x + 100 + 168 = m^2,使用if语句判断n*n==(x + 100)*0.5和mm==(x + 268)**0.5。
代码:

import math
x = -99
while True:
    n_2 = x + 100
    m_2 = x + 268
    n = int(math.sqrt(n_2))
    m = int(math.sqrt(m_2))
    if (n*n == n_2) and (m*m == m_2):
        print(x)
    x += 1
    if x == 10000:
        break

4.题目: 输入某年某月某日,判断这一天是这一年的第几天?
解析:需要注意闰月。
代码:

year = int(input("year:"))
month = int(input("month:"))
day = int(input("day:"))
s = day
list1 = [31,28,31,30,31,30,31,31,30,31,30,31]
for i in range(0,12):
    if month > i+1:
        s += list1[i]

if (year % 400 == 0) or ((year % 4 ==0) and (year % 100 != 0)):
    if month > 2:
        s += 1

print("这一天是这一年的第%r天" % s)

5.题目: 输入三个整数x,y,z,请把这三个数由小到大输出。
解析:首先想到的是将三个数存入列表,然后直接排序。
代码:

a = []
for i in range(1,4):
    x = int(input("请输入一个整数:"))
    a.append(x)

a.sort()
print(a)

6.题目: 斐波那契数列。
解析:使用递归。
代码:

def Fib(n):
    if n == 1 or n ==2:
        return 1
    return Fib(n-1)+Fib(n-2)
    
for i in range(1,11):
    print(Fib(i),end=' ')

7.题目: 将一个列表的数据复制到另一个列表中。
解析:使用列表切片[:]。
代码:

a = [1,2,5555,6456]
b = a[:]
print(id(a),a)
print(id(b),b)

8.题目: 输出 9*9 乘法口诀表。
解析:使用两个for循环嵌套,注意换行。
代码:

for i in range(1,10):
    for j in range(1,i+1):
        print(str(j) + '*' + str(i) + '=' + str(j * i),end='\t')
    print()

9.题目: 暂停一秒输出。
解析:使用 time 模块的 sleep() 函数。
代码:

import time

a = [1,2,5,6,8,3]
for i in a:
    print(i)
    time.sleep(1)

10.题目: 暂停一秒输出,并格式化当前时间。
解析:百度怎么格式化时间。https://www.cnblogs.com/williamjie/p/9179438.html
代码:

import time

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

11.题目: 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
解析:兔子的对数符合斐波那契数列,1,1,2,3,5,8,…。
代码:

from ex6 import Fib

for i in range(1,20):
    print(Fib(i)*2,end=' ')

12.题目: 判断101-200之间有多少个素数,并输出所有素数。
解析:一个数依次除2到这个数的二分之一,如果不能整除,则是素数,for循环加if语句。
代码:

#方法一
for i in range(101,201):
    k = int(i/2)
    for j in range(2,k+1): 
        if (i % j) == 0:
            break
    else:
        print(i)

#方法二
for i in range(101,201):
    k = int(i/2)
    s = 0
    for j in range(2,k+1): 
        if (i % j) == 0:
            s += 1
    if s == 0:
        print(i)

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

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

14.题目: 将一个正整数分解质因数。例如:输入90,打印出90=233*5。
解析:分解质因数的公式。从最小的质数2开始除,直到最后一个因数相除结果为1。
代码:

n=int(input('请输入一个正整数: '))
num = n
m=[]
while n!=1:
    for i in range(2,int(n+1)):
        if n % i == 0:
            m.append(str(i)) 
            n = n/i
    if n==1:
        break
print(num,'=','×'.join(m))

15.题目: 利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
解析:if-elif-else语句
代码:

num = int(input("请输入你的分数:"))
if num >= 90:
    print('A')
elif num >= 60:
    print('B')
else:
    print("C")

16.题目: 输出指定格式的日期。
解析:使用time模块。
代码:

import time
#当前时间
print(time.time())
#时间戳形式
print(time.localtime(time.time()))
#简单可读形式
print(time.asctime( time.localtime(time.time()) ))
# 格式化成2016-03-20 11:45:39形式
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) 
# 格式化成Sat Mar 28 22:24:24 2016形式
print(time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()) )
# 将格式字符串转换为时间戳
a = "Sat Mar 28 22:24:24 2016"
print(time.mktime(time.strptime(a,"%a %b %d %H:%M:%S %Y")))

17.题目: 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
解析:检索字符串,count()方法。
代码:

import string

s = input('请输入字符串:\n')
# 初始化
letters = 0
space = 0
digit = 0
other = 0

i = 0
while i < len(s):
    c = s[i]
    i += 1
    if c.isalpha(): 
        letters += 1    
    elif c.isspace():
        space += 1
    elif c.isdigit():
        digit += 1
    else:
        other += 1
print('char = %d, space = %d, digit = %d, other = %d' % 
            (letters, space, digit, other))

18.题目: 求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
解析:计算就好了。
代码:

x = int(input("请输入一个数字:"))
n = int(input("请输入相加的次数:"))
s = 0
t = x
for i in range(1,n+1):
    s = s + t
    x = x*10
    t = t + x
    
print(s)

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

for i in range(1,1001):
    num = 0
    k = i // 2
    for j in range(1,k+1):
        if i % j == 0:
            num = num +j
        
    if i == num:
        print(i)

20.题目: 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
解析:数学问题。
代码:

h = 100
s = 0
for i in range(1,11):
    if i == 1:
        s = 100
    else:
        s = s + h*2
    h = h*0.5
print("总共经过%r米,第10次反弹%r米" % (s,h))

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

n = 1
for i in range(1,11):
    n = (n + 1)*2

print(n)

22.题目: 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
解析:if语句,将其转换成ascii值,再进行比较。
代码:

for i in range(ord('x'),ord('z') + 1):
    for j in range(ord('x'),ord('z') + 1):
        if i != j:
            for k in range(ord('x'),ord('z') + 1):
                if (i != k) and (j != k):
                    if (i != ord('x')) and (k != ord('x')) and (k != ord('z')):
                        print('a -- %s  b -- %s  c--%s' % (chr(i),chr(j),chr(k)))

23.题目: 打印出如下图案(菱形)
解析:for循环,找数学规律。
代码:

for i in range(-4,5):
    if i<0:
        j=-i
    else:
        j=i
    print(' '*j + '*'*(9-2*j))   

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

m = 1
n = 2
s = 0
for i in range(20):
    s = s + n/m
    t = n
    n = m + n
    m = t
print(s)

25.题目: 求1+2!+3!+…+20!的和。
解析:数学问题。
代码:

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

26.题目: 利用递归方法求5!。
代码:

def rec(n):
    if n == 1:
        return 1
    return n*rec(n-1)

print(rec(5))

27.题目: 利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
解析:
代码:

def fct(s,n):
    if n == 0:
        return
    print(s[n-1])
    fct(s,n-1)
s = "dafsas"
n = len(s)
fct(s,n)

28.题目: 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
解析:使用递归,也可以用for循环反向推导。
代码:

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

print(fct(5))

29.题目: 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
解析:将每一位分解出来。
代码:

num = int(input("请输入一个不多于5为的正整数:"))
n = 0
m = []
for i in range(1,6):
    n1 = num % 10
    if n1 == num:
        m.append(n1)
        n += 1
        break
    else:
        num = int(num / 10)
        m.append(n1)
        n += 1
print("是个%r位数," % n)
print(m)

30.题目: 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
解析:将每一位分解出来比较,也可以利用字符串切片操作比较。
代码:

num = input("输入一个5位数:")
n = 0
for i in range(0,2):
    if num[i] != num[-i-1]:
        continue
    else:
        n += 1
if n == 2:
    print("是回文数")
else:
    print("不是回文数")

31.题目: 请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
解析:字符串切片。
代码:

s=input().upper()
if s[0]=='M':
  print('Monday')
if s[0]=='W':
  print('Wednesday')
if s[0]=='F':
  print('Friday')
if s[0]=='S':
  if s[1]=='A':
    print('Saturday')
  else:
    print('Sunday')
if s[0]=='T':
  if s[1]=='U':
    print('Tuesday')
  else:
    print('Thuesday')

32.题目: 按相反的顺序输出列表的值。
解析:切片。
代码:

a = [1,5,48,89,7]
for i in a[::-1]:
    print(i)

33.题目: 按逗号分隔列表。
解析:join()函数。
代码:

a = [1,5,48,89,7]
print(','.join(str(i) for i in a))

34.题目: 练习函数调用。
代码:

def Hello():
    print('hello\n'*5)
    
Hello()

35.题目: 文本颜色设置。
解析:1、语法:
终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关,控制字符颜色的转义序列是以ESC开头,即用\033来完成。
2.书写过程
开头部分: \033[显示方式;前景色;背景色m
结尾部分: \033[0m
代码:

s = 'hello world'
print('\033[1;31m%s\033[0m' % s)
print('\033[32;40m%s\033[0m' % s)
print('\033[1;33;40m%s\033[0m' % s)
print('\033[1;34;40m%s\033[0m' % s)
print('\033[1;35;40m%s\033[0m' % s)
print('\033[1;36;40m%s\033[0m' % s)
print('\033[0m%s\033[0m' % s)#默认字体输出

36.题目: 求100之内的素数。
代码:

for i in range(1,101):
    k = i // 2
    for j in range(2,k+1):
        if i % j == 0:
            break
    else:
        print(i)

37.题目: 对10个数进行排序。
解析:将数字存入列表,然后使用sort()方法。
代码:

num = []
print('输入十个数字:')
for i in range(0,10):
    num.append(int(input()))

print(num)
num.sort()
print(num)

38.题目: 求一个3*3矩阵主对角线元素之和。
解析:二维列表,两层for循环。
代码:

l1 = [[1, 1, 1], [2, 2, 2], [3, 3, 3]]
for i in l1:
    print(i)
num = 0
for i in range(3):
    for j in range(3):
        a = l1[i]
        b = a[j]
        if i == j:
            num += b
print('对角线之和为%d' % num)

39.题目: 有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
解析:使用for循环做计较,几下下标位置,使用insert()方法。
代码:

a = [21,13,54,848,64,59]
a.sort()
num = int(input('请输入一个数字:'))
for i in range(0,len(a)):
    if num <= a[i]:
        a.insert(i,num)
        break
print(a)

40.题目: 将一个数组逆序输出。
解析:切片操作。
代码:

a = [1,56,48,98,23]
for i in range(0,len(a)):
    print(a[-i-1],end=" ")

41.题目: 模仿静态变量的用法。
解析:不是很懂题目意思,百度一下。
代码:

def varfunc():
    var = 0
    print('var = %d' % var)
    var += 1
if __name__ == '__main__':
    for i in range(3):
        varfunc()
 
# 类的属性
# 作为类的一个属性吧
class Static:
    StaticVar = 5
    def varfunc(self):
        self.StaticVar += 1
        print(self.StaticVar)
 
print(Static.StaticVar)
a = Static()
for i in range(10):
    a.varfunc()

42.题目: 学习使用auto定义变量的用法
解析:python中没有auto关键字。

43.题目: 模仿静态变量(static)另一案例。
代码:

class Num:
    nNum = 1
    def inc(self):
        self.nNum += 1
        print('nNum = %d' % self.nNum)

if __name__ == '__main__':
    nNum = 2
    inst = Num()
    for i in range(3):
        nNum += 1
        print('The num = %d' % nNum)
        inst.inc()

44.题目: 两个 3 行 3 列的矩阵,实现其对应位置的数据相加,并返回一个新矩阵:
解析:使用两层for循环,创建一个新矩阵,将值存入。
代码:

a = [[1,2,3],
     [4,5,6],
     [7,8,9]]
     
b = [[5,4,6],
     [4,5,6],
     [6,8,9]]
     
c = [[0,0,0],
     [0,0,0],
     [0,0,0]]

for i in range(0,3):
    for j in range(0,3):
        c[i][j] = a[i][j] + b[i][j]
for i in c:
    print(i)

45.题目: 统计 1 到 100 之和。
解析:for循环。
代码:

s = 0
for i in range(1,101):
    s += i

print(s)

46.题目: 求输入数字的平方,如果平方运算后小于 50 则退出。
解析:使用while语句,然后用if判断结束的条件。
代码:

while True:
    num = int(input("请输入一个数字:"))
    if num**2 < 50:
        break
    else:
        print(num**2)

47.题目: 两个变量值互换。
解析:使用第三个数存一下值。
代码:

def exchange(a,b):
    t = a
    a = b
    b = t
    return a,b

if __name__ == '__main__':
    a = 10
    b = 20
    print('x=%d  y=%d' % (a,b))
    print('x=%d  y=%d' % exchange(a,b))

48.题目: 数字比较。
代码:

print("请输入两个数字:")
x = int(input())
y = int(input())
if x > y:
    print('%d 大于 %d' % (x,y))
elif x == y:
    print('%d 等于 %d' % (x,y))
else:
    print('%d 小于 %d' % (x,y))

49.题目: 使用lambda来创建匿名函数。
代码:

import math 
r = 10
result = lambda r:math.pi*r*r
print('圆的面积为%r' % result(r))

50.题目: 输出一个随机数。
解析:random模块。
代码:

import random

num = random.randint(1,10)
print(num)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值