01. 输入两个数字,输出它们的和
num1=input("请输入数字1"+"\n") num2=input("请输入数字2"+"\n") sum=float(num1)+float(num2) print(sum)
. sum 是 Python 内置函数名(建议别用作变量名), 那他怎么没有报错呀?
Python 允许你覆盖(shadow)内置函数名,它不会立刻报错,但是会:
让原本内置的 sum() 函数失效,变成你赋值的那个变量。
改成:result=float(num1)+float(num2)
✅ 推荐的更好写法(清晰、可控、扩展性强):
python
复制
def get_float_input(prompt):
while True:
try:
return float(input(prompt))
except ValueError:
print("⚠️ 输入无效,请输入数字!")
def main():
num1 = get_float_input("请输入第一个数字:")
num2 = get_float_input("请输入第二个数字:")
result = num1 + num2
print(f"两个数字的和是:{result}")
if __name__ == "__main__":
main()
name == "main":: 是什么
举个非常直观的例子:
你有两个文件:
mytool.py
python
复制
def say_hello():
print("Hello, I am a tool.")
if __name__ == "__main__":
print("mytool.py 被直接运行")
say_hello()
main.py
python
复制
import mytool
▶ 如果你运行 mytool.py:
控制台输出:
css
复制
mytool.py 被直接运行
Hello, I am a tool.
▶ 如果你运行 main.py:
控制台输出:
markdown
复制
(啥也没有,因为 mytool.py 没有执行 if __name__ == "__main__" 下面的代码)
🧠 那为什么这很重要?
因为在真实项目中:
- 你很多
.py文件其实是模块,被别人import使用的; - 但你又希望这个文件既能导入,也能单独测试运行
所以就需要加这一句“入口判断”:
python
复制
if __name__ == "__main__":
当你运行 main.py,并在里面写了:
python
复制
import mytool
这时 Python 会执行 mytool.py 文件中所有非缩进的代码,包括函数定义、变量声明等。
但:
python
复制
if __name__ == "__main__":
这一句就会被判断为 False,所以不会执行下面的 print() 或 say_hello()。
❓ 那这时 mytool.py 里的 __name__ 是多少?
✅ 答案是:"mytool"(也就是模块的文件名)
🔍 更完整地说:
文件
当前运行方式
__name__ 的值
mytool.py
被 直接运行(双击或 python mytool.py)
"__main__"
mytool.py
被 其他文件导入(如 import mytool)
"mytool"
👀 所以 Python 会自动把当前文件的 __name__ 值设置为:
- "main" → 如果你在运行这个文件
- 模块名 → 如果你只是 import 它
我把代码再自己写一遍
❗你写的代码(错误版)如下:
python
复制
def get_float_input(promt):
While True:
get_float_input=float( get_float_input(promt))
Try:
return get_float_input
except ValueError:
print('请输入数字')
def main():
num1=get_float_input(请输入数字1')
num2=get_float_input(请输入数字2')
result=num1+num2
print(result)
if __name__="__main__"
main()
存在的错误点:
错误位置
问题说明
正确写法
While
Python 是区分大小写的,While 是错的
应该是 while(小写)
Try:
同样是大小写错误
应该是 try:(小写)
get_float_input = float(get_float_input(prompt))
自己调用自己会陷入无限递归,并且变量名和函数名冲突
不要用函数名当变量名,正确做法见下方
get_float_input(promt)
拼写错误,应该是 prompt
get_float_input(请输入数字1')
字符串没有加引号,语法错误
应该是 '请输入数字1'
if __name__="__main__"
少了冒号 :,而且赋值用错了,应该是双等号 ==
应该是:if __name__ == "__main__":
那我怎么感觉有时候我看到的While 和Try 首字母都是大写的, 那这个try 是什么意思,while true 后面怎么就 try 了? try 是不是尝试的意思?
✅ 你问:“我感觉有时候看到 While、Try 是大写的?”
🔥 真相:
Python 对大小写 非常敏感!
所以必须写成:
while和try,首字母小写
你看到大写的 While、Try,大概率是别的语言(比如 Java 或伪代码)或者人手误了。
在 Python 中写成 While 或 Try 是会直接报错的 ❌。
✅ 你问:try 是不是“尝试”的意思?
完全正确!💯
try 的本意就是“尝试去做某件可能出错的事”
在 Python 里,它的完整结构是:
python
复制
try:
# 可能会出错的代码
except 错误类型:
# 如果出错了,执行这里的代码
✅ 举个具体的例子:
python
复制
try:
x = float(input("请输入一个数字:"))
except ValueError:
print("⚠️ 你输入的不是数字,请重新来过")
- 如果你输入了
abc,Python 转 float 会报错(ValueError) - 有了
try-except,程序不会崩溃,而是跳到except执行
📦 场景:你想让用户一直输入数字,直到输入正确
python
复制
def get_float_input(prompt):
while True: # 一直循环
try:
return float(input(prompt)) # 尝试把输入转成 float,成功就 return 跳出循环
except ValueError: # 如果输入错误(如 abc),就提示
print("请输入一个数字")
while True是无限循环try是尝试执行可能出错的操作- 如果
try成功(没有出错),就return跳出循环 - 如果
try报错了,就跳到except,提示用户继续输入
关键词
意思
while True
永远循环,直到你手动 break 或 return
try:
尝试执行一些代码(比如用户输入、文件打开等)
except:
如果 try 中的代码报错了,就执行这里的内容
Python大小写
严格区分大小写,try 和 Try 完全不是一回事
这段代码本身 不能单独运行,因为它必须放在一个函数里,或者嵌在完整程序结构中。
你写的是:
python
复制
while True:
try:
return float(input(prompt))
except ValueError:
print("请输入一个数字")
❌ 为什么它不能独立运行?
原因有两个:
-
❗
return只能出现在函数体def xxx():里面,不能单独用否则你运行时会报错:
javascript 复制 SyntaxError: 'return' outside function -
❗
prompt这个变量没有定义你直接写
input(prompt),解释器会问:“prompt 是啥?”
✅ 正确写法(可以运行)👇
✅ 方法一:完整地放在函数里运行
python
复制
def get_float_input(prompt):
while True:
try:
return float(input(prompt))
except ValueError:
print("请输入一个数字")
# 调用这个函数
num = get_float_input("请输入一个数字:")
print("你输入的是:", num)
这个就可以在 PyCharm 或终端里运行。
✅ 方法二:把它简化成能在控制台直接运行的形式
python
复制
while True:
try:
num = float(input("请输入一个数字:"))
break # 成功就退出循环
except ValueError:
print("请输入一个数字")
print("你输入的是:", num)
这个版本不需要函数,也可以直接跑起来!
def get_float_input(prompt): 那这里的prompt 变量也没有定义呀
✅ 回答你:
def get_float_input(prompt): 这里的 prompt 没有在函数内部定义没关系,因为它是函数的参数。
🔍 什么叫“函数参数”?
当你写下这句:
python
复制
def get_float_input(prompt):
你就是在定义一个函数 get_float_input,它接收一个参数,名字叫 prompt。
也就是说,你告诉 Python:
“等我调用这个函数的时候,我会传一个值过来,叫 prompt。”
✅ 举个例子(你怎么调用这个函数):
python
复制
get_float_input("请输入第一个数字:")
这时候 "请输入第一个数字:" 就是传进去的 prompt,它就会在函数内部使用。
✅ 整体流程图解:
python
复制
def get_float_input(prompt): ← 定义一个接收参数的函数(prompt 是个“占位变量”)
while True:
try:
return float(input(prompt)) ← 用传进来的提示语显示在屏幕上
except ValueError:
print("请输入数字")
然后你调用:
python
复制
get_float_input("请输入你的身高:")
输出:
复制
请输入你的身高:
这个 "请输入你的身高:" 就是给 prompt 的值,传进去了!
✅ 所以总结你这个问题的本质:
你看到的现象
实际解释
prompt 没有提前定义
✅ 没关系,因为它是函数参数,调用时才传值
可以直接用 input(prompt) 吗?
✅ 可以,只要函数外部调用时传入值即可
如果你不传值会怎样?
❌ 会报错:TypeError: get_float_input() missing 1 required positional argument: 'prompt'
🎓 延伸小技巧:
你也可以给 prompt 设置默认值:
python
复制
def get_float_input(prompt="请输入数字:"):
...
这样就算你调用时不写参数也不会报错:
python
复制
num = get_float_input()