Python 输入两个数字,输出它们的和

168 阅读6分钟

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 对大小写 非常敏感!

所以必须写成:whiletry首字母小写

你看到大写的 WhileTry,大概率是别的语言(比如 Java 或伪代码)或者人手误了。

在 Python 中写成 WhileTry 是会直接报错的 ❌。

✅ 你问: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

永远循环,直到你手动 breakreturn

try:

尝试执行一些代码(比如用户输入、文件打开等)

except:

如果 try 中的代码报错了,就执行这里的内容

Python大小写

严格区分大小写tryTry 完全不是一回事

这段代码本身 不能单独运行,因为它必须放在一个函数里,或者嵌在完整程序结构中。

你写的是:

python
复制
while True:
    try:
        return float(input(prompt))
    except ValueError:
        print("请输入一个数字")

❌ 为什么它不能独立运行?

原因有两个:

  1. return 只能出现在函数体 def xxx(): 里面,不能单独用

    否则你运行时会报错:

    javascript
    复制
    SyntaxError: 'return' outside function
    
    
  2. 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()

02. 判断一个整数是奇数还是偶数