Python运行后如何输入幂表达式?输入2**5为何报ValueError错误?
问题原因与解决方案
错误原因
input()函数的返回值是用户输入的原始字符串,你输入2**5时,实际拿到的是字符串"2**5",而非表达式计算后的整数32int()函数仅支持解析纯数字格式的字符串,无法识别、计算Python语法的幂表达式,因此触发数值错误
解决方案
方案1:使用eval()解析表达式(仅推荐自用场景)
eval()可以直接执行字符串形式的Python代码并返回结果,刚好可以处理你输入的幂表达式。将输入行修改为:
num = eval(input("Enter the number : "))
注意:
eval()会执行输入的任意Python代码,若要处理陌生用户的输入,存在严重的代码注入安全风险,请勿在生产环境或面向公开用户的场景使用该方案。
修改后完整代码示例:
def tobin(num): # Function to get the number strvar = "" # Initialise strvar to an empty string while num != 0: # While num doesnt become 0 continue strvar = strvar+str(num % 2) # Push the remainder of num/2 to strvar num = num//2 # Make num = num/2 return strvar[::-1] # Reverse the string using [::-1] num = eval(input("Enter the number : ")) print("Binary equivalent from function = ", tobin(num)) print("Binary equivalent from inbuilt function bin = ", bin(num)) # Here we use the inbuilt function
方案2:手动解析幂表达式(安全通用方案)
如果需要兼顾安全和幂次输入支持,可以手动解析输入内容,检测到**时自行计算幂值,示例逻辑如下:
input_str = input("Enter the number : ").strip() if '**' in input_str: base, exp = input_str.split('**', 1) num = int(base.strip()) ** int(exp.strip()) else: num = int(input_str)
这个方案只会处理**格式的幂次输入,不会执行其他任意代码,安全度更高。
内容的提问来源于stack exchange,提问作者Michael Thiel
相关产品推荐
相关产品推荐

