python3 不等于语法_程序工作在Python 2.7中,但不是Python 3.3(语法对于两者兼容)...

So I have the function integral(function, n=1000, start=0, stop=100) defined in nums.py:

def integral(function, n=1000, start=0, stop=100):

"""Returns integral of function from start to stop with 'n' rectangles"""

increment, num, x = float(stop - start) / n, 0, start

while x <= stop:

num += eval(function)

if x >= stop: break

x += increment

return increment * num

However, my teacher (for my Programming class) wants us to create a separate program that gets the input using input() and then returns it. So, I have:

def main():

from nums import integral # imports the function that I made in my own 'nums' module

f, n, a, b = get_input()

result = integral(f, n, a, b)

msg = "\nIntegration of " + f + " is: " + str(result)

print(msg)

def get_input():

f = str(input("Function (in quotes, eg: 'x^2'; use 'x' as the variable): ")).replace('^', '**')

# The above makes it Python-evaluable and also gets the input in one line

n = int(input("Numbers of Rectangles (enter as an integer, eg: 1000): "))

a = int(input("Start-Point (enter as an integer, eg: 0): "))

b = int(input("End-Point (enter as an integer, eg: 100): "))

return f, n, a, b

main()

When run in Python 2.7, it works fine:

>>>

Function (in quotes, eg: 'x^2'; use 'x' as the variable): 'x**2'

Numbers of Rectangles (enter as an integer, eg: 1000): 1000

Start-Point (enter as an integer, eg: 0): 0

End-Point (enter as an integer, eg: 100): 100

Integration of x**2 is: 333833.5

However, in Python 3.3 (which my teacher insists we use), it raises an error in my integral function, with the same exact input:

Traceback (most recent call last):

File "D:\my_stuff\Google Drive\documents\SCHOOL\Programming\Python\Programming Class\integration.py", line 20, in

main()

File "D:\my_stuff\Google Drive\documents\SCHOOL\Programming\Python\Programming Class\integration.py", line 8, in main

result = integral(f, n, a, b)

File "D:\my_stuff\Google Drive\Modules\nums.py", line 142, in integral

num += eval(function)

TypeError: unsupported operand type(s) for +=: 'int' and 'str'

In addition, integral by itself (in Python 3.3) works fine:

>>> from nums import integral

>>> integral('x**2')

333833.4999999991

Because of that, I believe the fault is in my program for my class... Any and all help is appreciated. Thanks :)

解决方案

The issue you're running into is that input works differently in Python 2 and Python 3. In Python 3, the input function works like the raw_input does in Python 2. Python 2's input function is equivalent to eval(input()) in Python 3.

You're getting into trouble because of the quoteation marks you're typing with the formula. When you type 'x**2' (with the quotes) as your formula when running on Python 2, the text gets evaled in the input function and you get a string with no quotation marks as the result. This works.

When you give the same string to Python 3's input function, it doesn't do an eval, so the quotation marks remain. When you later eval the formula as part of your integral calculation, you get the string x**2 (without any quotation marks) as the result, not the value of x squared. This results in an exception when you try the string to 0.

To fix this, I suggest either using just one version of Python, or putting the following code at the top of your file to get a Python 3 style input in both versions:

# ensure we have Python 3 semantics from input, even in Python 2

try:

input = raw_input

except NameError:

pass

Then just type in your formula without quotation marks and it should work correctly.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值