jjzjj

python - "TypeError: string indices must be integers"尝试在 python 中制作二维数组时

coder 2023-08-25 原文

我对 Python(和编码)还是个新手,我只想根据玩家的需求创建一个棋盘(用于主机游戏)。

基本上就是这样......

import array 
print("What size do you want the board?") 
Boardsize = input()
Tablero = array('b' [Boardsize, Boardsize])
for w in Boardsize:
    for h in Boardsize:
        Boardsize(w)(h).append('.')
print (Tablero)

至少那是我的想法,但编译器说:

Tablero = array('b'[Boardsize, Boardsize])
TypeError: string indices must be integers

最佳答案

发生了什么

input() 返回一个字符串(您输入的字符,例如“123”),但是您得到一个 TypeError 因为您将一个字符串传递给某个东西需要一个数字(例如 123,不带引号)。


解决方案

修复方法是通过 int(...) 构造函数将字符串转换为数字,例如int(input())(就像 int("12") 会给你 12)。

如果您不是编程新手,我想道歉,这是一个愚蠢的错误,但如果您是新手,这里是我的思维过程,它帮助我调试了问题。我希望你不会觉得它居高临下;我正在分享我的思考过程,以便处于类似情况的其他人可以修复类似的错误。


如何诊断这类问题

您可以通过一次回溯一步来调试它:

首先进行测试以确保您了解如何正确制作数组。例如,我会尝试制作一个大小为 3x3 的数组,以确保我理解 API。

>>> array(..., [3,3])
<array object at 0x...>

好的,成功了!如果我只输入数字 array(..., [3,3]),我们似乎能够正确地制作 array。现在让我们尝试使用 input()

>>> boardsize = input()
>>> array(..., [boardsize, boardsize])
TypeError: string indices must be integers

这很奇怪。我刚刚用 array(..., [3,3]) 做了一个 3x3 数组,为什么 array(..., [boardsize, boardsize])工作?让我们检查一下 boardsize 的实际值是多少:

>>> boardsize
'3'

真奇怪,值好像是3,对吧?让我仔细检查以确保。

>>> boardsize == 3
False

等等,'3'!=3 ??? “3”与 3 有何不同?

>>> type(boardsize)
<class 'str'>

啊哈! ' 我看到的意思是它是一个字符串。 input 返回的字符串一定是这样的。这是有道理的,因为例如我可以输入“cat”并使 boardsize == 'cat',我不应该期望 python 能够判断任意字符串是否是数字。

>>> '3'
'3'
>>> 3
3
>>> boardsize
'3'

修复方法是在 google 上搜索 python convert string to number:第二次点击:“使用内置的 int(...) 函数

tl;dr:朝着错误的方向努力,在每一步都对自己进行健全的检查。当您开始制作大型程序时,您可以使用自动调用的健全性检查功能和“单元测试”来简化调试。


(旁注:如果您好奇对象是如何打印出来的,它来自所有类定义的特殊__repr__ 方法。调用repr(something) 将显示公平明确地知道 something 是什么类型的对象;repr 会在您输入交互式解释器的输出时自动调用。)

关于python - "TypeError: string indices must be integers"尝试在 python 中制作二维数组时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6714527/

有关python - "TypeError: string indices must be integers"尝试在 python 中制作二维数组时的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  3. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  4. ruby - ECONNRESET (Whois::ConnectionError) - 尝试在 Ruby 中查询 Whois 时出错 - 2

    我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.

  5. ruby-on-rails - 在 Ruby 中循环遍历多个数组 - 2

    我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代

  6. ruby - 多次弹出/移动 ruby​​ 数组 - 2

    我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby​​数组,我们在StackOverflow上找到一

  7. ruby - 将数组的内容转换为 int - 2

    我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]

  8. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  9. ruby - 通过 erb 模板输出 ruby​​ 数组 - 2

    我正在使用puppet为ruby​​程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby​​不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这

  10. ruby - 检查数组是否在增加 - 2

    这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

随机推荐