Python基础100题

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

更好的方法

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

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

# -*- encoding: utf-8 -*-
p = 0
p = int(input("请输入利润:"))
if p <= 100000:
    a = p * 0.1
if p >= 100000 and p <= 200000:
    a = (p - 100000) * 0.075 + 100000 * 0.1
if p >= 200000 and p <= 400000:
    a = 100000 * 0.1 + 100000 * 0.075 + (p - 200000) * 0.05
if p >= 400000 and p <= 600000:
    a = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + (p - 400000) * 0.03
if p >= 600000 and p <= 1000000:
    a = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + (p - 600000) * 0.015
if p >= 1000000:
    a = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + 400000 * 0.015 + (p - 1000000) * 0.01



print("工资:",a)

i = int (input(u'净利润:'))
arr = [1000000,600000,400000,200000,100000,0]
rat = [0.01,0.015,0.03,0.05,0.075,0.1]
r = 0
for idx in range(0,6):#用来索引arr和rat中的值
    if i>arr[idx]:#arr[0]=1000000
        r += (i - arr[idx]) * rat[idx]
        print((i - arr[idx]) * rat[idx])
        i = arr[idx]
print(r)

习题3:完全平方数

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

import math
for i in range(100000):
    x1 = int(math.sqrt(i + 100))
    x2 = int(math.sqrt(i + 268))
    if (x1 * x1 == i + 100) and (x2 * x2 == i +268):
        print(i)

习题4:今天是第几天

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

"""
题目:输入某年某月某日,判断这一天是这一年的第几天?
程序分析:以3月5日为例,应该先把前两个月的加起来,
然后再加上5天即本年的第几天,
特殊情况,闰年的2月是29天,如果年份是闰年,并且闰年的
月份在3月以后,则需要多加1天。
每四年一次闰年。
1,3,5,7,8,10,12月是31天,2月是28天,其他的是30天。
"""

#定义一个函数,判断是否为闰年
def leapyear(y):
    return (y % 400 == 0 or (y % 4 ==0 and y % 100 ==0))
#定义一个数组,每个月的天数,由于python中的数组是从0开始,而月份是从1开始,所以数组第一个数为0
days = [0,31,28,31,30,31,30,31,31,30,31,30]
#存储月份的天数
res = 0
#由用户输入年月日
year = int(input("请输入年份:"))
month = int(input("请输入月份:"))
day = int(input("请输入日期:"))
#如果是闰年的话,2月份加一天
if leapyear(year):
    days[2] += 1
#遍历一次days,对应月份中的天数,把对应的天数传递给res存储
for i in range(month):
    res += days[i]
#打印出天数!
print(f"这是{year}年的第{res+day}天")
在这里插入代码片

习题5:三数排序

题目 输入三个整数x,y,z,请把这三个数由小到大输出。
可以用冒泡排序,或者

x = int(input("请输入x:"))
y = int(input("请输入y:"))
z = int(input("请输入z:"))

a = [x,y,z]
def bubblesort(a):
    for i in range(len(a) - 1):
        for j in range(len(a) - i - 1):
            if a[j] > a[j+1]:
                a[j],a[j+1] = a[j+1],a[j]
    return a
a.sort()
print(a.sort())
print(a)

习题6:斐波那契数列

题目 斐波那契数列。

# x1 = 0
# x2 = 1
# x3 = 1
# x4 = 2
# x5 = 3
a = [0,1]
n = int(input("请输入n:"))
for i in range(n):
    a.append(a[-1] + a[-2])
print(a)

习题7:拷贝copy

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

https://www.runoob.com/w3cnote/python-understanding-dict-copy-shallow-or-deep.html

扫描二维码关注公众号,回复: 12731287 查看本文章
import copy

a = [1, 2, 3, 4, ['a', 'b']]  # 原始对象

b = a  # 赋值,传对象的引用
c = copy.copy(a)  # 对象拷贝,浅拷贝
d = copy.deepcopy(a)  # 对象拷贝,深拷贝

a.append(5)  # 修改对象a
a[4].append('c')  # 修改对象a中的['a', 'b']数组对象

print('a = ', a)
print('b = ', b)
print('c = ', c)
print('d = ', d)

习题8:9*9乘法表

for i in range(1,10):
    for j in range(1,i + 1):
        print("{}*{}={}".format(i,j,i*j),end = " ")
    print()

在这里插入图片描述

习题9:暂停一秒输出

import time

myD = {
    
    1:'A',2:'B'}
for key,value in dict.items(myD):
	print(key,':',value)
	time.sleep(1)

习题10:格式化时间

import time

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

习题11:养兔子

题目 古典问题:有一对兔子,从出生后第3个月起每个月都
生一对兔子,小兔子长到第三个月后每个月又生一对兔子,
假如兔子都不死,问每个月的兔子总数为多少?
程序分析:兔子对数的规律为数列1,1,2,3,5,8,13,21…
实际上还是斐波那契数列问题。

def rabbit(month):
    if month <= 2:
        return 2
    else:
        return rabbit(month - 1) + rabbit(month - 2)
for i in range(10):
    print(rabbit(i))

习题12:判断素数

def judge(n):
    if n <=1 :
        return False
    elif n > 1:
        for i in range(2,n):
            if n % i == 0:
                return False
        return True

sum = 0
for i in range(1,1000):
    if judge(i):
        print(i)
        sum = sum + 1
print(sum)

实例13:所有水仙花数

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

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

实例14:分解质因数

题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

n=int(input("请输入需要分解的数字:"))
print("{} =".format(n),end=' ')
while n>1:
    for i in range(2,n+1):
        if n%i==0:
            n=int(n/i)
            if n==1:
                print(i)
            else:
                print("{} *".format(i),end=' ')
            break
#分解质因数
def zys(n, value=[]):
    for i in range(2, int(n / 2 + 1)):
        if n % i == 0:
            value.append(i)
            zys(n / i, value)
            return value
        if i >= n / 2 - 1:
            value.append(int(n))
            break
print(zys(90))

实例15:分数归档

题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分
的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
程序分析:(a>b)?a:b这是条件运算符的基本例子。
“”"

points = int(input("请输入分数:"))
if points >= 90:
    print("A")
elif points>= 60 and points <= 89:
    print("B")
else:
    print("C")

实例16:输出日期

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)

实例17:字符串构成

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

s = input("请输入字符串:")
alp = 0#英语字母
spa = 0#空格
num = 0#数字
oth = 0#其他字符
for i in range(len(s)):
    if s[i].isalpha():
        alp += 1
    elif s[i].isdigit():
        num += 1
    elif s[i].isspace():
        spa += 1
    else:
        oth += 1
print("英文字母的个数为:{}".format(alp))
print("数字的个数为:{}".format(num))
print("空格的个数为:{}".format(spa))
print("其他的个数为:{}".format(oth))

实例18:复读机相加

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

a = int(input("请输入数字:"))
n = int(input("请输入几个数相加:"))
def f(n,a):
    s = 0
    for i in range(n):
        s += a * (10 ** i)
    return s
print(f(5,2))
sum = 0
for i in range(n):
    print(f(i+1,a))
    sum += f(i+1,a)
print("sum = ",sum)
print(2+22+222+2222+22222)
a=input('被加数字:')
n=int(input('加几次?:'))
res=0
for i in range(n):
    res+=int(a)
    a+=a[0]
print('结果是:',res)

实例19:寻找完数

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

ef f(n):
    l = []
    for i in range(1,n):
        if n % i == 0:
            l.append(i)
    return sum(l) == n
for i in range(1,10000):
    if f(i):
        print(i)

实例20:高空抛物

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

s = 100
l1 = []
l2 = []
for i in range(10):
    l1.append(s)
    s = s / 2
    l2.append(s)
print(l1)
print(l2)
print(sum(l1) + sum(l2))

实例21:猴子偷桃

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

l = []
n = 1
for i in range(10):
    l.append(n)
    n = (n+1) * 2
print(l)
print("第一天一种摘了:",sum(l))

实例22:比赛对手

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

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

实例23:画菱形

def draw(n):
    for i in range(n):
        print(' ' * (n - i - 1),end = '')
        print('*' * (2 * i + 1))
    for i in range(n):
        i = n - i - 2
        print(' ' * (n - i - 1), end='')
        print('*' * (2 * i + 1))
draw(10)

实例24:斐波那契数列II

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

def f(n):
    L1 = [1,2]
    L2 = [2,3]
    L3 = []
    for i in range(n):
        L1.append(L1[-1] + L1[-2]) #分母
        L2.append(L2[-1] + L2[-2])
        L3.append(L2[i] / L1[i])
    print('L1:',L1)
    print('L2:',L2)
    print('L3:',L3)
    return sum(L3)
print(f(3))

实例25:阶乘求和

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

#题目 求1+2!+3!+…+20!的和
def f(n):
    if n > 1:
        return n * f(n - 1)
    else:
        return 1
s = 0
for i in range(1,21):
    s += f(i)
print(s)

实例26:递归求阶乘

def f(n):
    if n > 1:
        return n * f(n - 1)
    else:
        return 1
print(f(5))        

实例27:递归输出

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

s = input("请输入字符")
for i in range(len(s)):
    print(s[-(i + 1)])

使用递归

def rec(string):
    if len(string)!=1:
        rec(string[1:])
    print(string[0],end='')

rec(input('string here:'))

实例28:递归求等差数列

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

def f(n):
    if n == 1:
        return 10
    else:
        return f(n - 1) + 2
print(f(5))

实例29:反向输出

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

n = input("请输入正整数")
def f(n):
    print("它是{}位数".format(len(n)))
    print(n[::-1])
f(n)

实例30:回文串

def f(n):
    for i in range((len(n) - 1) // 2 - 1):
       if n[i] != n[-(i + 1)]:
           return False
       else:
           return True
s = input("请输入数字")
if f(s):
    print("是回文串")
else:
    print("不是回文串")

实例31:字母识词

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

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)

猜你喜欢

转载自blog.csdn.net/weixin_46815330/article/details/113812093