不知道为什么我的python输出是循环的
我写了一些代码来读取文件中的数字。将其附加到变量,然后递增该数字,以便下次运行时,文件中的数字将为数字+1。它看起来像是在工作,只是似乎增加了两倍。。例如,下面是我的代码:不知道为什么我的python输出是循环的,python,loops,Python,Loops,我写了一些代码来读取文件中的数字。将其附加到变量,然后递增该数字,以便下次运行时,文件中的数字将为数字+1。它看起来像是在工作,只是似乎增加了两倍。。例如,下面是我的代码: 11 def mcIPNumber(): 12 with open('mcIPlatest.txt', 'r+') as file: 13 NameNumber= file.read().replace('\n','') 14 NameN
11 def mcIPNumber():
12 with open('mcIPlatest.txt', 'r+') as file:
13 NameNumber= file.read().replace('\n','')
14 NameNumber=int(NameNumber)
15 NewNumber= NameNumber+1
16 print "newnumber = %s" % NewNumber
17 file.seek(0)
18 file.write(str(NewNumber))
19 file.truncate()
20 return NameNumber
21
22 def makeNameMCTag():
23 NameNumber = mcIPNumber()
24 NameTag = "varName" + str(NameNumber)
25 print "Name Tag: %s" % NameTag
26 mcGroup = "varTagmc"
27 #IPNumber = 1
28 mcIP = "172.16.0.%s" % NameNumber
29 print ( "Multicast Tag: %s, %s" % (mcGroup,mcIP))
30
31
32 mcIPNumber()
33 makeNameMCTag()
但这是我的输出。。请注意,“NewNumber”会打印两次。。出于某种原因”
因此,它正确地使我的varName2和IP 172.16.0.2(将我在文件中的初始编号增加了1),但这意味着我第二次运行它..我得到:
newnumber = 4
newnumber = 5
Name Tag: varName
Multicast Tag: varTagmc, 172.16.0.4
我的预期结果是:
newnumber = 3
Name Tag: varName3
Multicast Tag: varTagmc, 172.16.0.3
知道为什么会循环吗
谢谢
(顺便说一句,如果你好奇的话,我正在尝试编写一些代码,最终将为我的TerraForm实验室编写tf文件),因为:
def makeNameMCTag():
NameNumber = mcIPNumber()
您正在从makeNameMCTag内部调用mcIPNumber,因此不必在第32行中调用该方法
或者
def make_name_mc_tag(name_number):
NameTag = "varName" + str(name_number)
print "Name Tag: %s" % NameTag
...
make_name_mc_tag(mcIPNumber())
此处您将所需数据作为参数传递。因此:
def makeNameMCTag():
NameNumber = mcIPNumber()
您正在从makeNameMCTag内部调用mcIPNumber,因此不必在第32行中调用该方法
或者
def make_name_mc_tag(name_number):
NameTag = "varName" + str(name_number)
print "Name Tag: %s" % NameTag
...
make_name_mc_tag(mcIPNumber())
这里您正在将所需数据作为参数传递。您没有注意到在代码中调用了
mcIPNumber()
两次吗?您没有注意到调用了mcIPNumber())
在代码中出现两次?看起来就是这样..但是它们被卡住了,如果我注释掉23,那么我会得到一个错误:NameError:全局名称'NameNumber'没有定义code
但是如果我注释掉32,那么该函数的其余部分将不会运行我的建议是删除32是的,如果我删除32,那么该函数的其余部分将不会运行。。如果我能以某种方式将NameNumber传递到makeNameTag()中,而不是NameNumber=mcIPNumber(),这将是可行的函数。然后我就不必调用它了。我不知道该怎么做如果你删除了23我说的是32我是个白痴。谢谢,就是这样。我实际上是通过声明一个变量为全局变量然后删除了23行来实现的。但我不确定这是否是一个好的做法。看起来就是这样。但是如果我评论的话,它们被卡住了out 23然后我得到一个错误:NameError:全局名称'NameNumber'没有定义code
,但是如果我像32一样注释掉,那么该函数的其余部分将不会运行我的建议是删除32是的,如果我像32一样删除,那么函数的其余部分将不会运行..如果不是NameNumber=mcIPNumber()…如果我能以某种方式将NameNumber传递到makeNameTag()中函数。然后我就不必调用它了。我不知道该怎么做。如果你删除了23行,那会是真的。我说的是32。我是个白痴。谢谢。就是这样。我实际上是通过将一个变量声明为全局变量,然后一起删除23行来实现的。但我不确定这是否是一个好的做法。