Python3_50例练习

目录

参考
题目
  • 1、有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
for i in range(1, 5):
    for j in range(1, 5):
        for h in range(1, 5):
            if i != j and j != h and i != h:
                result = i*100 + j*10 + h
                print(result)
  • 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,求应发放奖金总数?(ps: 有3种方法: https://github.com/Shirmay1/Python3_Case/tree/master/examples_fifty/2_190427.py )
def method3(I):
    pro = int(I)
    r = 0
    profile = {1000000: 0.01, 600000: 0.015, 400000: 0.03, 200000: 0.05, 100000: 0.075, 0: 0.1}
    for i in range(6):
        if pro > list(profile.keys())[i]:
            r += (pro-list(profile.keys())[i])*list(profile.values())[i]
            pro = list(profile.keys())[i]
    print(r)
II = input('请输入当月利润(元):')
method3(II)
  • 3、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?(ps: 平方 **0.5 )
for t in range(-99, 10000):
    j = (t+100)**0.5
    m = (t+100+168)**0.5
    if int(j)*int(j) == t+100 and int(m)*int(m) == t+100+168:
        print(t)
  • 4、输入某年某月某日,判断这一天是这一年的第几天?
year = input('请输入年份:')
month = input('请输入月份:')
day = input('请输入天:')
mondic = {'1': 31, '2': 28, '3': 31, '4': 30, '5': 31, '6': 30, '7': 31, '8': 31, '9': 30, '10': 31, '11': 30, '12': 31}
count = int(day)
for i in range(1, int(month)):
    count += mondic[str(i)]
    if int(month) > 2:
        # 对于整百年
        if int(year) % 100 == 0:
            if int(year) % 400 == 0:
                count += 1
        elif int(year) % 4 == 0:
            count += 1
        else:
            print('是平年')
print('这一天是{}年的第{}天'.format(year, count))
  • 5、输入三个整数x,y,z,请把这三个数由小到大输出。(ps: list.sort() 或 sorted(list))
numlist = []
for i in range(3):
    num = input('请输入一个整数:')
    numlist.append(num)
numlist.sort()
for i in numlist:
    print('从小到大输出为:', i)
  • 6、斐波那契数列。f(0) = 0; f(1) = 1 ;f(n) = f(n-2) + f(n-1) (n>=2);(ps:两种方法,列出一种非递归的, https://github.com/Shirmay1/Python3_Case/tree/master/examples_fifty/6_190501.py)
# 循环
def fun2(n):
    if n == 0:
        return 0
    a, b = 1, 1
    for i in range(n - 1):
        a, b = b, a + b
    return a
print(fun2(10))
  • 7、将一个列表的数据复制到另一个列表中。两种方法,一种切片,一种导入copy模块
import copy
# 不可直接将列表赋给一个变量(如:list2=list1),这不是复制,而是引用,引用会带着原始列表一起改变,
list1 = [1, 3, 'hello', ('dog', 'cat')]
list2 = list1[:]
list3 = copy.copy(list1)
print(list2)
print(list3)
  • 8、输出 9*9 乘法口诀表。(ps: end=’ '不换行)
for i in range(1, 10):
    for j in range(1, i+1):
        print('{}×{}='.format(i, j), i*j, end=' ')
    print('')
  • 9、 暂停一秒输出。
import time
lis = [0, 1, 2, 3, 4, 5]
for i in lis:
    print(i)
    time.sleep(1)
  • 10、暂停一秒输出,并格式化当前时间。
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个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(ps:与第6题斐波那契数列相似,有3种方法见:https://github.com/Shirmay1/Python3_Case/tree/master/examples_fifty/11_190506.py)
def fun(n):
    if n == 1 or n == 2:
        return 1
    else:
        return fun(n-1) + fun(n-2)
num = {}
for i in range(1, 22):
    rabitnum = fun(i)
    num[str(i)] = rabitnum
print(num)
  • 12、判断101-200之间有多少个素数,并输出所有素数。
for num in range(101, 201):
    lis = []
    for i in range(2, num):
        if num % i == 0:
            lis.append(i)
            break
    if len(lis) == 0:
        print(num)
  • 13、打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。(ps: 与第3题相似,用了**3代表3次方)
for num in range(100, 1000):
    i = num % 10
    j = num // 10 % 10
    k = num // 100
    if i**3 + j**3 + k**3 == num:
        print(num)
  • 14、将一个正整数分解质因数。例如:输入90,打印出90=2 * 3 * 3 * 5。(ps:当找到之后直接sys.exit()程序退出)
import sys
def prime(num, copynum, strn, multi):
    for i in range(2, num):
        if num % i == 0:
            strn += '{}*'.format(i)
            multi *= i
            if multi == copynum:
                print(multi, '=', strn[:-1])
                sys.exit()
            num = num//i
            prime(num, copynum, strn, multi)
stanum = int(input('请输入一个整数:'))
prime(stanum, stanum, '', 1)
  • 15、利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
def judge(scor):
    if scor >= 90:
        per = 'A'
    elif scor >= 60:
        per = 'B'
    else:
        per = 'C'
    print('{}分的同学等级为{}'.format(scor, per))
score = input('请输入分数:')
judge(int(score))
  • 16、输出指定格式的日期。(ps:与第10题可以一起看)
import time
import datetime
print(time.strftime('%Y/%m/%d %H:%M:%S', time.localtime()))
print(time.strftime("%Y-%m-%d %X"))
print(datetime.date(1941, 1, 5).strftime('%Y/%m/%d'))
  • 17、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。有两种方法见:https://github.com/Shirmay1/Python3_Case/tree/master/examples_fifty/17_190512.py
# 123runoobc  kdf235*(dfl
s = input('请输入一行字符(包含英文字母、空格、数字和其它字符):')
alpha, spac, dcima, other = [], [], [], []
for i in s:
    if i.isalpha():
        alpha.append(i)
    elif i.isspace():
        spac.append(i)
    elif i.isdecimal():
        dcima.append(i)
    else:
        other.append(i)
print('英文字母{}个,空格{}个,数字{}个,其它字符{}个'.format(len(alpha), len(spac), len(dcima), len(other)))
  • 18、求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
n = int(input('请输入个数n:'))
a = int(input('请输入数字a:'))
s = 0
Sn = 0
for i in range(n):
    t = a * 10**i
    s += t
    print(s)
    Sn += s
print('计算和为:', Sn)
  • 19、一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。(ps,与14题思路类似,sys.stdout.write()和print输出类似;print(‘hello’)与sys.stdout.write(‘hello+’\n’)等价)
from sys import stdout
for j in range(2, 1001):
    k = []
    n = -1
    s = j
    for i in range(1, j):
        if j % i == 0:
            n += 1
            s -= i
            k.append(i)
    if s == 0:
        print(j)
        for i in range(n):
            stdout.write(str(k[i]))
            stdout.write(' ')
        print(k[n])
  • 20、一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
heigh = []
sum_heigh = 0
hei = 100
for i in range(1, 11):
    if i == 1:
        sum_heigh = 100
    else:
        sum_heigh += hei*2
    hei /= 2
    heigh.append(hei)
print('总高度:', sum_heigh)
print('第10次反弹高度:', heigh[-1])
  • 21、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,
    又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
count = 1
for day in range(9, 0, -1):
    count = (count+1) * 2
    print('第{}天'.format(day), count)
  • 22、两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
lis1 = ['a', 'b', 'c']
lis2 = ['x', 'z', 'y']
for i in lis2:
    if i == 'x':
        for j in lis1:
            if j == 'a' or j == 'c':
                continue
            else:
                print('order is {}--{}'.format(i, j))
                lis1.remove(j)
    elif i == 'z':
        for j in lis1:
            if j == 'c':
                continue
            else:
                print('order is {}--{}'.format(i, j))
                lis1.remove(j)
    else:
        for j in lis1:
            print('order is {}--{}'.format(i, j))
  • 23、打印出如下图案(菱形)
lis_num = [1, 3, 5, 7, 5, 3, 1]
for i in lis_num:
    s = ' ' * (4-(i+1)//2) + i * '*'
    print(s)
  • 24、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和
a, b = 2, 1
sum = 0
for i in range(1, 21):
    sum += a/b
    a, b = a+b, a
print(sum)
  • 25、求1+2!+3!+…+20!的和。
sum = 0
t = 1
for n in range(1, 21):
    t *= n
    sum += t
print('1+2!+3!+...+20!={}'.format(sum))
  • 26、利用递归方法求5!
def fact(j):
    sum = 0
    if j == 0:
        sum = 1
    else:
        sum = j * fact(j - 1)
    return sum
print(fact(5))
  • 27、利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
def output(s):
    if(len(s) > 0):
        print(s[-1])       
        output(s[0:-1])
s = input('Input a string:')
desc_output(s)
  • 28、有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
def age(n):
    if n == 1:
        c = 10
    else:
        c = age(n - 1) + 2
    return c
print(age(5))
  • 29、给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
num = input('请输入一个不多于5位的正整数:')
print('该数是{}位数'.format(len(num)))
for i in range(1, len(num)+1):
    print(num[-i], end='')
  • 30、一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
num = input('请输入一个五位数:')
if num[0] == num[-1] and num[1] == num[-2]:
    print('{}是回文数。'.format(num))
else:
    print('{}不是回文数。'.format(num))
  • 31、请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
week = {'M': 'Monday','T': {'u': 'Tuesday', 'h': 'Thursday'}, 'W': 'Wednesday', 'F':'Friday','S':{'a':'Saturday','u':'Sunday'}}
letter1 = input("请输入首字母:")
letter1 = letter1.upper()
if (letter1 in ['T','S']):
    letter2 = input("请输入第二个小写字母:")
    print(week[letter1][letter2])
else:
    print(week[letter1])
  • 32、按相反的顺序输出列表的值。
a = ['one', 'two', 'three']
for i in a[::-1]:
    print(i)
  • 33、按逗号分隔列表
L = [1, 2, 3, 4, 5]
s1 = ','.join(str(n) for n in L)
print(s1)
  • 34、练习函数调用。
def hello_world():
    print('hello world')
def three_hellos():
    for i in range(3):
        hello_world()
if __name__ == '__main__':
    three_hellos()
  • 35、文本颜色设置。
class Bcolors:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'
print(Bcolors.WARNING + "警告的颜色字体?")
  • 36、求100之内的素数
for num in range(2, 100):
    lis = []
    for i in range(2, num):
        if num % i == 0:
            lis.append(i)
            break
    if len(lis) == 0:
        print(num)
  • 37、对10个数进行排序。
a = input('请输入10个数字,以英文逗号分开:')
split_lis = a.split(',')
split_lis.sort()
print(split_lis)
  • 38、求一个3*3矩阵主对角线元素之和。
lis = []
sum_lis = 0
for i in range(3):
    a = []
    for j in range(3):
        a.append(int(input('请输入一个数:')))
    lis.append(a)
    sum_lis += lis[i][i]
print('3*3矩阵为:', lis)
print('3*3矩阵主对角线元素之和为:', sum_lis)
  • 39、有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
a = [1, 4, 6, 9, 13, 16, 19, 28, 40, 100, 0]
b = int(input('请输入要插入的数:'))
a.append(b)
a.sort()
print(a)
  • 40、将一个数组逆序输出。
a = [9, 6, 5, 4, 1]
print(a[::-1])
  • 41、模仿静态变量的用法。
class Static:
    StaticVar = 5
    def varfunc(self):
        self.StaticVar += 1
        print(self.StaticVar)
print(Static.StaticVar)
a = Static()
for i in range(3):
    a.varfunc()
  • 42、学习使用auto定义变量的用法。
num = 2
def autofunc():
    num = 1
    print('internal block num = {}'.format(num))
    num += 1
for i in range(3):
    print('The num = {}'.format(num))
    num += 1
    autofunc()
  • 43、模仿静态变量(static)另一案例
class Num:
    nNum = 1
    def inc(self):
        self.nNum += 1
        print('nNum = {}'.format(self.nNum))

if __name__ == '__main__':
    nNum = 2
    inst = Num()
    for i in range(3):
        nNum += 1
        print('The num = {}'.format(nNum))
        inst.inc()
  • 44、Python 两个矩阵相加;两个 3 行 3 列的矩阵,实现其对应位置的数据相加,并返回一个新矩阵:
X = [[12, 7, 3],
     [4, 5, 6],
     [7, 8, 9]]
Y = [[5, 8, 1],
     [6, 7, 3],
     [4, 5, 9]]
result = [[0, 0, 0],
          [0, 0, 0],
          [0, 0, 0]]
# 迭代输出行
for i in range(len(X)):
    # 迭代输出列
    for j in range(len(X[0])):
        result[i][j] = X[i][j] + Y[i][j]
for r in result:
    print(r)
  • 45、统计 1 到 100 之和。
print(sum(range(1, 101)))
  • 46、求输入数字的平方,如果平方运算后小于 50 则退出。
while True:
    num = int(input('请输入一个数:'))
    num = num ** 2
    if num < 50:
        break
  • 47、两个变量值互换
def exchange(a, b):
    a, b = b, a
    print('a:{},b:{}'.format(a, b))
exchange(1, 'hello')

48、数字比较。

i = 10
j = 20
if i > j:
    print('{}大于{}').format(i, j)
elif i == j:
    print('{}等于{}'.format(i, j))
elif i < j:
    print('{}小于{}'.format(i, j))
else:
    print('未知')
  • 49、使用lambda来创建匿名函数。
m, n = eval(input('请输入两个数字,并以逗号分隔:'))
h = lambda x, y: x//y
print(h(m, n))
  • 50、输出一个随机数
import random
# 生成 10 到 20 之间的随机数
print(random.uniform(10, 20))
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值