1

我的侄女试图从头开始做学校作业,并寻求帮助。她的任务是创建一个脚本,其中包含混合了数字和小写字母的密码,她必须将字母从小写变为大写。我以前从未使用过刮擦。我尽了最大努力,但我不确定我在哪里犯了错误。我将 evengroup 设置为包含密码的变量。我创建了一个新功能,该功能基于我在网上找到的内容,并将其合并到左侧密码的迭代中。有任何想法吗?

刮码

4

2 回答 2

1

尝试这个:

答案图片

当字符串包含一个不会停止的数字时,它会出现问题,所以我修复了它。

并查看从头开始的讨论

于 2020-10-20T12:30:06.227 回答
0

我定义了两个自定义块:

位置

将变量设置为inposition$的位置。0 表示在给定文本中未找到给定字符。我们将使用该块来检查密码的每个字符与小写字母集。charactertext

大写

将密码的每个字符传递给position块。如果position$不为 0,则当前字符为小写字母,并在大写字母集中查找对应的字符。否则保留当前字符。该uppercase$变量会累积这些检查中的任何一个的结果。

define position [character] [text]
    set [position$ v] to []
    set [pos_i v] to [0]
    repeat until <<(position$) > [0]> or <(pos_i) > (length of (text))>>
        if <(letter (pos_i) of (text)) = (character)> then
            set [position$ v] to (pos_i)
        end
        change [pos_i v] by [1]
    end
    
define uppercase [text]
    set [uppercase$ v] to []
    set [upp_i v] to [1]
    repeat (length of (text))
        position (letter (upp_i) of (text)) [abcdefghijklmnopqrstuvwxyz]
        if <(position$) > [0]> then
            set [uppercase$ v] to (join (uppercase$) (letter (position$) of [ABCDEFGHIJKLMNOPQRSTUVWXYZ])
        else
            set [uppercase$ v] to (join (uppercase$) (letter (upp_i) of (text))
        end
        change [upp_i v] by [1]
    end
    
when green flag clicked
ask [Enter your password] and wait
uppercase (answer)
say (uppercase$)

在此处输入图像描述


如果你想看看它在 Scratch3 中的样子,下面有一个片段:

<script src="https://github.com/scratchblocks/scratchblocks/releases/download/v3.5.2/scratchblocks-v3.5.2-min.js"></script>
<pre class="blocks">
define position [character] [text]
    set [position$ v] to []
    set [pos_i v] to [0]
    repeat until <<(position$) > [0]> or <(pos_i) > (length of (text))>>
        if <(letter (pos_i) of (text)) = (character)> then
            set [position$ v] to (pos_i)
        end
        change [pos_i v] by [1]
    end
    
define uppercase [text]
    set [uppercase$ v] to []
    set [upp_i v] to [1]
    repeat (length of (text))
        position (letter (upp_i) of (text)) [abcdefghijklmnopqrstuvwxyz]
        if <(position$) > [0]> then
            set [uppercase$ v] to (join (uppercase$) (letter (position$) of [ABCDEFGHIJKLMNOPQRSTUVWXYZ])
        else
            set [uppercase$ v] to (join (uppercase$) (letter (upp_i) of (text))
        end
        change [upp_i v] by [1]
    end
    
when green flag clicked
ask [Enter your password] and wait
uppercase (answer)
say (uppercase$)
</pre>
<script>
scratchblocks.renderMatching('pre.blocks', {style: 'scratch3'});
</script>

于 2021-08-07T21:50:55.340 回答