欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python笔记:经典案例(选择结构和循环结构)

程序员文章站 2022-03-19 17:09:43
综合案例案例1 输入若干个成绩,求所有成绩的平均分。每输入一个成绩后询问是否继续输入下一个成绩,回答“yes”就继续输入下一个成绩,回答“no”就停止输入成绩。numbers = []while True: x = input('请输入一个成绩:') #异常处理结构,用来保证用户只能输入实数 try: #先把x转换成实数,然后追加到列表numbers尾部 numbers.append(float(x)) except: p...

综合案例

案例1 输入若干个成绩,求所有成绩的平均分。每输入一个成绩后询问是否继续输入下一个成绩,回答“yes”就继续输入下一个成绩,回答“no”就停止输入成绩。

numbers = []
while True:
    x = input('请输入一个成绩:')
    #异常处理结构,用来保证用户只能输入实数
    try:
        #先把x转换成实数,然后追加到列表numbers尾部
        numbers.append(float(x))
    except:
        print('不是合法成绩')

    #下面的循环用来限制用户只能输入任意大小写的“yes”或者“no”
    while True:
        flag = input('继续输入吗?(yes/no)').lower()
        if flag not in ('yes', 'no'):
            print('只能输入yes或no')
        else:
            break
    if flag=='no':
        break

#计算平均分
print(sum(numbers)/len(numbers))

案例2 编写程序,判断今天是今年的第几天。

import time

date = time.localtime()                         #获取当前日期时间
year, month, day = date[:3]
day_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if year%400==0 or (year%4==0 and year%100!=0):   #判断是否为闰年
    day_month[1] = 29
if month==1:
    print(day)
else:
    print(sum(day_month[:month-1])+day)

案例3 编写代码,输出由星号*组成的菱形图案,并且可以灵活控制图案的大小。

def main(n):
    for i in range(n):
        print((' * '*i).center(n*3))
    for i in range(n, 0, -1):
        print((' * '*i).center(n*3))

例4 快速判断一个数是否为素数。

n = input("Input an integer:")
n = int(n)
if n in (2,3):
    print('Yes')
#偶数必然不是素数
elif n%2 == 0:
    print('No')
else:
    #大于5的素数必然出现在6的倍数两侧
    #因为6x+2、6x+3、6x+4肯定不是素数,假设x为大于1的自然数
    m = n % 6
    if m!=1 and m!=5:
        print('No')
    else:
        for i in range(3, int(n**0.5)+1, 2):
            if n%i == 0:
                print('No')
                break
        else:
            print('Yes')

例5 编写程序,计算组合数C(n,i),即从n个元素中任选i个,有多少种选法。
根据组合数定义,需要计算3个数的阶乘,在很多编程语言中都很难直接使用整型变量表示大数的阶乘结果,虽然Python并不存在这个问题,但是计算大数的阶乘仍需要相当多的时间。本例提供另一种计算方法:以Cni(8,3)为例,按定义式展开如下,对于(5,8]区间的数,分子上出现一次而分母上没出现;(3,5]区间的数在分子、分母上各出现一次;[1,3]区间的数分子上出现一次而分母上出现两次。

Python笔记:经典案例(选择结构和循环结构)
看图比较实在。

def Cni(n, i):
    if not (isinstance(n,int) and isinstance(i,int) and n>=i):
        print('n and i must be integers and n must be larger than or equal to i.')
        return
    result = 1
    Min, Max = sorted((i,n-i))
    for i in range(n,0,-1):
        if i>Max:
            result *= i
        elif i<=Min:
            result //= i
    return result

print(Cni(6,2))

例6 编写程序,输入一个自然数n,然后计算并输出前n个自然数的阶乘之和1!+2!+3!+…+n!的值。

n = int(input('请输入一个自然数:'))
#使用result保存最终结果,t表示每一项
result, t = 1, 1
for i in range(2, n+1):
    #在前一项的基础上得到当前项
    t *= i
    #把当前项加到最终结果上
    result += t
print(result)

例7 编写代码,模拟决赛现场最终成绩的计算过程。有至少3个评委,打分规则为删除最高分和最低分之后计算剩余分数的平均分。

while True:
    try:
        n = int(input('请输入评委人数:'))
        if n <= 2:
            print('评委人数太少,必须多于2个人。')
        else:
            break
    except:
        pass
    
scores = []
for i in range(n):
    #这个while循环用来保证用户必须输入0到100之间的数字
    while True:
        try:
            score = input('请输入第{0}个评委的分数:'.format(i+1))
            #把字符串转换为实数
            score = float(score)
            assert 0<=score<=100
            scores.append(score)
            #如果数据合法,跳出while循环,继续输入下一个评委的分数
            break
        except:
            print('分数错误')
 #计算并删除最高分与最低分
highest = max(scores)
lowest = min(scores)
scores.remove(highest)
scores.remove(lowest)
finalScore = round(sum(scores)/len(scores),2)

formatter = '去掉一个最高分{0}\n去掉一个最低分{1}\n最后得分{2}'
print(formatter.format(highest, lowest, finalScore))

例8 编写程序,实现人机对战的尼姆游戏。

from random import randint

n = int(input('请输入一个正整数:'))
while n > 1:
    #人类玩家先走
    print("该你拿了,现在剩余物品数量为:{0}".format(n))
    #确保人类玩家输入合法整数值
    while True:
        try:
            num = int(input('输入你要拿走的物品数量:'))
            #确保拿走的物品数量不超过一半
            assert 1 <= num <= n//2
            break
        except:
            print('最少必须拿走1个,最多可以拿走{0}个。'.format(n//2))
    n -= num
    if n == 1:
        print('恭喜,你赢了!')
        break
    #计算机玩家随机拿走一些,randint()用来生成指定范围内的一个随机数
    n -= randint(1, n//2)            
else:
    print('哈哈,你输了。')

本文地址:https://blog.csdn.net/qq_46144237/article/details/108246238

相关标签: Python学习