python3.7入门系列七 用户输入和while语句

name = input("请输入你的名字:")
print("你好," + name)

input()返回的值是字符串类型的,如果做其他类型使用需要做类型转换
>>> age = input("请输入你的年龄:")
请输入你的年龄:19
>>> if age > 18:
...     print('你已成年了')
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '>' not supported between instances of 'str' and 'int'
错误提示age是字符串类型,可以用int()函数将age转换为整形
>>> age = input("请输入你的年龄:")
请输入你的年龄:19
>>> if int(age) > 18:
...     print('你已成年了')
...
你已成年了

while 语句
while 循环语句,当条件满足时执行,直到条件不满足为止
>>> count = 1
>>> while count < 5:
...     print(count)
...     count += 1
...
1
2
3
4

由用户输入决定退出程序
下面是一个猜数字游戏
>>> n = "18"
>>> number = ""
>>> while number != n and number != 'quit':
...     number = input("请输入你猜的数字,或者输入quit退出: ")
...     if number == n :
...         print("恭喜你猜对了")
...
请输入你猜的数字,或者输入quit退出: 19
请输入你猜的数字,或者输入quit退出: 33
请输入你猜的数字,或者输入quit退出: 15
请输入你猜的数字,或者输入quit退出: quit

再来运行一遍输入正确的数字
>>> n = "18"
>>> number = ""
>>> while number != n and number != 'quit':
...     number = input("请输入你猜的数字,或者输入quit退出: ")
...     if number == n :
...         print("恭喜你猜对了")
...
请输入你猜的数字,或者输入quit退出: 18
恭喜你猜对了

使用标识位
>>> n = "18"
>>> number = ""
>>> flag = True
>>> while flag:
...     number = input("请输入你猜的数字,或者输入quit退出: ")
...     if number == n:
...         flag = False
...         print("恭喜你猜对了")
...     else:
...         flag = number != 'quit'
...
请输入你猜的数字,或者输入quit退出: 20
请输入你猜的数字,或者输入quit退出: 17
请输入你猜的数字,或者输入quit退出: quit

重新运行一遍猜对数字的情况
>>> n = "18"
>>> number = ""
>>> flag = True
>>> while flag:
...     number = input("请输入你猜的数字,或者输入quit退出: ")
...     if number == n:
...         flag = False
...         print("恭喜你猜对了")
...     else:
...         flag = number != 'quit'
...
请输入你猜的数字,或者输入quit退出: 20
请输入你猜的数字,或者输入quit退出: 18
恭喜你猜对了

break
break语句用于跳出当前循环(while 和 for)的执行
>>> while True:
...     fruit = input("你喜欢吃什么水果: ")
...     if fruit == "quit":
...         break;
...     else:
...         print("我也喜欢吃" + fruit)
...
你喜欢吃什么水果: 西瓜
我也喜欢吃西瓜
你喜欢吃什么水果: quit

continue
continue语句用于跳过本次循环后续内容的执行,接着执行下一次循环(while 和 for都适用)
>>> n = 0
>>> while n < 10:
...     n += 1
...     if n % 2 == 0:
...         continue
...     else:
...         print(n)
...
1
3
5
7
9

本文内容到此结束,更多内容可关注公众号和个人微信号:

<think>好的,我现在需要帮助用户解决Python 3.7不支持赋值表达式的问题。首先,我要回忆一下什么是赋值表达式。赋值表达式是Python 3.8引入的海象运算符(:=),允许在表达式中进行变量赋值。用户可能在代码中使用了这个特性,但现在需要在Python 3.7中运行,所以需要修改这些语句。 首先,我需要确认用户的问题场景。用户可能在使用Python 3.7时遇到了SyntaxError,提示无法识别的语法,特别是在使用:=的地方。例如,在while循环或列表推导式中使用了海象运算符。 接下来,我需要考虑如何将使用赋值表达式的代码转换为Python 3.7兼容的形式。常见的用例包括循环条件列表推导式。比如,用户可能在while循环中读取数据直到满足某个条件,或者在列表推导式中重复调用函数直到得到有效结果。 对于每个用例,我需要提供具体的修改示例。例如,将while循环中的条件拆分为先赋值再检查,或者在列表推导式前先进行计算并存储结果,再生成列表。 此外,还需要考虑是否有其他替代方案,比如使用生成器表达式或者传统的循环结构。同时,要提醒用户升级Python版本的长期好处,但也要理解用户可能因为环境限制无法升级,所以必须提供兼容的解决方案。 还要检查用户可能遇到的错误信息,确认是否真的是因为赋值表达式的问题,避免遗漏其他可能的错误。比如,用户是否在代码中其他地方使用了Python 3.8+的特性,需要一并处理。 最后,总结修改方法,强调每个用例的转换方式,并建议在可能的情况下升级Python版本以获得更好的支持性能。</think>--- ### **问题原因** Python 3.8 引入了 **赋值表达式(Assignment Expressions)**(即 `:=` 运算符,俗称“海象运算符”),允许在表达式中直接赋值变量。 若你的代码在 Python 3.7 中使用了 `:=`,会触发 `SyntaxError`,例如: ```python # Python 3.8+ 支持的写法 if (n := len(data)) > 10: print(f"数据过长:{n} 项") while (line := file.readline()) != "": process(line) results = [y for x in data if (y := func(x)) is not None] ``` --- ### **解决方案** 需将使用 `:=` 的代码改写为 Python 3.7 兼容的形式。以下是常见场景的修改方法: --- #### **1. 条件判断中的赋值表达式** **原代码(Python 3.8+)**: ```python if (value := some_function()) > 10: print(value) ``` **Python 3.7 改写**: ```python value = some_function() if value > 10: print(value) ``` --- #### **2. 循环中的赋值表达式** **原代码(Python 3.8+)**: ```python while (chunk := file.read(1024)) != b"": process(chunk) ``` **Python 3.7 改写**: ```python while True: chunk = file.read(1024) if chunk == b"": break process(chunk) ``` --- #### **3. 列表推导式中的赋值表达式** **原代码(Python 3.8+)**: ```python squares = [y for x in range(10) if (y := x**2) % 2 == 0] ``` **Python 3.7 改写**: ```python squares = [] for x in range(10): y = x**2 if y % 2 == 0: squares.append(y) ``` --- #### **4. 表达式中的重复计算优化** **原代码(Python 3.8+)**: ```python data = [1, 2, 3, 4] filtered = [x for x in data if (sqrt := x**0.5) > 1.5] ``` **Python 3.7 改写**: ```python data = [1, 2, 3, 4] filtered = [] for x in data: sqrt = x**0.5 if sqrt > 1.5: filtered.append(x) ``` --- ### **替代方案** 1. **升级 Python 版本** 长期建议升级到 Python 3.8+(需评估环境兼容性): ```bash # 使用 pyenv 或 conda 管理多版本 conda create -n py38 python=3.8 ``` 2. **使用传统写法** 通过预先赋值或拆分逻辑避免 `:=`,虽然代码略冗长,但兼容性更好。 --- ### **总结** - Python 3.7 需将 `:=` 拆分为 **先赋值后使用** 的独立语句。 - 循环推导式中的赋值表达式可改用显式的循环结构。 - 升级到 Python 3.8+ 是更彻底的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值