学习python3的野路子——分支与循环

本文相关编程题较多。

分支[1]

python3中实现分支的方式是通过ifelifelse三个关键字。

  • 通过对关键字的组合并用缩进表示作用域,可以形成单分支、多分支、嵌套分支。
  • python3中不提供switchcase关键字。
  • 在运用分支结构时,要注意其不确定性(可能不会执行部分子语句),所以编写时对数据处理的语句要有合理的顺序。

循环[1][2]

通过whilefor可以实现循环功能。

  • 同样通过缩进表示作用域,可以有形成嵌套循环。
  • for语句只能在一个序列中循环。
  • break: 跳出本层循环;continue: 跳过本轮循环。
  • 由于缩进表示作用域,一个有趣的现象:else可以属于for或者while子句,当for遍历一个序列结束时或者while条件为假时,会执行else语句。

编程题

  1. 7-3的编程题中涉及整数除法[3]
    # PAT中的基础编程题目集函数题7-3
    num = eval(input())
    revnum = 0
    
    while num:
        revnum = revnum * 10
        revnum = revnum + num % 10
        num = num // 10 # python3中的整除运算
    
    print(revnum)
    
  2. 7-4编程题中涉及字符处理[4]以及类型的转换[5]。本题题意是将十进制转化为十六进制;同时,要注意边界情况。
    # PAT中的基础编程题目集函数题7-4
    num = eval(input())
    if num:
        ans = ''
    else :
        ans = '0'
    
    while num:
        tmp = num % 16
        if tmp < 10:
            ans = str(tmp) + ans
        else :
            ans = str(tmp - 10 + ord('A')) + ans #
        num = num  // 16
    
    print(ans)
    
  3. 本题注意12和24小时的转化。
    # PAT中的基础编程题目集函数题7-7
    hour, min = input().split(':')
    hour = int(hour)
    min = int(min)
    if hour < 12:
        print('%d:%d AM' %(hour, min))
    elif hour == 12:
        print('%d:%d PM' %(hour, min))
    elif hour < 24:
        print('%d:%d PM' %(hour % 12, min))
    else :
        print('%d:%d AM' %(hour % 12, min))
    
  4. 简单的判断。
    # PAT中的基础编程题目集函数题7-8
    speed = eval(input())
    if speed > 60:
        print('Speed: %d - Speeding' %(speed))
    else :
        print('Speed: %d - OK' %(speed))
    
  5. 两两比较即可得到结果。
    # PAT中的基础编程题目集函数题7-9
    A, B, C = input().split(' ')
    if A == B:
        print('C')
    else :
        if A == C:
            print('B')
        else :
            print('A')
    
  6. 本题分类讨论即可。
    # PAT中的基础编程题目集函数题7-10
    year, time = input().split(' ')
    if int(year) >= 5:
        if int(time) > 40:
            print('%.2f' %(40 * 50 + (int(time) - 40) * 1.5 * 50))
        else :
            print('%.2f' %(int(time) * 50))
    else :
        if int(time) > 40:
            print('%.2f' %(40 * 30 + (int(time) - 40) * 1.5 * 30))
        else :
            print('%.2f' %(int(time) * 30))
    
  7. 简单的选择判断,注意除法运算的特殊性。
    # PAT中的基础编程题目集函数题7-12
    num1, op, num2 = input().split()
    if op == '+':
        print(int(num1) + int(num2))
    elif op == '-':
        print(int(num1) - int(num2))
    elif op == '*':
        print(int(num1) * int(num2))
    elif op == '/':
        print(int(int(num1) / int(num2)))
        # print(int(num1) // int(num2)) #
    elif op == '%':
        print(int(num1) % int(num2))
    else :
        print('ERROR')
    
  8. 本题需要留意range(s, e)函数生成的区间是[s, e)。此外,python3按指定格式输出比较麻烦。
    # PAT中的基础编程题目集函数题7-14
    s, e = input().split(' ')
    pattern = '' # 用以控制输出字符串
    ans = '' # 用以记录输出内容
    count = 0
    sum = 0
    for i in range(int(s), int(e) + 1):
        sum = sum + i
        pattern = pattern + '%5d'
        ans = ans + str(i) + ','
        count = count + 1
        if count % 5 == 0:
            pattern = pattern + '\n'
            count = 0
    if (int(e) - int(s) + 1) % 5 == 0: # 考虑区间中元素正好是5的倍数,留意其换行
        pattern = pattern + 'Sum = %d'
        ans = ans + str(sum)
        print(pattern %(eval(ans)))
    else :
        print(pattern %(eval(ans)))# 等价于print('%5d%5d' %(-3,-2))
        print('Sum = %d' %(sum))
    
  9. 本题是给定精度求\pi的值。注意理解题意。
    # PAT中的基础编程题目集函数题7-15
    threshold = eval(input())
    item = 1.0
    sum = 0.0
    i = 1
    while item >= threshold:
        sum = sum + item
        item = item / (2 * i + 1) * i
        i = i + 1
    sum = sum + item # 直到最后一项的值小于给定阈值
    print('%.6f' %(2.0 * sum))
    
  10. 本题只是通过暴力枚举的方式对解空间进行遍历,并适当剪枝。注意s[0: len(s)-1]s[0: -1]的区别[6]
    # PAT中的基础编程题目集函数题7-16
    s = eval(input())
    pattern = ''
    ans = ''
    count = 0
    for i in range(s, s + 4):
        for j in range(s, s + 4):
            if i != j:
                for k in range(s, s + 4):
                    if i != k and j != k:
                        if count:
                            pattern = pattern + ' %d'
                        else :
                            pattern = pattern + '%d'
                        ans = ans +  str(i * 100 + j * 10 + k) + ','
                        count = count + 1
                        if count % 6 == 0:
                            pattern = pattern + '\n'
                            count = 0
    print(pattern[0: len(pattern) - 1] %(eval(ans)))
    
  11. 本题只需要取小虫头部一个点代表小虫,判断小虫爬行距离与井口的关系:如果不超过井口则下滑;否则就算爬出来。
    # PAT中的基础编程题目集函数题7-17
    Input = input().split()
    N = int(Input[0]); U = int(Input[1]); D = int(Input[2])
    min = 0; height = 0
    while True:
        min += 1
        height += U
        if height >= N:
            break
        min += 1
        height -= D
    print(min)
    
  12. 本题考虑到货币之间的进制关系,f的取值不超过100y的范围就可以在range(0, 50)之间,判断是否具有整数解即可。
    # PAT中的基础编程题目集函数题7-19
     # 51.25 - 23 = 51.02 = 2 * (25.51)
     # f*100+y-n=2(y*100+f)
     # 98f-199y = n
     # f = (n + 199y)/98
    n = eval(input())
    hasSolution = False
    for y in range(0, 50):
        f = (n + 199 * y) / 98
        if f - int(f) == 0:
            print('%d.%d' %(y, int(f)))
            hasSolution = True
    if not hasSolution:
        print('No Solution')
    
  13. 本题考察嵌套循环以及输出格式的控制。
    # PAT中的基础编程题目集函数题7-20
    N = eval(input())
    for i in range(1, N + 1):
        pattern = ''
        ans = ''
        for j in range(1, i + 1):
            pattern += '%d*%d=%-4d'
            ans += str(j) + ',' + str(i) + ',' + str(j * i) + ','
        print(pattern %(eval(ans)))
    
  14. 7-19类似,化简方程判断是否有整数解。
    # PAT中的基础编程题目集函数题7-21
    from math import sqrt
    N = eval(input())
    hasSolution = False
    for x in range(1, int(sqrt((N / 2)))+1):
        y = sqrt((N - x*x))
        if y - int(y) == 0:
            print('%d %d' %(x, y))
            hasSolution = True
    if not hasSolution:
        print('No Solution')
    
  15. 本题主要考虑兔子的运动状况,需要设置睡眠时钟判断继续奔跑还是处于睡眠状态。对于乌龟只需要计算时间\times 速度
    # PAT中的基础编程题目集函数题7-22
    T = eval(input())
    tdis = 0
    rdis = 0
    clock = 0
    while T >= 10:
        if rdis > tdis and not clock: # 兔子在乌龟前,并且没有睡眠,则设置睡眠时钟
            clock = 30
        if not clock: # 兔子没有睡眠,则运动
            rdis += 90
        else : # 兔子在睡眠,则减少睡眠时钟的量
            clock -= 10
        tdis += 30
        T -= 10
    if not clock and rdis <= tdis: # 在剩余时间内,清醒的兔子落后于乌龟,则兔子运动
        rdis += T * 9
    tdis += T * 3
    if tdis > rdis:
        print('@_@ %d' %(tdis))
    elif rdis > tdis:
        print('^_^ %d' %(rdis))
    else :
        print('-_- %d' %(rdis))
    
  16. 按照题意,建立字符串之后,为输出方便将其转为列表按照指定格式输出。
    # PAT中的基础编程题目集函数题7-25
    num = input()
    num = str(int(num))
    pinyin = ans = ''
    for ch in num:
        if ch == '-':
            pinyin += ',fu'
        elif ch == '0':
            pinyin += ',ling'
        elif ch == '1':
            pinyin += ',yi'
        elif ch == '2':
            pinyin += ',er'
        elif ch == '3':
            pinyin += ',san'
        elif ch == '4':
            pinyin += ',si'
        elif ch == '5':
            pinyin += ',wu'
        elif ch == '6':
            pinyin += ',liu'
        elif ch == '7':
            pinyin += ',qi'
        elif ch == '8':
            pinyin += ',ba'
        elif ch == '9':
            pinyin += ',jiu'
    pinyin = pinyin.split(',')
    cnt = 0
    for digital in pinyin:
        cnt += 1
        if cnt == 1:
            continue
        if cnt > 2:
            ans += ' '
        ans += digital
    print(ans)
    
  17. 注意只有.时,表示无单词,不需要任何输出。
    # PAT中的基础编程题目集函数题7-26
    words = input().split()
    pattern = ''
    ans = ''
    cnt = 0 # 用以记录句子中单词个数
    for word in words:
        if word == '.':
            break
        if cnt:
            pattern += ' '
        pattern += '%d'
        if cnt == len(words) - 1:
            ans += str(len(word) - 1) + ','
        else :
            ans += str(len(word)) + ','
        cnt += 1
    if cnt:
        print(pattern %(eval(ans)))
    
  18. 本题通过对字符串不断替换[7],直到无法替换为止。
    # PAT中的基础编程题目集函数题7-29
    Str = input()
    subStr = input()
    while True:
        newStr = Str.replace(subStr, '')
        if newStr == Str:
            break;
        Str = newStr
    print(Str)
    
  19. 本题先将句子中的所有单词逆置,然后按序输出即可。
    # PAT中的基础编程题目集函数题7-32
    words = input().split()
    words = words[: : -1]
    ans = ''
    isFirst = False
    for word in words:
        if isFirst:
            ans += ' '
        else :
            isFirst = True
        ans += word
    print(ans)
    

参考


  1. https://docs.python.org/3.5/tutorial/controlflow.html

  2. https://blog.csdn.net/a18353365031/article/details/79965240

  3. https://www.cnblogs.com/hanggegege/p/5840005.html

  4. https://www.cnblogs.com/jiduxia/p/7643650.html

  5. https://blog.csdn.net/make_app/article/details/45752405

  6. https://www.cnblogs.com/huangcong/archive/2011/08/29/2158268.html

  7. https://blog.csdn.net/killwho/article/details/78205769

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容