我在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'
您可以继续重新定义相同的变量吗?它总是会采用最后的定义吗?
答案 0 :(得分:3)
这就是imperative programming的工作方式。它说将new_word
的值设置为X.然后将new_word
的值设置为Y. 每个语句都执行特定的操作,并且语句逐个跟随,逐个修改程序的状态。
你可以将它与declarative programming之类的东西进行对比,在https://stackoverflow.com/a/45987189/3071070中你只需要定义一次,然后计算机会计算出执行内容所需的顺序,以达到你所描述的结果。
答案 1 :(得分:1)
在此行中,您将word
,first
和pyg
的串联分配给new_word
:
new_word = word + first + pyg
之后,在这一行中,你切掉了第一个字符:
new_word = new_word[1:len(new_word)]
你确实两次使用相同的var new_word
,
并且最新的值(第一个字符被切断)覆盖第一个(第一个字符仍然存在)。
B.T.W。第二行是不必要的复杂,也可能是:
new_word = new_word[1:]
也许有助于意识到程序变量不是数学变量,并且程序中的=不是数学=。
a = 3
不是一个意思,即a等于3。
这是一个将数字3放入标记为a的内存位置的操作。
所以你总能在那里放些东西。
使用的早期语言:=(变为)而不是=(是),而某些语言仍使用< - 来表示此分配操作。