python基础第五课_if 条件控制&debug 技巧

本文介绍了Python的基础if条件控制语句,包括单一条件、多个条件、嵌套if、if not等,并探讨了debug调试的重要性及常用方法如print和调试工具的使用。此外,还提供了三个实战练习,涉及购物折扣计算、闰年判断和寻找三个整数的最大值。

if 条件控制&debug 技巧

一、if 条件控制

1.if 如果的意思,如果程序符合某种条件,那么就可以做什么事情,就是做判断, 判断有几个结果, True False。

2.得到 True 或者 False 的运算

 2.1 比较

 print( 5 > 4)

 2.2成员 in  / not in

 print("sun" in "sunshine")

 print("孟孟" not in "孟子")

 2.3逻辑运算 and or not

 print( 5<4 and 7 > 3 )



3.语法(在 python 当中,遇到冒号要缩进,表示一个分支)
if 条件表达式 :

例如:
if 5 > 4:

    print("大于")

else:

    print("if后的条件不满足,否则")



4. if / elif / elif /elif/else 完整的 if 表达式

5.注意:在一个完整的if 表达式当中,只会有一个分支代码会被执行,不可能执行2个或者2个以上的分支。

6.只要一个分支满足,剩下的条件不会再判断了。

grade = float(input("请输入你的分数"))

if grade < 40:

    print("恭喜你,得到了一个 E")

elif 40 <= grade < 60:

    print("你是个人才 D")

elif 60 <= grade < 80:

    print("C")

elif 80 <= grade < 90:

    print("B")

else:

    print("A")

 

二、多个if条件

1.if 不需要每次配对 else,也不需要一定得有 elif。



grade = int(input("请输入你的分数"))

if grade < 40:

    print("恭喜你,得到了一个 E")



if 30 <= grade < 60:

    print("你是个人才 D")



if 31 <= grade < 80:

    print("C")



if 29 <= grade < 90:

    print("B")

else:

    print("A")

 

 

  • if的嵌套
1.虽然说 python 可以嵌套很多层 if , 但是我们尽量不要嵌套太多,一般嵌套2层就可以了。



grade = int(input("请输入你的分数:\n"))

name = input("请输入你的姓名:\n")

has_boyfriend = True



if grade < 40:

    print("恭喜你,你的成绩不太好")

    if name == 'yanli':

        print("走后门得到了一个A")

        if has_boyfriend:

            print("早恋,留校察看")

    else:

        print("还好你不是关系户")



else:

    print("你的分数已经很高了")

 

  • if not
例子:

has_boyfriend = True

if has_boyfriend == True:

     print("有男朋友")

else:

     print("单身 dog")



if has_boyfriend:

     print("有男朋友")

else:

     print("单身 dog")



if not has_boyfriend:

    print("单身 dog")

else:

    print("男朋友")

1. if 变量:变量 True, False 的意思

a = True

if a:

    print("aTrue")



2.空字符串代表 False, 只要字符串不是空的,就代表True

name = ''

if name:

    print("输入成功")

else:

    print("输入不成功")



name_new = 'a'

if name_new:

    print("字符串不为空")

else:

    print("81 行输出")



3.空格也是个字符,所以也是代表 True

string = ' '

if string:

    print("有值")



4.数字0 代表 False, 非 0 代表True

5.列表:空列表代表 False

6.字典:空字典代表 False

例子:

empty_list = []   #False

if not empty_list:   #True

    print("a")

else:

    print("B")

 

五、print 调试
1.print 简单好用,就是每一行都要去试
例子:

1 + 1

5 > 4

print("OK")

4 / 0

print("12 OK")



2.当 if条件你不确定那个分支会执行,可以在分支下加print

例子:

a = 1

if a > 6:

    print("if条件 行不运行的")

    a *= 2

else:

    print("else 会运行")

    a -= 4

print(a)

 

六、小结

1.数据类型

1.1列表, 自动化测试中场景,存储所有的用例 [1,2,3,]。

1.2元组: 函数

1.3字典: 自动化测试中场景,存储单条测试数据

1.4字符串

1.5 bool (True, False)

 

  1. 面试题:

2.1元组和列表区别:都是有序,列表可变,元组不可变。

2.2字典和列表区别:字典是无序的,列表是有序的。

 

3.if (条件表达式):  可以不用 else, 也可以不用 elif。

if ...  else:

if ... elif .. elif .. else..  只会执行一个分支。

if ... if ... if... 多组条件表达式,每个 if 是独立的,前面的 if 分支执行完不会影响下一个 if 判断。

if 变量:

if 嵌套。

 

 

4.debug: 调试,非常重要。为什么要调试:因为代码总会出问题,找出问题的过程,调试。

 

  1. 调试方法:

5.1 print

5.2 4 个按钮:step over , run to cursor, 计算器, 播放

http://note.youdao.com/yws/public/resource/bb3dfab7e7331d1665927b8b962fd76b/xmlnote/A550ABAD62A945518D2AEB11BDF32731/5743

 

七、作业

一、题目:

一家商场在降价促销,所有原价都是整数(不需要考虑浮点情况),如果购买金额50-100元(包含50元和100元)之间,会给10%的折扣;如果购买金额大于100元会给20%折扣。编写一程序,询问购买价格,再显示出折扣和最终价格。

输入:
price = xxx

输出:
购买折扣:8 折
优惠价格:xxx 元
答:
price = int(input("购买价格(单位:元):\nprice="))
if 50 <= price <= 100:
    a = price * 0.9
    print(f"购买折扣:9 折\n优惠价格:{a} 元")
elif price > 100:
    b = price * 0.8
    print(f"购买折扣:8 折\n优惠价格:{b} 元")
else:
    c = price
    print(f"购买折扣:不满足折扣金额\n优惠价格:{c} 元")


二、题目:

输入一个有效的年份(如:2019),判断是否为闰年(不需要考虑非数字的情况)

如果是闰年,则打印“2019年是闰年”;否则打印“2019年不是闰年”。

什么是闰年,需要自己了解(需求文档没有解释)
答:
# 1、能被4整除,但不能被100整除;
# 2、能被400整除;
year = int(input("请输入有效年份:\n"))
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
    print(f"{year}年是闰年")
else:
    print(f"{year}年不是闰年")


三、题目:

求三个整数中的最大值

a = int(input("please enter the firest number:\n"))
b = int(input("please enter the second number:\n"))
c = int(input("please enter the third number:\n"))

if (a >= b and a >= c):
    print(f"最大值为{a}")
elif (b >= a and b >= c):
    print(f"最大值为{b}")
elif (c >= a and c >= b):
    print(f"最大值为{c}")

<think>好的,我现在需要帮助用户解决Python中的SyntaxError和list index out of range错误。用户提到在PyCharm和Anaconda环境中遇到这些问题,还提供了之前的对话和一些引用资料。首先,我得回顾用户之前的提问和我的回答,确保这次回答连贯且覆盖可能的关联问题。 首先,用户之前的问题是关于字典键访问时的语法错误,我给出了详细的错误分析和解决方案。现在用户的新问题涉及更广泛的SyntaxError和索引越界错误,需要结合之前的经验和新的引用内容来解答。 接下来,查看用户提供的引用内容。引用1提到SyntaxError: invalid character in identifier,通常是因为代码中存在不可见的特殊字符,比如全角空格或BOM头。引用2是关于AttributeError和Jupyter Lab中的执行问题,可能与代码输入或环境配置有关。引用3是关于re模块的使用,可能用户在处理字符串时遇到问题,但当前问题可能不直接相关。不过用户现在的问题是关于SyntaxError和索引越界,所以需要重点分析这两个方面。 用户现在的具体问题是解决SyntaxError invalid syntax comma(语法错误,逗号问题)和list index out of range(列表索引越界)错误。首先,我需要分别分析这两种错误的常见原因和解决方法。 对于SyntaxError invalid syntax comma,可能的原因包括: 1. 逗号遗漏或多余:比如在列表、元组或字典中缺少逗号,或者函数参数中逗号使用错误。 2. 括号不匹配:缺少闭合的括号、方括号或花括号,导致后续代码解析错误。 3. 字符串中的特殊字符:如全角逗号或不可见字符,这可能与引用1中的情况类似。 4. 语法结构错误:比如在定义函数或类时,参数列表中的逗号使用不当。 对于list index out of range错误,常见原因有: 1. 索引值超过列表长度:比如列表有3个元素,却尝试访问索引3(Python索引从0开始)。 2. 列表为空时访问元素:比如空列表使用list[0]会导致错误。 3. 动态修改列表后未更新索引:比如在循环中删除了元素,但索引未调整。 4. 错误的循环范围:比如使用range(len(list)+1)导致最后一个索引越界。 接下来,需要结合用户提到的PyCharm和Anaconda环境,考虑可能的工具相关因素。例如,PyCharm的代码检查功能可以帮助发现语法错误,而Anaconda的环境配置可能影响依赖库的版本,间接导致某些错误。 根据用户之前的错误示例,比如在字典键访问时遗漏了索引符号,这次可能需要检查类似的语法错误,尤其是逗号的使用和括号闭合情况。此外,用户可能在处理数据结构时,如列表或字典,未正确初始化或填充数据,导致索引越界。 还需要考虑用户可能正在处理的实际代码场景。例如,处理文件数据时,如果某行数据不符合预期格式,解析后的列表可能长度不足,导致索引越界。或者在使用第三方库时,返回的数据结构可能与预期不同,比如返回空列表或不同长度的元组。 解决方案部分需要分步骤说明,首先处理SyntaxError,因为语法错误会阻止代码执行,而索引越界属于运行时错误。对于语法错误,建议用户检查代码中的标点符号,特别是逗号和括号,使用IDE的语法高亮和错误提示功能。对于索引越界,建议添加防御性检查,如判断列表长度或使用try-except块捕获异常。 此外,引用用户提供的引用内容,比如引用1中的特殊字符问题,可以提醒用户在代码开头检查是否有不可见字符。引用2中的环境问题可能提示用户确保所有依赖正确安装,特别是在不同环境(如Jupyter Lab和PyCharm)之间切换时,注意库版本的一致性。 最后,生成相关问题,帮助用户扩展理解,比如如何调试Python代码、处理其他常见错误等,这样可以提供更全面的支持,减少未来遇到类似问题的可能性。</think>针对Python代码中的SyntaxError和list index out of range错误,以下是系统化的解决方案: --- ### 一、SyntaxError: invalid syntax 常见类型及修复 #### 1. **逗号相关错误** **典型场景**: ```python # 错误示例1:字典/列表缺失逗号 data = [ {"name": "A", "value": 10} {"name": "B", "value": 20} # 缺少逗号 ] # 错误示例2:函数参数逗号错误 print("Hello" "World") # 缺少逗号 ``` **修复方案**: - 检查所有复合数据结构(列表/字典/元组)中元素间的逗号分隔 - 使用IDE的括号匹配功能(如PyCharm的彩虹括号)检查嵌套结构[^1] #### 2. **不可见字符错误** **特征**: ```python # 文件开头含BOM字符(Windows特有错误) print("Hello World") # 报错位置在第1行第1列 ``` **修复方案**: - 用VS Code等编辑器切换编码为`UTF-8` - 执行`python -m pip install chardet`检测文件编码 - 使用正则表达式查找特殊字符:`re.findall(r'[^\x00-\x7F]', code)` #### 3. **保留字冲突** **案例**: ```python from = 10 # 使用关键字作为变量名 ``` **预防措施**: - 使用`keyword.iskeyword("变量名")`检测保留字冲突 --- ### 二、IndexError: list index out of range 解决方案 #### 1. **防御性索引访问** ```python # 错误示例 items = [1,2,3] print(items[3]) # 有效索引为0-2 # 修复方案 if len(items) > 3: print(items[3]) else: print("索引超出范围") ``` #### 2. **循环索引保护** ```python # 危险操作 for i in range(len(data)+1): # 可能超出范围 print(data[i]) # 安全操作 for i, item in enumerate(data): print(f"索引{i}: {item}") ``` #### 3. **数据源验证** ```python # 处理外部数据时 raw_data = get_external_data() if not isinstance(raw_data, list) or len(raw_data) == 0: raise ValueError("无效输入数据") ``` --- ### 三、PyCharm/Anaconda环境专项调试 #### 1. **PyCharm调试技巧** - 开启`Settings > Editor > General > Error Highlighting`实时提示 - 使用`Alt+Enter`快速修复建议(如自动添加缺失逗号) - 内存分析工具:`Run > Profile`检查列表尺寸异常[^2] #### 2. **Anaconda环境管理** ```bash # 验证环境包一致性 conda list --explicit > env_spec.txt # 重建纯净环境 conda create --name fresh_env python=3.9 ``` #### 3. **Jupyter Lab特殊问题** - `cell not executed`错误可通过`Kernel > Restart & Clear Output`重置 - 使用`%debug`魔术命令进行事后调试 --- ### 四、错误模式对照表 | 错误类型 | 特征代码示例 | 解决方案 | |-------------------------|-----------------------------|----------------------------| | 逗号缺失 | `[1 2]` | 添加逗号`[1, 2]` | | 索引越界 | `arr[len(arr)]` | 使用`arr[-1]`访问最后元素 | | 特殊字符 | `print("Hello")` | 用hex编辑器删除BOM头 | | 动态数据变更 | 循环中修改列表长度 | 改为遍历副本`for x in arr.copy()` | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值