学习python3的野路子——分支与循环
2019-02-28 本文已影响0人
HerdingCat
本文相关编程题较多。
分支[1]
python3中实现分支的方式是通过if
、elif
、else
三个关键字。
- 通过对关键字的组合并用缩进表示作用域,可以形成单分支、多分支、嵌套分支。
- python3中不提供
switch
、case
关键字。 - 在运用分支结构时,要注意其不确定性(可能不会执行部分子语句),所以编写时对数据处理的语句要有合理的顺序。
循环[1][2]
通过while
和for
可以实现循环功能。
- 同样通过缩进表示作用域,可以有形成嵌套循环。
-
for
语句只能在一个序列中循环。 -
break
: 跳出本层循环;continue
: 跳过本轮循环。 - 由于缩进表示作用域,一个有趣的现象:
else
可以属于for
或者while
子句,当for
遍历一个序列结束时或者while
条件为假时,会执行else
语句。
编程题
- 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)
- 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)
- 本题注意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))
- 简单的判断。
# PAT中的基础编程题目集函数题7-8 speed = eval(input()) if speed > 60: print('Speed: %d - Speeding' %(speed)) else : print('Speed: %d - OK' %(speed))
- 两两比较即可得到结果。
# PAT中的基础编程题目集函数题7-9 A, B, C = input().split(' ') if A == B: print('C') else : if A == C: print('B') else : print('A')
- 本题分类讨论即可。
# 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))
- 简单的选择判断,注意除法运算的特殊性。
# 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')
- 本题需要留意
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))
- 本题是给定精度求的值。注意理解题意。
# 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))
- 本题只是通过暴力枚举的方式对解空间进行遍历,并适当剪枝。注意
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)))
- 本题只需要取小虫头部一个点代表小虫,判断小虫爬行距离与井口的关系:如果不超过井口则下滑;否则就算爬出来。
# 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)
- 本题考虑到货币之间的进制关系,
f
的取值不超过100
则y
的范围就可以在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')
- 本题考察嵌套循环以及输出格式的控制。
# 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)))
- 与
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')
- 本题主要考虑兔子的运动状况,需要设置睡眠时钟判断继续奔跑还是处于睡眠状态。对于乌龟只需要计算
时间
速度
。# 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))
- 按照题意,建立字符串之后,为输出方便将其转为列表按照指定格式输出。
# 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)
- 注意只有
.
时,表示无单词,不需要任何输出。# 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)))
- 本题通过对字符串不断替换[7],直到无法替换为止。
# PAT中的基础编程题目集函数题7-29 Str = input() subStr = input() while True: newStr = Str.replace(subStr, '') if newStr == Str: break; Str = newStr print(Str)
- 本题先将句子中的所有单词逆置,然后按序输出即可。
# 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)