2016-03-06 132 views
0

我想学习使用本书“学习Python:像计算机科学家一样思考”的Python,但是在我下载并安装了Anaconda 3之后,我遇到了一些尝试从IDLE模式运行脚本时出现问题。 (实际上我已经有一个多星期了,我一直在试图解决这个问题。)本书说我们应该编写和测试一个函数,我将这个脚本保存在文件print_twice_cat.py中。但是,每次尝试运行脚本时,我都会收到以下错误消息:======== RESTART:C:\ Users \ USER \ Anaconda3 \ Scripts \ print_twice_cat.py ======== 。 (作为脚本保存的其他函数产生相同的输出,并且错误消息的唯一变化在.py文件名中。) 另外,如果我在脚本中包含print语句(例如print('spam'))我会得到print语句的输出,但是对于脚本中包含的任何函数(例如上面的语句)都没有输出。 我也搜索了一下,发现一些网站建议将C盘中的python位置添加到路径变量中。在我的路径变量中,我有:“ipts; C:\ users \ user \ Anaconda3 \ Library \ bin”(不带引号),所以我在末尾添加了:C:\ Python35,但我仍然得到相同的RESTART消息只要。 进一步搜索后(在几个站点上,包括stackoverflow站点),我决定在Windows命令提示符下运行Python脚本。从上面的C:\ Python35仍然在我的路径变量中,我在C:\ Users \ USERS>提示符下键入python,然后在python环境中,我在提示符下输入文件名(print_twice_cat.py) ,但我得到的是这个错误消息:“NameError:'print_twice_cat'未定义。” 我也搜索了stackoverflow网站,并得到这个命令来使用从命令行m运行在空闲模式下的Python 3:$ python3 -m idlelib -r your_script.py但是当我输入它时,我得到的消息是:语法错误: 无效的语法。 此外,我的Anaconda python版本是Python 3.5.1,我的操作系统是Windows 7 32位。我非常感谢任何有助于我解决这两个问题的建议/建议,因为它们令我的学习工作非常沮丧。此外,它可以帮助可能面临相关挑战的其他用户。 也请找到脚本文件的有关内容如下:无法在IDLE模式和命令提示符下运行python 3脚本

> def print_twice(bruce): 
>  print(bruce) 
>  print(bruce) 
> 
> 
> def cat_twice(part1, part2): 
>  cat = part1 + part2 
>  print_twice(cat) 
> 
> 
> line1 = 'Bing tidddle' 
> line2 = 'tiddle bing' 
> cat_twice = (line1,line2) 

回答

1

=========== RESTART ============ =

只是意味着此时屏幕上的输出是存储在文件print_twice_cat.py中的代码的输出。这不是一个错误。 既然你学习python,你不可能知道函数只定义代码,不要做任何直接被调用的东西(所以它们也不能单独打印)

例如我是编写一个函数在屏幕上打印两次LaLaLa:

def myfunction(): 
     print('LaLaLa') 
     print('LaLaLa') 

    myfunction() 

前三行不做任何事情,只是定义函数'myfunction'。第四语句调用的函数体

+0

首先,感谢您花时间帮助我,但请您能提供更多的说明吗?所讨论的脚本实际上有2个函数定义在其中,但是在脚本被调用之前还为第二个函数提供了一些参数。在那种情况下,它不会产生输出吗?为了使它更清楚,我将重新编辑我的答案,以包含脚本的内容(我目前无法这样做),并会尽快通知您。感谢您的期望帮助。 –

+0

您好,我已经将脚本文件的内容添加到问题中。谢谢。 –

+0

抱歉格式不正确我无法正确看到它 –

0

这里定义的功能,因此代码答案:

你试图给一个变量分配一个元组。打电话给你的功能只是这样做:

cat_twice(line1,line2) 

这将调用函数cat_twice和传递参数一号线2号线和。如果你不喜欢它,你做到了,你将创建一个变种,在它的元组,都是这样产生的元组:因为这个(tupleobj1,tupleobj2等),你的代码没有工作

编辑

这里是一块那肯定是工作代码,您可以使用此:

def print_twice(var): 
    print(var) 
    print(var) 

def combine_and_print(obj1, obj2): 
    string = str(obj1) + str(obj2) 
    print_twice(string) 

line = 'bing' 
line2 = 'tiddle' 

combine_and_print(line, line2) 

这workes,我已经尝试过了自己的python3。如果它仍然不起作用,我认为你在那里有拼写错误或类似的东西。

留下一个喜欢或'答案接受',所以我知道这是否工作,否则只留下评论我会检讨答案。

+0

谢谢,我明白了你的观点,那就是我没有正确地调用函数。但是,我已将行更改为cat_twice(line1,line2),但该脚本仍然不会生成任何输出,只有相同的RESTART消息而没有其他内容。还有什么问题呢? –

+0

为了帮助我现在,你需要告诉我你期望的输出。我想你想把我编辑的东西给我的第二个答案 –

+0

Like/answer accepted。非常感谢!你真的过得很愉快,但我仍然有一个问题。首先,我只复制你的代码并将其粘贴到一个新的脚本文件中,当我运行脚本时,它产生一个输出:它生成脚本“bingtiddle”两次。我的问题是,请问为什么我的修改脚本文件仍然不起作用?仅仅是代码在某种程度上是错误的?或者甚至可能是因为教科书最初是为python2编写的,后来为python 3重新修改,因此我的代码可能适用于python 2而不是python 3? –

相关问题