如何用一行代码获取整数与字符串两种不同类型的用户输入?
问题解决
原代码问题分析
你用and连接两个提示字符串的写法是错误的。在Python中,对非空字符串使用and会触发布尔逻辑求值——非空字符串都是True,所以'Enter a number 1-10: ' and 'odd or even?'最终会返回第二个字符串,这就是为什么只显示第二个提示。要合并提示文本,直接把两个字符串拼接即可。
一行代码实现方案
以下两种写法都能满足你的需求:
方案1(可读性优先)
用分号分隔语句,先获取输入并拆分,再分别转换类型:
x, y = input('Enter a number 1-10: odd or even?').split(); num, guess = int(x), y
用户输入格式示例:3 odd,执行后num是整数3,guess是字符串'odd'。
方案2(纯一行表达式)
用lambda函数一次性完成输入拆分和类型转换:
num, guess = (lambda x, y: (int(x), y))(*input('Enter a number 1-10: odd or even?').split())
效果和方案1完全一致,只是写法更紧凑。
可选:添加输入范围校验
如果需要确保输入的数字在1-10之间,可以在一行里加入简单校验(不符合时抛出异常):
num, guess = (lambda x, y: (int(x) if 1 <= int(x) <= 10 else ValueError('Number must be between 1 and 10'), y))(*input('Enter a number 1-10: odd or even?').split())
不过这种写法可读性较差,实际场景更建议拆分多行处理校验逻辑。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

