在我的Python教科书中,他们创造了一个“Hangman”游戏。完整来源:http://pastebin.com/k1Fwp7zJ
我对极大难以理解以下代码段:
new = ""
for i in range(len(word)):
if guess == word[i]:
new += guess
else:
new += so_far[i]
so_far = new
我不知道究竟是什么“我”。我也不知道如何“说”/想象英语中的For-Loop。我无法理解/想象在这段代码中发生了什么,即使我已经完成了本章的所有准备工作并且到目前为止已经完成了所有准备工作。
在我的计划/算法中,对于Hangman游戏的这一部分,我写道:
*“浏览单词的每个字符,检查猜测字母是否在单词中。如果猜到的字母在单词中,请记下其位置。 然后转到“so_far”中的上述位置,并用猜到的字母替换。“*
我真的很难理解这部分代码。当我尝试自己编写刽子手游戏时,我总是被困在这里,我不知道该怎么做。
也许有人和我一样处于类似情况。有人可以解释这个For循环的含义吗?也许这是一种了解其余代码的方法吗?
答案 0 :(得分:0)
“我不确切知道
i
是什么”
i
是range
中每个项目的分配名称。第一次循环,i == 0
。第二次,i == 1
,等等。
“我不知道如何”说“/想象
for
- 英文循环。”
Python中的for
循环有两部分;要分配的名称和要迭代的迭代。对于iterable中的每个值,循环运行一次*,将该值分配给提供的名称。
您的示例相对简单:
for i in range(...):
此处range(start[, stop[, step]])
提供从step
到start
(不包括在内)的每个stop
中的整数。您只有一个stop
,因此使用了默认的start=0
和step=1
,其中包含:
range(n) ~= [0, 1, 2, ..., n-1, n]
这些值中的每一个依次分配给名称i
,允许您在循环内访问它们。
*除非您break
出,return
或错误为raise
d
答案 1 :(得分:0)
for
循环遵循这个简单的设计:
让我们打破这一行:
for i in range(len(word)):
首先,我们来看看:
for i
关键字for
称为循环。它将重复/迭代相同的代码块,直到满足条件。 i
是当前变量(在本例中为数字变量)。想象一下有人说,写下1到10之间的数字,然后你的i
将从数字1变为数字10。
in
关键字in
将声明上一个变量i
将等于的值范围。让我们分解一下:
range(len(word))
这会转换为变量word
的 长度 的 范围 值。假设word
等于“你好”,则长度为5.这意味着5的范围是0,1,2,3,4( 范围 排除最终值。)
基本上,这个:
for i in range(len(word)):
意思是:
iterate the variable `i` from the range of the length of the the variable `word`.
一个简单的测试,可以看到i
将代码更改为:
new = ""
for i in range(len(word)):
print i #this will print the values
if guess == word[i]:
new += guess
else:
new += so_far[i]
so_far = new
请记住,网上有很多教程:
答案 2 :(得分:0)
new = ""
此行创建一个空字符串
for i in range(len(word)):
在这一行中,代码告诉解释器0范围内的每个数字(len()
函数获得word -1
函数)执行后面的代码。
例如len('Thing')
将是5.现在,如果代码为:{/ p>,解释器将执行for
循环内的任何内容5次
for i in range(len('thing')):
print('Hello, world')
Hello, world
将被打印5次。在Python中,您不需要像在其他语言中那样增加i
。因此,当循环通过if / else块后启动i == 0
时,它将自动递增为1。
if guess == word[i]:
此行检查变量guess
是否等于索引word
的{{1}}值。例如,如果i
则word = 'thing'
为word[0]
。计算机从0开始计数而不是1,因此t
将是word[4]
。
g
这一行是 new += guess
的简写。由于我们使用字符串,new = new + guess
运算符将连接它们,或将它们粘合在一起。例如,+
将为'a' + 'b'
。
ab
此行表示如果未满足else:
条件该怎么办。例如:
if
如果if some_number > 10:
print('hello')
else:
print('Bye')
大于10,则会打印出来。如果不是Bye会打印。
some_number
此行连接so_far中索引i处的new和any。
new += so_far[i]
这会将so_far = new
设为等于新的。
答案 3 :(得分:0)
在你的程序中,Python的range()函数接受一个整数(这里是你想要猜测的单词的长度)并返回一个从0到该数字的整数列表。*所以:
word = "example"
len(word) //equals 7
range(len(word)) //returns [0,1,2,3,4,5,6]
Python中的列表是可迭代的数据类型。这意味着您可以遍历元素,即一次一个地移动元素并对每个元素执行某些操作。首先,它将i设置为0,然后执行for循环体中包含的任何内容。然后它将i设置为1并再次执行for循环体中包含的任何内容。它一直持续到列表结束。所以用你的例子:
word = "example"
for i in range(len(word))
你告诉Python对列表[0,1,2,3,4,5,6]中的每个元素做一些事情。这里的“我”没什么特别的。你可以随心所欲地命名它,但它只是一个传统的简写符号,用于以后引用该元素。例如:
for i in range(3):
print "The number is " + i
打印:
The number is 0
The number is 1
The number is 2
在Python中,可以通过索引访问字符串。例如:
word = "example"
word[0] = "e"
word[1] = "x"
. . .
将此与for循环相结合,您有:
word = "example"
myWordLength = len(word)
for i in range(myWordLength):
print "The letter is " + word[i]
这是印刷品:
The letter is e
The letter is x
The letter is a
The letter is m
The letter is p
The letter is l
The letter is e
Range(),for循环和列表也可以做很多其他的事情,但希望这有助于你理解作业。