我在Codeacademy的学习练习中制作了这个简单的Pyglatin翻译器。代码工作正常,但需要帮助理解原因。
变量 new_word 在 if 语句中定义了两次。代码如何知道打印new_word的第二个定义而不是第一个定义。似乎 if 语句的最后两行读起来更有意义-
final_word = new_word[1:len(new_word)]
print final_word
完整的工作代码如下-
pyg = 'ay'
original = raw_input('Enter a word:')
if len(original) > 0 and original.isalpha():
word = original.lower()
first = word[0]
new_word = word + first + pyg
new_word = new_word[1:len(new_word)]
print new_word
else:
print 'empty'
你能继续重新定义同一个变量,它总是采用最后给出的定义吗?
这就是命令式编程的工作方式。它说将new_word
的值设置为 X。然后将 new_word
的值设置为 Y。每个语句执行特定操作,并且语句后一个接一个,逐个修改程序的状态。
你可以将其与声明式编程之类的东西进行对比,在声明式编程中,你只定义一次所有内容,然后计算机计算出它需要以什么顺序执行什么才能达到你所描述的结果。
在这一行中,您将word
、first
和pyg
的串联分配给new_word
:
new_word = word + first + pyg
之后,在这一行中,你砍掉第一个字符:
new_word = new_word[1:len(new_word)]
您确实两次使用相同的变量new_word
,最新值(第一个字符被砍掉(覆盖第一个值(第一个字符仍然存在(。
B.T.W. 第二行是不必要的复杂,它也可能是:
new_word = new_word[1:]
也许它有助于意识到程序变量不是数学变量,并且程序中的 = 不是数学 =。
a = 3
不是一个命题,意味着 a 等于 3。这是一个将数字 3 放入标记为 a 的内存位置的操作。所以你总是可以把别的东西放在那里。
早期使用的语言是 := (成为( 而不是 = (is(,有些语言仍然使用 <- 来表示此赋值操作。