【问题标题】:How to load commands from txt file, python如何从txt文件加载命令,python
【发布时间】:2021-07-03 15:44:36
【问题描述】:

我有一个如下的文本文件:

Run
Jump
Jump
Swim
Run

我有 3 种方法,跑步、跳跃和游泳,当每一行被读取时,我如何运行这些函数,所以它会先运行“运行”,然后运行运行函数,然后运行“跳转”功能两次等,我被卡住了 2 天,并认为一个提示将不胜感激,谢谢! ^-^

【问题讨论】:

  • 分解问题,一步一步解决。你知道如何打开文件吗?你知道如何逐行阅读吗?你知道如何检查一行是否等于某个字符串吗?你知道如何调用函数吗?现在问题归结为“请为我写”,这不是 StackOverflow 的用途。
  • 我知道如何打开一个文件,我知道如何逐行读取它,我不确定该行是否等于字符串,我知道如何调用一个函数,只是不使用字符串我刚从文本文件中得到。
  • 那么请编辑您的帖子以添加您目前获得的代码,以便我们以更专注的方式为您提供帮助。

标签: python file text-files hint


【解决方案1】:

我认为您应该只拥有一本包含命令+功能的字典:

def jump():
   player.y += 10 
    ...

commands = {"jump":jump,"Run":run,"Swim":swim}
for cmd in command_file.split("\n"):
    commands.get(cmd.strip())()

【讨论】:

  • 很好奇你为什么使用get( ),而不仅仅是[cmd.strip()]:唯一的区别是如果文件中的cmd无效(使用实际上在错误消息中的无效键),而您的代码将生成一个 ValueError: NoneType is not callable 异常,这不太有用..
  • 没错,没有考虑错误的可读性
【解决方案2】:

这就是我会做的:

def run():
    print('Running')
def jump():
    print('Jump')
def swim():
    print('Swim')

commands_table = {'Run':run, 'Jump':jump, 'Swim':swim}

with open('commands.txt', 'r') as command_file:
     for cmd in command_file:
         cmd = cmd.strip()
         commands_table[cmd]()

我们使用字典来存储文本文件中的命令与需要执行的函数之间的关系。

with 语句及其他语句打开文本文件,读取命令,删除任何空格,然后通过从字典中提取它来执行函数。

【讨论】:

  • 当然,另一种“更简单”的方法就是使用一系列 if 语句,但由于您需要增加命令的数量,这会变得很混乱。使用字典作为跳转表要容易得多。
  • 我昨天遇到了一些问题,我想我是在正确的轨道上,谢谢!!
  • 在您的代码中,您将打开的文件和字典命名为“命令”,这会导致一些问题。 (您可能还应该包括commands.readlines()
  • @lightstack - 就混乱的名字表达你的观点 - ty。如果您在打开的文件上使用 for 循环,则不需要 readlines()。一个打开的文件就像一个行容器,所以readlines() 是多余的。
猜你喜欢
  • 1970-01-01
  • 2021-06-17
  • 2022-01-25
  • 2012-11-14
  • 1970-01-01
  • 2012-11-16
  • 2018-06-15
  • 2021-10-29
  • 2012-11-19
相关资源
最近更新 更多