课程开源地址:课程简介 - 聪明办法学 Python 第二版
章节结构:
因为是复习,所以把循环和条件判断放一起写一期笔记
首先是条件判断,这是判断条件原图:
接下来规范了书写,要提高可读性,非必要不用一行写完整个代码。
最基础的就是for循环和while循环
注意:
break 和continue
break定义
continue的定义
嵌套循环注意超时
第四第五节的作业都比较常规,基础题不需要过多阐述了。。。。
这里需要注意的是,在对齐下标的时候记得是从0开始,另外注意有暴力取值的,范围即为重要,千万注意别超时。
在书写上注意书写规范,务必记得提高代码可读性。
补充:应要求,加上作业题解:
这是一个简单的分数转换程序。通过input()
函数获取用户输入的分数,并将其转换为整数类型。然后使用条件语句来判断分数的范围,并输出相应的等级或错误消息。
如果分数小于0或大于100,输出"error"。否则,按照分数区间判断等级:如果分数大于等于80,则输出"A";如果分数大于等于60,则输出"B";否则,输出"C"。
x = int(input())
if x < 0 or x > 100:
print("error")
elif x >= 80:
print("A")
elif x >= 60:
print("B")
else:
print("C")
这里使用max,min函数,注意界限之外的值
import ast
x, bound1, bound2 = ast.literal_eval(input())
# 使用max和min函数
result = max(bound1, min(x, bound2))
result2 = max(bound2, min(x, bound1))
if bound1 > bound2:
result3 = result2
else:
result3 = result
print(result3)
本节是条件语句的课后作业,所以使用条件语句。我们使用条件语句来判断x和y是否都在-1和1之间。如果是,则输出True;否则,输出False。
import ast
x, y = ast.literal_eval(input())
# 现在程序中有两个变量 x, y
# 方法一:使用条件语句
if -1 <= x <= 1 and -1 <= y <= 1:
print(True)
else:
print(False)
#使用条件语句。我们使用条件语句来判断x和y是否都在-1和1之间。如果是,则输出True;否则,输出False。
x = int(input())
# 现在程序中有一个变量 x
# # 方法一:使用条件语句
# if (x % 4 == 0 and x % 100 != 0) or x % 400 == 0:
# print(True)
# else:
# print(False)
result = True if (x % 4 == 0 and x % 100 != 0) or x % 400 == 0 else False
print(result)
"""
使用条件语句。我们使用条件语句来判断年份是否满足以下两个条件之一:
能够被4整除,但不能被100整除
能够被400整除
"""
条件语句和字典,使用条件语句和字典来根据月份和年份是否是闰年来确定每个月的天数。将每个月的天数存储在一个字典days_in_month中,然后根据输入的月份m从字典中获取对应的天数
import ast
y, m = ast.literal_eval(input())
# 现在程序中有两个变量 y, m
# 方法一:使用条件语句和字典
days_in_month = {
1: 31,
2: 29 if (y % 4 == 0 and y % 100 != 0) or y % 400 == 0 else 28,
3: 31,
4: 30,
5: 31,
6: 30,
7: 31,
8: 31,
9: 30,
10: 31,
11: 30,
12: 31
}
result = days_in_month[m]
print(result)
#使用条件语句和字典。我们使用条件语句和字典来根据月份和年份是否是闰年来确定每个月的天数。我们将每个月的天数存储在一个字典days_in_month中,然后根据输入的月份m从字典中获取对应的天数
import ast
import numpy as np
n, m = ast.literal_eval(input())
# 方法一:使用嵌套循环
for i in range(n):
for j in range(m):
print(1, end=" ")
print()
# # 方法二:使用列表推导式
# matrix = [[1] * m for _ in range(n)]
# for row in matrix:
# print(*row)
基于循环和数学运算、字符串反转或递归来实现
import ast
n = ast.literal_eval(input())
# 现在程序中有一个变量n
# 在这行注释下面,编写代码,输出你的答案
# 方法一:使用循环和求余操作
reversed_num = 0
while n > 0:
digit = n % 10
reversed_num = reversed_num * 10 + digit
n = n // 10
print(reversed_num)
# 方法二:使用字符串反转
reversed_num = int(str(n)[::-1])
print(reversed_num)
# 方法三:使用递归
def reverse_number(num):
if num < 10:
return num
else:
return int(str(num % 10) + str(reverse_number(num // 10)))
reversed_num = reverse_number(n)
print(reversed_num)
判断一个整数中是否存在两个相同的连续数字,基于循环和数学运算、集合或位运算来实现。
import ast
n = ast.literal_eval(input())
# 现在程序中有一个变量n
# 在这行注释下面,编写代码,输出你的答案
# 方法一:使用循环和求余操作
def has_duplicate_digits(num):
prev_digit = num % 10
num = num // 10
while num > 0:
curr_digit = num % 10
if curr_digit == prev_digit:
return True
prev_digit = curr_digit
num = num // 10
return False
print(has_duplicate_digits(n))
# 方法二:使用数学运算和集合
def has_duplicate_digits(num):
digits = []
while num > 0:
digit = num % 10
digits.append(digit)
num = num // 10
digit_set = set(digits)
return len(digit_set) < len(digits)
print(has_duplicate_digits(n))
# 方法三:使用位运算
def has_duplicate_digits(num):
num = abs(num)
prev_digit = num % 10
num = num // 10
while num > 0:
curr_digit = num % 10
if curr_digit == prev_digit:
return True
prev_digit = curr_digit
num = num // 10
return False
print(has_duplicate_digits(n))
第n个回文素数的值,基于循环和判断函数来实现。
import ast
def is_prime(num):
if num < 2:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True
def is_palindrome(num):
num_str = str(num)
return num_str == num_str[::-1]
# if 0<=n &n <=21
def get_nth_palindrome_prime(n):
count = 0
num = 2
while count < n:
if is_prime(num) and is_palindrome(num):
count += 1
num += 1
return num - 1
n = ast.literal_eval(input())
result = get_nth_palindrome_prime(n+1)
print(result)
忽略进位的加法计算。
第一种方法使用字符串操作,将输入的整数转换为字符串,逐位相加并取模,最后将结果转换为整数。
第二种方法使用数学运算,通过取模和除法操作逐位相加,最后得到结果。
import ast
x1, x2 = ast.literal_eval(input())
# 现在程序中有两个变量x1, x2
# 在这行注释下面,编写代码,输出你的答案
def ignore_carry_addition(x1, x2):
x1_str = str(x1)
x2_str = str(x2)
result = ""
length = max(len(x1_str), len(x2_str))
for i in range(length):
digit1 = int(x1_str[-(i+1)]) if i < len(x1_str) else 0
digit2 = int(x2_str[-(i+1)]) if i < len(x2_str) else 0
sum_without_carry = (digit1 + digit2) % 10
result = str(sum_without_carry) + result
return int(result)
print(ignore_carry_addition(x1, x2))
# 方法二:使用数学运算
def ignore_carry_addition(x1, x2):
result = 0
multiplier = 1
while x1 > 0 or x2 > 0:
digit1 = x1 % 10
digit2 = x2 % 10
sum_without_carry = (digit1 + digit2) % 10
result += sum_without_carry * multiplier
x1 //= 10
x2 //= 10
multiplier *= 10
return result
print(ignore_carry_addition(x1, x2))
为什么把第四节和第五节一起来总结,是因为在学习的时候条件判断经常会需要使用循环嵌套使用,相关的案例也比较多,大家可以在洛谷等等OJ上找找相应的题目练练手,作业题型不难,但是要想真正掌握一门编程语言,仅靠完成作业题是远远不够的,实际开发出现的问题可能种种条件复杂,完成打卡不是目的,完成教育闭环才是大家学习PYthon这门课的意义,也是DataWhale开源的意义。QAQA.......最后距离这门课程结束已经不远了,,不知道各位是否从中真正学到了东西,难得有一次机会可以组队和大家一起学习,实际上手头的工作也很多,都是加班来学习和整理笔记,就当时一次提升自己的机会和复习的机会吧,所以格外珍惜。工作后难得有完整的时间去做某一件事,和大家一起学习....挺好的。希望我们都不虚此行。LOVE&PEACE....