02. 判断一个整数是奇数还是偶数
我的原始代码如下,功能是判断一个用户输入的整数是奇数还是偶数:
def get_int_input(prompt):
while True:
try:
return int(input(prompt))
except ValueError:
print("please input an integer!!!")
def is_even_odd(num):
if num % 2 == 0:
print("it is even")
else:
print("it is odd")
if __name__ == "__main__":
num = get_int_input("please input an integer: ")
is_even_odd(num)
大佬,如果用户输入的是 3.99,你用 int(input()) 读取并转换,会直接报错!
❗️原因如下:
python
复制编辑
int("3.99")
这个会报错:
csharp
复制编辑
ValueError: invalid literal for int() with base 10: '3.99'
因为 "3.99" 是字符串形式的小数,int() 只能处理纯整数格式的字符串,比如 "3"、"42",不能包含小数点。
✅ 优化建议一:加入 float 判断能力
现在如果用户输入 3.5 会直接报错,可以考虑允许输入小数,并提醒用户:
python
复制编辑
def get_int_input(prompt):
while True:
try:
user_input = input(prompt)
if '.' in user_input:
print("⚠️ 请输入整数,不要带小数点。")
continue
return int(user_input)
except ValueError:
print("❌ 无效输入,请输入一个整数!")
我们来详细分析一下这段代码中 continue 的作用,以及如果不加会发生什么:
✅ 当前代码逻辑回顾:
python
复制编辑
def get_int_input(prompt):
while True:
try:
user_input = input(prompt)
if '.' in user_input:
print("⚠️ 请输入整数,不要带小数点。")
continue # 👈 关键点在这里
return int(user_input)
except ValueError:
print("❌ 无效输入,请输入一个整数!")
🔍 continue 的作用:
-
当用户输入如
"3.5",程序判断有小数点,不合法。 -
如果没有
continue,程序会继续执行下面的return int(user_input),然后就会报错:csharp 复制编辑 ValueError: invalid literal for int() with base 10: '3.5'
🧨 如果去掉 continue 会出现什么?
来看去掉后的代码(不推荐):
python
复制编辑
def get_int_input(prompt):
while True:
try:
user_input = input(prompt)
if '.' in user_input:
print("⚠️ 请输入整数,不要带小数点。")
# continue 被删掉了 ❌
return int(user_input) # ⛔ 这里依然会尝试转 3.5 为 int → 报错
except ValueError:
print("❌ 无效输入,请输入一个整数!")
这会导致你自己手动检测非法输入后,却又继续去执行转换逻辑,直接打脸自己设置的保护机制,从而触发异常。
✅ 正确写法为什么加 continue
因为 continue 会让 while True: 循环立刻跳过后面的代码、重新输入一次,从而保证程序稳健运行。
✅ 总结:
情况
会发生什么
有 continue(✅ 推荐)
检测到小数,提示后跳过,重新输入
没有 continue(❌ 不推荐)
提示后依然执行 int("3.5"),导致程序报错
你这个问题问得非常到位,说明你已经不是“机械抄代码”的阶段,而是在真正理解逻辑了 💪
如果你愿意,我可以继续给你设计一些类似这种 逻辑陷阱练习题 来锻炼你的判断力?
您说:
所以continue 不是继续执行后面代码的意思,而是重复执行之前的代码,知道结果不满足条件是吗
ChatGPT 说:
你理解得已经非常接近了!我来给你更准确地总结一下——
✅ continue 的真正含义是:
立即跳过当前这一次循环中 continue 后面的代码,直接进入下一轮循环。
它不会继续执行“后面”的代码,而是直接**“回到循环开头”重新判断条件(或继续下一次循环)**。
🔁 举个直观的例子:
python
复制编辑
while True:
print("1. 请输入一个整数:")
user_input = input()
if '.' in user_input:
print("⚠️ 有小数点,重新输入")
continue # 👉 跳回 while 的开头,跳过下面这一行
print("2. 正在尝试转换为整数...")
如果用户输入 "3.5",打印流程是:
markdown
复制编辑
1. 请输入一个整数:
⚠️ 有小数点,重新输入
不会执行:
markdown
复制编辑
2. 正在尝试转换为整数...
因为 continue 跳过去了!
❌ 常见误解:
很多人以为 continue 是“继续往下执行”。其实完全相反,它是打断当前这一轮,立即进入下一轮循环。