【问题标题】:ORD and CHAR in Scratch从头开始的 ORD 和 CHAR
【发布时间】:2015-07-28 03:06:02
【问题描述】:

我在 Scratch 中遇到越来越多的情况,我必须将数字转换为其 ACSII 字符,反之亦然。块中没有为此构建的功能。

我的解决方案是创建一个大小为 26 的列表,并使用名为 alphabet = "abcdefghijklmnopqrstuvwxyz" 的变量将字母 A-Z 附加到每个序列中,并使用重复块对其进行迭代并将 ALPHABET 的 LETTER COUNT 附加到列表中。结果是位置 1 到 26 之间带有字母 A_Z 的列表数据结构。实际上是在创建我自己的 ASCII 表。

要进行从数字 26 到“Z”的转换,我必须遍历列表以获得正确的 CHAR 值。它确实减慢了严重依赖 CHR() 功能的程序。有没有更好或更有效的解决方案?

【问题讨论】:

  • 您是否在从数字中获取字母时遇到问题,反之亦然?
  • 两种方式作为一个函数是其他两种情况的反面,这两种情况在编写字符串操作程序时经常出现。例如,我制作了一些密码程序。

标签: mit-scratch


【解决方案1】:

我的解决方案是创建一个大小为 26 的列表,并使用名为 alphabet = "abcdefghijklmnopqrstuvwxyz" 的变量将字母 A-Z 附加到每个序列中

停在那里。您甚至不需要将其转换为列表。您可以直接从字符串中查找它。

从索引中获取字符非常容易。只需使用(letter () of []) 块。

获取一个字符的索引比较复杂。不幸的是,Scratch 没有内置的方法来做到这一点。我在这里要做的是定义一个index of [] in [] custom pseudo-reporter block:

define index of (char) in (str)
set [i v] to [1]
repeat until <<(i) = (length of (str))> or <(letter (i) of (str)) = (char)>>
    change [i v] by (1)

view online

然后您可以将该块称为index of [a] in (alphabet),它会将i 变量设置为1。

如果找不到该字符,此代码没有任何情况,但是如果您需要,我提供的链接确实包含该字符。

【讨论】:

  • 是的,我同意第一个解决方案,并且通常在 Python 中使用该方法。在最坏的情况下,您使用报告器块的第二个解决方案似乎迭代了 N 次,因此实际上并没有解决第二个问题。也许,这就是 ord() 所做的,但我怀疑它在恒定时间内使用查找,因为 ascii 字符集以电子方式内置在芯片组中?使用 Scratch 和 Python 时,加密程序的运行时间差异很大。
  • 我同意这很不幸,但在 Scratch 中你必须这样做。
  • 二分搜索呢?
【解决方案2】:

您也可以使用Snap!,它类似于 Scratch,但有更多的块。折断!有一个 unicode 块,它将一个字符转换为其 ASCII 或 unicode 值。

【讨论】:

  • 是的,Snap 具有将字符转换为 ASCII 值并返回的内置函数:unicode of []unicode () as letter。 Unicode 和 ASCII 码对于具有 ASCII 码的字符是相同的。
猜你喜欢
  • 2011-05-13
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
相关资源
最近更新 更多