zoukankan      html  css  js  c++  java
  • 40个Python入门小程序

    有不少同学学完Python后仍然很难将其灵活运用。我整理 37 个Python入门的小程序。在实践中应用Python会有事半功倍的效果。

    分享 Github 项目,里面收集了 Python 学习资料 https://github.com/duma-repo/great-programmer

    例子1:华氏温度转换为摄氏温度

    华氏温度转摄氏温度的公式:C = (F - 32) / 1.8。本例考察Python的加减乘除运算符。

    """
    将华氏温度转换为摄氏温度
    """
    
    f = float(input('输入华氏温度: '))
    c = (f - 32) / 1.8
    print('%.1f 华氏度 = %.1f 摄氏度' % (f, c))
    
    例子2:计算圆的周长和面积

    输入半径,计算圆的半径和面积,圆周长公式:2*π*r,面试公式:π*r^2

    """
    半径计算圆的周长和面积
    """
    
    radius = float(input('输入圆的半径: '))
    perimeter = 2 * 3.1416 * radius
    area = 3.1416 * radius * radius
    print('周长: %.2f' % perimeter)
    print('面积: %.2f' % area)
    
    例子3:实现一元一次函数

    实现数学里的一元一次函数:f(x) = 2x + 1

    """
    一元一次函数
    """
    
    x = int(input('输入x:'))
    y = 2 * x + 1
    print('f(%d) = %d' % (x, y))
    
    例子4:实现二元二次函数

    实现数学里的二元二次函数:f(x, y) = 2x^2 + 3y^2 + 4xy,需要用到指数运算符**

    """
    二元二次函数
    """
    
    x = int(input('输入x:'))
    y = int(input('输入y:'))
    
    z = 2 * x ** 2 + 3 * y ** 2 + 4 * x * y
    print('f(%d, %d) = %d' % (x, y, z))
    
    例子5:分离整数的个位数

    将一个正整数的个位数,以及除个位数外的部分分离。需要用到模(取余数)运算符%,和整除运算符//

    """
    分离整数个位数
    """
    
    x = int(input('输入整数:'))
    
    single_dig = x % 10
    exp_single_dig = x // 10
    
    print('个位数: %d' % single_dig)
    print('除个位数外: %d' % exp_single_dig)
    
    例子6:实现一个累加器

    实现一个简单的累加器,可以接受用户输入3个数字,并将其累加。需要用到复合赋值运算符:+=

    """
    累加器 v1.0
    """
    
    s = 0
    
    x = int(input('输入整数:'))
    s += x
    
    x = int(input('输入整数:'))
    s += x
    
    x = int(input('输入整数:'))
    s += x
    
    print('总和:%d' % s)
    
    例子7:判断闰年

    输入年份,判断是否是闰年。闰年判断方法:能被4整除,但不能被100整除;或者能被 400 整除。需要用到算术运算符逻辑运算符

    """
    判断闰年
    """
    
    year = int(input('输入年份: '))
    is_leap = year % 4 == 0 and year % 100 != 0 or year % 400 == 0
    print(is_leap)
    
    例子8:判断奇偶数

    输入一个数字,判断基数还是偶数,需要运算和if ... else结构

    """
    判断奇偶数
    """
    
    in_x = int(input('输入整数:'))
    
    if in_x % 2 == 0:
        print('偶数')
    else:
        print('奇数')
    
    例子9:猜大小

    用户输入一个 1-6 之间的整数,与程序随机生成的数字作比较。需要用到if ... elif ... else结构

    """
    猜大小
    """
    
    import random
    
    in_x = int(input('输入整数:'))
    rand_x = random.randint(1, 6)
    print('程序随机数: %d' % rand_x)
    
    if in_x > rand_x:
        print('用户赢')
    elif in_x < rand_x:
        print('程序赢')
    else:
        print('打平')
    

    说明:random是Python的随机数模块,调用 random.randint 可以生成一个随机数,类型为 int。randint(1, 6) 表示生成 [1, 6] 之间的随机数。

    例子10:判断闰年

    之前判断闰年是输出TrueFalse,这次需要输出文字版闰年平年

    """
    判断闰年
    """
    
    year = int(input('输入年份: '))
    if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
        print('闰年')
    else:
        print('平年')
    
    例子11:摄氏度与华氏度互转

    之前做过华氏度转摄氏度,现在通过分支结构实现二者互转。

    """
    摄氏度与华氏度互换
    """
    
    trans_type = input('输入转摄氏度还是华氏度:')
    
    if trans_type == '摄氏度':  # 执行华氏度转摄氏度的逻辑
        f = float(input('输入华氏温度:'))
        c = (f - 32) / 1.8
        print('摄氏温度为:%.2f' % c)
    elif trans_type == '华氏度':  # 执行摄氏度转华氏度的逻辑
        c = float(input('输入摄氏温度:'))
        f = c * 1.8 + 32
        print('华氏温度为:%.2f' % f)
    else:
        print('请输入 华氏度 或 摄氏度')
    
    例子12:是否构成三角形

    输入三个边长度,判断是否构成三角形。构成三角形的条件:两边之和大于第三边

    """
    是否构成三角形
    """
    a = float(input('输入三角形三条边:
     a = '))
    b = float(input(' b = '))
    c = float(input(' c = '))
    if a + b > c and a + c > b and b + c > a:
        print('能够构成三角形')
    else:
        print('不能构成三角形')
    
    例子13:输出成绩等级

    输入成绩分数,输出分数对应的等级。

    >=90分得A,[80, 90) 得B,[70, 80)得C,[60, 70)得D,< 60得E

    """
    输出成绩等级
    """
    
    score = float(input('请输入成绩: '))
    if score >= 90:
        grade = 'A'
    elif score >= 80:
        grade = 'B'
    elif score >= 70:
        grade = 'C'
    elif score >= 60:
        grade = 'D'
    else:
        grade = 'E'
    print('成绩等级是:', grade)
    
    例子14:计算提成

    某企业的奖金根据销售利润按照如下规则计算提成。输入销售利润,计算奖金。

    利润 <= 10万,奖金可提10%

    10万 < 利润 <= 20万,高出10万的部分提 7.5%

    20万 < 利润 <= 40万,高出20万元的部分提5%

    40万 < 利润 <= 60万,高出40万元的部分提3%

    利润 > 60万,超过60万的部分提1%

    """
    计算提成 v1.0
    """
    
    profit = float(input('输入销售利润(元): '))
    
    if profit <= 100000:
        bonus = profit * 0.1
    elif profit <= 200000:
        bonus = 100000 * 0.1 + (profit - 100000) * 0.075
    elif profit <= 400000:
        bonus = 100000 * 0.1 + 200000 * 0.075 + (profit - 200000) * 0.05
    elif profit <= 600000:
        bonus = 100000 * 0.1 + 200000 * 0.075 + 400000 * 0.05 + (profit - 400000) * 0.03
    else:
        bonus = 100000 * 0.1 + 200000 * 0.075 + 400000 * 0.05 + 600000 * 0.03 + (profit - 600000) * 0.01
    
    print('奖金:%.2f' % bonus)
    
    例子15:实现分段函数

    数学中经常会见到分段函数,用程序实现如下分段函数

    [f(x) = egin{cases} 3x^2 + 4 & (x gt 0) \ 2x + 2 & (x le 0) end{cases} ]

    """
    分段函数
    """
    
    x = int(input('输入:'))
    
    if x > 0:
        y = 3 * x ** 2 + 4
    else:
        y = 2 * x + 2
    
    print('f(%d) = %d' % (x, y))
    
    例子16:1-n求和

    输入正整数n,计算 1 + 2 + ... + n的结果。

    """
    1-n求和
    """
    
    n = int(input('输入n:'))
    
    s = 0
    while n >= 1:
        s += n
        n -= 1
    
    print('1-%d 求和结果: %d' % (n, s))
    
    例子17:累加器 v2.0

    之前实现的累加器只能支持 3 个数相加,现在需要去掉该限制,可以无限相加。

    """
    累加器 v1.0
    """
    
    s = 0
    while True:
        in_str = input('输入整数(输入q,则退出):')
    
        if in_str == 'q':
            break
    
        x = int(in_str)
        s += x
        print('加和:%d' % s)
    
    例子18:猜数游戏

    程序随机生成一个正整数,用户来猜,程序根据猜的大小给出相应的提示。最后,输出用户猜了多少次才猜中。

    """
    猜数游戏
    """
    
    import random
    
    answer = random.randint(1, 100)
    counter = 0
    while True:
        counter += 1
        number = int(input('猜一个数字(1-100): '))
        if number < answer:
            print('再大一点')
        elif number > answer:
            print('再小一点')
        else:
            print('猜对了')
            break
    
    print(f'共猜了{counter}次')
    
    例子19:打印乘法口诀表
    """
    打印乘法口诀表
    """
    
    for i in range(1, 10):
        for j in range(1, i + 1):
            print(f'{i}*{j}={i * j}', end='	')
    
    例子20:是否是素数

    输入一个正整数,判断是否是素数。素数定义:大于1的自然数中,只能被1和它本身整除的自然数。如:3、5、7

    """
    判断是否是素数
    """
    
    num = int(input('请输入一个正整数: '))
    end = int(num // 2) + 1  # 只判断前半部分是否能整除即可,前半部分没有能整除的因此,后半部分肯定也没有
    
    is_prime = True
    for x in range(2, end):
        if num % x == 0:
            is_prime = False
            break
    if is_prime and num != 1:
        print('素数')
    else:
        print('不是素数')
    

    range(2, end) 可以生成 2, 3, ... end序列,并依次赋值给 x 执行循环。range还有如下用法

    range(10):生成 0, 1, 2, ... 9 序列

    range(1, 10, 2):生成 1, 3, 5, ... 9 序列

    例子21:斐波那契数列

    输入正整数 n,计算第 n 位的斐波那契数。斐波那契数列当前位置的数字等于前两个数字之和,1 1 2 3 5 8 ...

    """
    斐波那契数列 v1.0
    """
    
    
    n = int(input('输入n: '))
    a, b = 0, 1
    for _ in range(n):
        a, b = b, a + b
    
    print(f'第 {n} 位斐波那契数是:{a}')
    
    例子22:水仙花数

    水仙花数是一个3位数,该数字每个位上数字的立方和正好等于它本身,例如:

    [153=1^3+5^3+3^3 ]

    """
    水仙花数
    """
    
    for num in range(100, 1000):
        low = num % 10
        mid = num // 10 % 10
        high = num // 100
        if num == low ** 3 + mid ** 3 + high ** 3:
            print(num)
    
    例子23:猴子吃桃

    猴子第一天摘了 n 个桃子,当天吃了一半,还不瘾,又多吃了一个

    第二天早上又将剩下的桃子吃掉一半,又多吃了一个

    以后每天早上都吃了前一天剩下的一半零一个。

    到第10天早上想再吃时,剩下一个桃子。求第一天共摘了多少。

    反向思考:第 n-1 天的桃子 = (第n天桃子 + 1) * 2,从 第 10 天循环计算道第一天即可

    """
    猴子吃桃
    """
    
    peach = 1
    for i in range(9):
        peach = (peach + 1) * 2
    print(peach)
    
    例子24:打印菱形

    输出如下菱形图案

    ***

    *****

    *******

    *****

    ***

    """
    输出菱形
    """
    
    for star_num in range(1, 7, 2):
        blank_num = 7 - star_num
        for _ in range(blank_num // 2):
            print(' ', end='')
        for _ in range(star_num):
            print('*', end='')
        for _ in range(blank_num // 2):
            print(' ', end='')
        print()
    
    for _ in range(7):
        print('*', end='')
    
    print()
    
    for star_num in range(5, 0, -2):
        blank_num = 7 - star_num
        for _ in range(blank_num // 2):
            print(' ', end='')
        for _ in range(star_num):
            print('*', end='')
        for _ in range(blank_num // 2):
            print(' ', end='')
        print()
    
    例子25:计算提成 v2.0

    例子14:计算提成改用列表+循环的方式,代码更简洁,并且可以处理更灵活。

    """
    计算提成 v2.0
    """
    
    profit = int(input('输入销售利润(元): '))
    bonus = 0
    thresholds = [100000, 200000, 400000, 600000]
    rates = [0.1, 0.075, 0.05, 0.03, 0.01]
    
    for i in range(len(thresholds)):
        if profit <= thresholds[i]:
            bonus += profit * rates[i]
            break
        else:
            bonus += thresholds[i] * rates[i]
    
    bonus += (profit - thresholds[-1]) * rates[-1]
    print('奖金:%.2f' % bonus)
    
    例子26:某天是一年中的第几天

    输入某个日期,计算当天是一年中的第几天

    """
    计算某天是一年中的第几天
    """
    
    months = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    res = 0
    year = int(input('年份: '))
    month = int(input('月份: '))
    day = int(input('几号: '))
    
    if year % 4 == 0 and year % 100 != 0 or year % 400 == 0: # 闰年二月 29 天
        months[2] += 1
    
    for i in range(month):
        res += months[i]
    
    print(res+day)
    
    例子27:回文字符串

    判断一个字符串是否是回文串,回文串是一个正读和反读都一样的字符串,如:level

    """
    判断是否是回文串
    """
    
    s = input('输入字符串:')
    
    i = 0
    j = -1
    s_len = len(s)
    flag = True
    
    while i != s_len + j:
        if s[i] != s[j]:
            flag = False
            break
        i += 1
        j += -1
    
    print('是回文串' if flag else '不是回文串')
    
    例子28:个人信息输入输出

    不定义类的情况下,可以将个人信息保存在元祖中

    students = []
    while True:
        input_s = input('输入学生信息(学号 姓名 性别),空格分隔(输入q,则退出):')
    
        if input_s == 'q':
            break
    
        input_cols = input_s.split(' ')
        students.append((input_cols[0], input_cols[1], input_cols[2]))
    
    print(students)
    
    例子29:个人信息排序

    个人信息保存在元组中,并按照学号、姓名或者性别排序。

    """
    个人信息排序
    """
    
    students = []
    cols_name = ['学号', '姓名', '性别']
    while True:
        input_s = input('输入学生信息(学号 姓名 性别),空格分隔(输入q,则退出):')
    
        if input_s == 'q':
            break
    
        input_cols = input_s.split(' ')
        students.append((input_cols[0], input_cols[1], input_cols[2]))
    
    sorted_col = input('输入排序属性:')
    sorted_idx = cols_name.index(sorted_col)  # 根据输入的属性获取元组的索引
    
    print(sorted(students, key=lambda x: x[sorted_idx]))
    
    例子30:对输入的内容去重

    对输入的内容去重,直接用 PythonSet集合实现

    """
    去重
    """
    
    input_set = set()
    
    while True:
        s = input('输入内容(输入q,则退出):')
    
        if s == 'q':
            break
    
        input_set.add(s)
    
    print(input_set)
    
    例子31:输出集合交集

    给定Python web工程师算法工程师需要的技能,计算二者交集。

    """
    集合交集
    """
    
    python_web_programmer = set()
    python_web_programmer.add('python基础')
    python_web_programmer.add('web知识')
    
    ai_programmer = set()
    ai_programmer.add('python基础')
    ai_programmer.add('机器学习')
    
    inter_set = python_web_programmer.intersection(ai_programmer)
    print('技能交集:', end='')
    print(inter_set)
    

    Python set集合除了能计算交集,还可以计算并集、补集

    例子32:猜拳游戏

    用程序实现石头剪刀布游戏。

    """
    猜拳游戏
    """
    
    # 0代表布,1代表剪刀,2代表石头
    import random
    
    rule = {'布': 0, '剪刀': 1, '石头': 2}
    
    rand_res = random.randint(0, 2)
    input_s = input('输入石头、剪刀、布:')
    input_res = rule[input_s]
    win = True
    
    if abs(rand_res - input_res) == 2:  # 相差2说明是布和石头相遇,出布一方胜
        if rand_res == 0:
            win = False
    elif rand_res > input_res:  # 相差1的情况谁大谁赢
        win = False
    
    print(f'程序出:{list(rule.keys())[rand_res]},输入:{input_res}')
    
    if rand_res == input_res:
        print('平')
    else:
        print('赢' if win else '输')
    
    例子33:字典排序

    字典的key是姓名,value是身高,现在需要按照身高对字典重新排序。

    """
    字典排序
    """
    
    hs = {'张三': 178, '李四': 185, '王麻子': 175}
    
    print(dict(sorted(hs.items(), key=lambda item: item[1])))
    
    例子34:二元二次函数 v2.0

    将二元二次函数封装在函数中,方便调用

    """
    二元二次函数 v2.0
    """
    
    def f(x, y):
        return 2 * x ** 2 + 3 * y ** 2 + 4 * x * y
    
    
    print(f'f(1, 2) = {f(1, 2)}')
    
    例子35:斐波那契数列 v2.0

    使用递归函数的形式生成斐波那契数列

    """
    递归版斐波那契数列
    """
    
    def fib(n):
        return 1 if n <= 2 else fib(n-1) + fib(n-2)
    
    
    print(f'第 10 个斐波那契数是:{fib(10)}')
    
    例子36:阶乘

    定义一个函数,实现阶乘。n的阶乘定义:n! = 1*2*3* ... n

    """
    阶乘函数
    """
    
    def fact(n):
        return 1 if n == 1 else fact(n-1) * n
    
    
    print(f'10! = {fact(10)}')
    
    例子37:实现 range 函数

    编写一个类似于 Python中的 range 功能的函数

    """
    range函数
    """
    
    def range_x(start, stop, step):
        res = []
        while start < stop:
            res.append(start)
    
            start += step
        return res
    

    欢迎公众号 「渡码」,回复关键词 gp 获取优质编程资料。

    duma
  • 相关阅读:
    CCF-201803-3-URL映射(模拟)
    Problem UVA11134-Fabled Rooks(贪心)
    UVA1152-4 Values whose Sum is 0(分块)
    UVA1605-Building for UN(思维)
    基于XMPP的IOS聊天客户端程序(IOS端一)
    基于XMPP的IOS聊天客户端程序(XMPP服务器架构)
    正则表达式在iOS中的运用
    NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
    自动无限循环UIScrollView原理
    NSTimeZone
  • 原文地址:https://www.cnblogs.com/duma/p/15456121.html
Copyright © 2011-2022 走看看