python 学习笔记(2)——分支与循环

python 学习笔记(2)——分支与循环

Contents

分支与循环

分支结构

在 Python 里面也就是 if 语句辣。

这个当然大多数语言都是差不多的。

基本语法

总体上支持 ifelifelse 三种关键字。

举个例子:

if a > b and a > c:
    print(a)
elif b > a and b > c:
    print(b)
else:
    print(c)

应该没了。反正递进嵌套也没啥特别的。

循环结构

在 Python 中主要就是 for-in 循环和 while 循环两种。

for-in 循环

直接上例子:

sum = 0
for x in range(101):
    sum += 1 / x
print(sum)

这里的 range(101) 构造了一个 $0 \sim 100$ 的范围,相当于构成了一个整数序列用于循环,其更多使用方法如下:

  • range(n) 产生一个 $0 \sim n – 1$ 的整数序列。
  • range(l, r) 产生一个 $l \sim r – 1$ 的整数序列。
  • range(l, r, step) 产生一个 $l \sim r – 1$ 步长为 $step$ 的整数序列,步长就是数值序列的增量。

for-in 循环实际上是对于一个容器的遍历,这里的 range() 函数产生的是比较简单的整数序列容器,其他容器留待后面再讲。

while 循环

听着名字就能猜到咋用了吧。

就是当 while 后的条件成立时不断执行,跟 C/C++ 一毛一样(应该吧)。

举个例子:(来自原文)

"""
猜数字游戏
计算机出一个1~100之间的随机数由人来猜
计算机根据人猜的数字分别给出提示大一点/小一点/猜对了

Version: 0.1
Author: 骆昊
"""

import random

answer = random.randint(1, 100)
counter = 0
while True:
    counter += 1
    number = int(input('请输入: '))
    if number < answer:
        print('大一点')
    elif number > answer:
        print('小一点')
    else:
        print('恭喜你猜对了!')
        break
print('你总共猜了%d次' % counter)
if counter > 7:
    print('你的智商余额明显不足')

这里用到的 break 和没有出现的 continue 都是跟 C/C++ 相同的用法,分别用于提前终止循环和直接进入下一轮循环。

原文“精选”习题

  1. 百分制成绩转换为等级制成绩

    要求:如果输入的成绩在90分以上(含90分)输出A;80分-90分(不含90分)输出B;70分-80分(不含80分)输出C;60分-70分(不含70分)输出D;60分以下输出E。

    """
    百分制成绩转换为等级制成绩
    
    Version: 0.1
    Author: 骆昊
    """
    
    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)
    
  2. 判断输入正整数是否为素数

    提示:素数指的是只能被1和自身整除的大于1的整数。

    """
    输入一个正整数判断它是不是素数
    
    Version: 0.1
    Author: 骆昊
    Date: 2018-03-01
    """
    
    from math import sqrt
    
    num = int(input('请输入一个正整数: '))
    end = int(sqrt(num))
    is_prime = True
    
    for x in range(2, end + 1):
       if num % x == 0:
           is_prime = False
           break
    
    if is_prime and num != 1:
       print('%d是素数' % num)
    else:
       print('%d不是素数' % num)
    
  3. 输出 $2000$ 以内所有素数:不提供参考程序。

  4. 百钱白鸡问题:不提供参考程序。

    说明:百钱百鸡是我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?翻译成现代文是:公鸡5元一只,母鸡3元一只,小鸡1元三只,用100块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?

  5. CRAPS 赌博游戏

    说明:CRAPS又称花旗骰,是美国拉斯维加斯非常受欢迎的一种的桌上赌博游戏。该游戏使用两粒骰子,玩家通过摇两粒骰子获得点数进行游戏。简单的规则是:玩家第一次摇骰子如果摇出了7点或11点,玩家胜;玩家第一次如果摇出2点、3点或12点,庄家胜;其他点数玩家继续摇骰子,如果玩家摇出了7点,庄家胜;如果玩家摇出了第一次摇的点数,玩家胜;其他点数,玩家继续要骰子,直到分出胜负。

    """
    Craps赌博游戏
    我们设定玩家开始游戏时有1000元的赌注
    游戏结束的条件是玩家输光所有的赌注
    
    Version: 0.1
    Author: 骆昊
    """
    from random import randint
    
    money = 1000
    while money > 0:
       print('你的总资产为:', money)
       needs_go_on = False
       while True:
           debt = int(input('请下注: '))
           if 0 < debt <= money:
               break
       first = randint(1, 6) + randint(1, 6)
       print('玩家摇出了%d点' % first)
       if first == 7 or first == 11:
           print('玩家胜!')
           money += debt
       elif first == 2 or first == 3 or first == 12:
           print('庄家胜!')
           money -= debt
       else:
           needs_go_on = True
       while needs_go_on:
           needs_go_on = False
           current = randint(1, 6) + randint(1, 6)
           print('玩家摇出了%d点' % current)
           if current == 7:
               print('庄家胜')
               money -= debt
           elif current == first:
               print('玩家胜')
               money += debt
           else:
               needs_go_on = True
    print('你破产了, 游戏结束!')
    
  6. (抖机灵)输出斐波那契第 $n$ 个数:你可以选择看看或者秒杀。

    说明:$n \le 10^{18}$,因为答案过大,只需要输出对 $10^9 + 7$ 取模的结果即可。

 

点赞 0

No Comments

Add your comment