为什么Python将我的函数调用作为变量调用来读取?

2024-04-26 20:37:56 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Python 2.7.9,我的代码如下:

    def secondaction():
        secondaction = raw_input(prompt)

        if secondaction == "walk through door" or secondaction == "go through door":
        print "Well done! You enter the Treasure Room..."
        treasure_room()

        else:
        print "If you don't go through that door you will never leave this cave."        
        secondaction()

firstact = raw_input(prompt)
global handclenched
def firstaction():
elif firstact == "use sword" and handclenched:
    print "You killed the hand giant! A door appears behind it. What will you do?"
    secondaction()

当我输入'use swill'并将'handclecked'设置为True后,Powershell将我带到secondaction()函数时,我输入yh作为raw_input()值,Powershell会发出以下错误消息:

You killed the hand giant! A door appears behind it. What will you do?
> yh
If you don't go through that door you will never leave this cave.
Traceback (most recent call last):
  File "ex36game.py", line 168, in <module>
    right_room()
  File "ex36game.py", line 166, in right_room
    firstaction()
  File "ex36game.py", line 147, in firstaction
    firstaction()
  File "ex36game.py", line 153, in firstaction
    secondaction()
  File "ex36game.py", line 136, in secondaction
    secondaction()
TypeError: 'str' object is not callable

但是当我将代码更改为:

 def secondaction():
    second_action = raw_input(prompt)

    if second_action == "walk through door" or second_action == "go through door":
    print "Well done! You enter the Treasure Room..."
    treasure_room()

    else:
    print "If you don't go through that door you will never leave this cave."        
    secondaction()

一切正常,我没有收到错误信息。你知道吗

为什么Python不能将secondaction()读作函数调用,而不是调用/调用的代码(这些词正确吗?)分配给raw_input()secondfunction变量?你知道吗


Tags: inpyyougoinputrawlinewill
3条回答

在9月之前学习Java是完全可行的,但是有很多前期学习,尤其是IDE,这可能会产生动机问题。Java比VB严格得多,所以这种转换可能看起来很奇怪

就我个人而言,出于我的兴趣,我会采取循序渐进的方法,从处理(http://processing.org/)开始。处理是Java,但设计用于制作数字艺术。它还推迟了对很多样板文件的需求,直到你需要它。我发现学习曲线相当平缓,技能也能很好地转化。此外,编写漂亮的图片或简单的pong实现比编写“Hello World”有趣得多(至少对我来说)

我从QBASE过渡到C++,然后是java和其他语言。这真的不算太糟

祝你好运

The Java Tutorials将是开始学习Java的好地方

如果想法是从新开始,尝试摆脱“坏习惯”(当然,使用VisualBasic.NET并不一定意味着你可能养成了坏习惯),那么从一开始就看一看教程并没有坏处

对于单个或多个IDE的情况,在一开始,我会说从一个IDE开始,然后稍微舒服一点不会有什么坏处

实际上,一开始跳过IDE并使用文本编辑器和命令行编译和运行程序可能不是一个坏主意

为什么?我注意到,许多只依赖IDE的人不知道如何编译和运行程序的基本知识,因此,他们不太了解如何在基本级别上实际运行程序,因为IDE为他们提供了支持

我没用过VB。NET,但我怀疑,如果你以面向对象的方式编程,那么从VB的转换。NET到Java可能不会是一个很大的飞跃。然而,如果面向对象编程看起来很困难,那么从一开始就使用像BlueJ这样的IDE(几年前我只使用过几次)可能会更容易

语法方面的VB。NET和Java不是很相似,但以我的经验,语法是学习一门新语言的最小问题

当然,您必须熟悉Java的标准类库,它的组织结构与Java略有不同。NET,尽管它包含基本相同的内容

更重要的是,Java几乎没有语法糖分来简化任务。编写更大的程序也总是需要设计模式,而Java是一种非常重视这些模式的语言。学习它们并知道何时使用它们(或者至少在类库中找到它们)可能需要一些时间,除非你已经掌握了这方面的知识

例如,在VB中。NET有事件用于在对象之间传播消息,这种概念在Java世界中并不直接存在。对于这类事情,有一种观察者模式。这取决于你如何看待它。NET事件只是观测者模式的语法糖,在新手程序员不知道的情况下进行,或者说。NET根本不需要用已经有合适的类和接口的类和接口来近似解决方案

实际上,我对Java最大的不满是冗长,而且几乎所有东西都必须是一个类

但是为了学习,我建议你试着直接潜入。有很多教程可以帮助你入门(Sun已经many good ones介绍了Java平台的关键方面)。你可以重做一个你已经在VB中完成的项目,或者提出一个你想自己解决的任务(尽管我不太擅长这样的事情,ymmv:-)

但是学习一门语言最简单的方法就是用它来编程。9月份之前你肯定不是专家,但解决一些问题应该是完全可行的。而且,我怀疑他们会认为你到那时已经掌握了这门语言

至于IDE,我们在这里经常使用Eclipse,只在一次讲座中浏览了BlueJ。我想说你应该使用最适合你的东西,尽管我记得BlueJ与其说是一个IDE,不如说是一个交互式Java游乐场。但我可能弄错了,因为我当时经常不注意讲课:-)

相关问题 更多 >