Datawhale聪明办法学Python(task4、5条件语句和循环)及作业题解版

发布时间:2023年12月20日

一、课程基本结构


课程开源地址:课程简介 - 聪明办法学 Python 第二版

章节结构:

  • Chapter 0 安装 Installation
  • Chapter 1 启航 Getting Started
  • Chapter 2 数据类型和操作 Data Types and Operators
  • Chapter 3 变量与函数 Variables and Functions
  • Chapter 4 条件 Conditionals
  • Chapter 5 循环 Loop
  • Chapter 6 字符串 Strings

二、跟着视频学一点

1、条件判断

if 语句流程

因为是复习,所以把循环和条件判断放一起写一期笔记

首先是条件判断,这是判断条件原图:

接下来规范了书写,要提高可读性,非必要不用一行写完整个代码。

if-else 语句 if-else statement

if-elif-else 语句

2、循环

最基础的就是for循环和while循环

注意:

  1. for 循环中的 range 是前闭后开的一个取值空间(range是在for循环中较为常用的容器)
  2. for 循环中的range 中的第三参数 是步幅,当其取负数的时候,也要将起始位置和最终位置相调换(就会逆序遍历循环)
  3. while 循环中 要对相关遍历的变量予以 += 1 操作,但 for 循环可以省略

break 和continue

break定义

  • ? ? ?break 用于完全结束一个循环(终止循环),跳出循环体

continue的定义

  • ? ? ?continue 的功能和 break 有点类似,区别是 continue 只是忽略当次循环的剩下语句,接着开始下一次循环,并不会中止循环

嵌套循环注意超时

三、作业

第四第五节的作业都比较常规,基础题不需要过多阐述了。。。。

这里需要注意的是,在对齐下标的时候记得是从0开始,另外注意有暴力取值的,范围即为重要,千万注意别超时。

在书写上注意书写规范,务必记得提高代码可读性。

补充:应要求,加上作业题解:

1、Output Letter Grade by Score

这是一个简单的分数转换程序。通过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")
2、getInRange

这里使用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)
3、Is Point Inside Square

本节是条件语句的课后作业,所以使用条件语句。我们使用条件语句来判断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。
4、Check Leap Year
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整除
"""
5、Days in Month

条件语句和字典,使用条件语句和字典来根据月份和年份是否是闰年来确定每个月的天数。将每个月的天数存储在一个字典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从字典中获取对应的天数
6、#A. N*M Matrix
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)
7、ReverseNumber

基于循环和数学运算、字符串反转或递归来实现

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)
8、hasConsecutiveDigits

判断一个整数中是否存在两个相同的连续数字,基于循环和数学运算、集合或位运算来实现。

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))
9、nthPalindromicPrime

第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)
10、carrylessAdd

忽略进位的加法计算。

第一种方法使用字符串操作,将输入的整数转换为字符串,逐位相加并取模,最后将结果转换为整数。

第二种方法使用数学运算,通过取模和除法操作逐位相加,最后得到结果。

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....

文章来源:https://blog.csdn.net/adminkeys/article/details/135077826
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。