Python刚刚入门,将自己每次所学的知识及理解总结下来,希望能帮助大家,知识点如有不妥之处,还望指出,一起进步
目录
一些习惯:
循环,遍历一个意思
称for循环,while循环
一般循环一个列表就称遍历这个列表(字符串,字典等)
1.for循环
格式1:for i in range(n):
注意:
这里的i代表索引值,通俗的理解就是序号,从0开始
循环的区间是左闭右开的
如果()里只有一个数,那么就就代表从0开始到这个数-1循环输出
格式2:for i in list:
注意:
这里的i不再是索引值,是具体的值
in后面可以是列表,字典,字符串
2.while循环
有限次循环
格式:
while n:
n-=1
无限循环(死循环)
格式:
while True:
多组案例(重点)
很多题都会涉及到多组案例
格式:
while True:
try:#捕获异常
//代码块
except EOFError:#EOFError代表没有输入
break
3.练习
1.循环输出
题目:
利用循环,输出5行ABC
代码:
for i in range(5):
print("ABC")
2.循环输出-2
题目:
利用循环,输出数字1-10
代码:
for i in range(1, 11):
if i < 10:
print(i, end=" ")
else:
print(i)
3.循环求和
题目:
输入两个整数 a,b,计算从 a 加到 b 的和。
代码:
l = list(map(int, input().split()))
sum = 0
for i in range(l[0], l[1] + 1):
sum += i
print(sum)
4.老王又卖瓜(运用移位运算符知识点)
题目:
老王第一天卖n个瓜,第二天只卖第一天一半的瓜(如果不是整数,则取整,任何一天皆如此处理),第三天只卖第二天一半的瓜,...,直到某一天一个瓜都不卖了。 问老王总共卖了多少瓜?
思路:
"""
思路:
开一个sum来保存卖出去的瓜数
第一天卖n个瓜,之后每天卖前一天的一半,只要没瓜不卖了,
其实就是每天卖已有瓜数的一半,那么我们不妨设初始为2*n个瓜
开一个while循环,只要瓜数>0,就一直循环
每次循环,num=num//2(可以写成num//=2),即表示剩下的每次卖出去的瓜数,注意(//在Python中是整除,/不是整除)
拓展:
整除2这里,我们可以用移位运算符来解决,>>1就是//2,>>代表这个数的二进制位向后移动移位,
我们知道二进制从右往左是以此乘2的,因此向后移位也就是除以2,这样写的好处:效率高
"""
代码:
num = 2 * int(input())
sum = 0
while num:
num //= 2
sum += num
print(sum, end="")
5.输入输出测试-3
题目:
计算 A + B 的值。
代码:
num = int(input())
while num:
num -= 1
l = list(map(int, input().split()))
print(sum(l))
6.工作日
题目:
星期一到星期五是工作日,星期六和星期日是周末。 根据输入的星期几属于工作日还是周末,输出working day或者holiday
代码:
t = int(input())
while t:
t -= 1
day = int(input())
if 1 <= day <= 5:
print("working day")
elif 6 <= day <= 7:
print("holiday")
else:
print("error")
7.数字和
题目:
计算0到n之间所有整数的和
思路:
"""
思路:
注意n的正负,要分类讨论
"""
代码:
n = int(input())
sum = 0
if n >= 0:
for i in range(0, n + 1):
sum += i
else:
for i in range(n, 1):
sum += i
print(sum, end="")
8.跑跑斗士
题目:
题目: 小明很喜欢跑步,他跑步的时候总是每跑两圈就走一圈,先跑后走,如此往复, 已知操场一圈400米,小明跑一圈需要2分钟,走一圈需要4分钟,请问m分钟后,小明走和跑一共多少米。
思路:
"""
思路:
跑两圈加走一圈为一轮,时间为8,路程为1200
那么我们就要判断m分钟完成了几轮,或者正处于最后最后一轮的哪个阶段
1.如果m能够整除8,那么就能求出一共完成几轮,再*1200
2.如果不能整除,分类讨论,
1)如果余数<=4,那么就说明正处于跑的阶段,
那么我们先把之前的轮数*1200,再加上剩下跑的路程
那剩下的时间怎么求
minute - (minute // 8) * 8
2)如果余数>4,那就说明正处于走的阶段,
那么剩余的时间就不再是1)的那个了,需要再-4,因为最后一轮已跑完800米
那么我们先把之前的轮数*1200,加上最后一轮已跑完的800米,再加上剩下走的路程
"""
代码:
t = int(input())
while t:
t -= 1
minute = int(input())
if minute % 8 == 0:
print(minute // 8 * 1200)
elif minute % 8 <= 4:
print(minute // 8 * 1200 + (minute - (minute // 8) * 8) * 200)
else:
print(minute // 8 * 1200 + (minute - (minute // 8) * 8 - 4) * 100 + 800)
9.难忘的424
题目:
最近四六级成绩又公布了,有人欢喜有人愁,学校想统计一下这次四六级分别有多少同学通过。 众所周知,一个考生想要通过考试必须要分数大于424,并且想要通过六级的话必须先通过4级!
思路:
"""
思路:
先开两个int类型的数ans4,ans6来记录四六级通过人数
难点在于如何区分这个人考六级的时候,他的四级是否通过
并且如果一个人多次考四级或六级并且分数已经多次通过424,只能算一次
分别开布尔值cnt4,cnt6来记录一个人的四级通过与否和六级通过与否
初始都设置为False,只要这个人考试满足分数要求并且是第一次通过(即cnt4==False)
ans4++并且将cnt4变为True,为什么改变布尔值?
因为如果不变,那么下次这个人如果四级还是满足分数要求,cnt4依旧是False,并没有起到限制,ans还是会++,因此我们需要将其改为True来限制ans的增加
只要这个人六级分数满足要求并且四级已通过并且是第一次通过六级(即cnt6==False)
ans6++并且将cnt6变为True(起限制作用)
重点:
布尔值值的灵活运用,运用场景看一个值是否出现在一串数字中等
"""
代码:
t = int(input())
while t:
t -= 1
num = int(input())
ans4 = 0
ans6 = 0
while num:
num -= 1
cnt = int(input())
cnt4 = False
cnt6 = False
while cnt:
cnt -= 1
l = list(map(int, input().split()))
if l[0] == 4 and l[1] >= 425 and cnt4 == False:
cnt4 = True
ans4 += 1
if l[0] == 6 and l[1] >= 425 and cnt4 and cnt6 == False:
cnt6 = True
ans6 += 1
print(ans4, ans6)