尝试增加整数值
所以基本上我尝试增加“e”,所以每次我输入一个新行时,它都会变成0,1等
我的输入看起来像这样
example1
example2
def no(paths: str):
e = 0
for path in paths.split(" "):
print(" ItemListData(" + str(e) + ")=(ItemDefination=" + path + '")')
e = e + 1
while True:
paths = input()
no(paths)
当我这样做的时候,我得到了这个:
ItemListData(0)=(ItemDefination=example1")
ItemListData(0)=(ItemDefination=example2")
我想要的是这个
ItemListData(0)=(ItemDefination=example1")
ItemListData(1)=(ItemDefination=example2")
3条答案
按热度按时间ars1skjm1#
首先,让我先说这是一个非常基本的问题,你真的应该学习一些基本的调试技巧。
代码跟踪
为了找出问题所在,我们需要首先理解代码,所以让我们跟踪它,看看到底发生了什么。
"example1"
存储在paths
中paths
("example1"
)被传入no()
函数e
设置为0paths
("example1"
)被空格分割"example1"
中没有空格,因此split返回["example1"]
1.我们迭代
["example1"]
的元素["example1"]
中只有一个元素,即"example1"
ItemListData(0)=(ItemDefination=example1")
已打印1.循环结束,因为
paths
中只有一个元素1.我们留下
no()
函数"example2"
存储在paths
中paths
("example2"
)被传入no()
函数e
设置为0paths
("example2"
)被空格分割"example1"
中没有空格,因此split返回["example2"]
1.我们迭代
["example2"]
的元素["example2"]
中只有一个元素,即"example2"
ItemListData(0)=(ItemDefination=example2")
已打印1.循环结束,因为
paths
中只有一个元素溶液
注意第3步和第13步很重要。每次调用
no()
时,e
都被设置为0。但我们不希望发生这种情况,对吗?我们希望跟踪您输入路径的次数。如果我们再次查看堆栈跟踪,我们将看到处理路径输入位置的循环是no()
函数外部的while
循环。因此解决方案是将e = 0
,和e = e + 1
围绕while
循环,而不是for
循环。约定
no()
应该重命名为number_paths()
,因为no
是一个在英语中有其他意思的单词。1.索引通常应该使用
i
变量而不是e
。1.除非有一个很好的理由,请不要手动打印一堆空格。使用
"\t"
来切换。print("\t\t ItemListData(" + str(i) + ")=(ItemDefinition=" + path + '")')
1.使用f字符串格式化字符串.
print(f'\t\t ItemListData({i})=(ItemDefinition="{path}")')
1.使用
i += 1
代替i = i + 1
常规固定代码:
2j4z5cfb2#
如果你想让函数本身修改它的内部状态,你可以全局声明它。
但是因为在你的例子中,
e
只有作为函数no
的属性才有意义...为什么不把它变成一个 * 属性 * 呢?在这种情况下,
no.e
也是全局声明的(它可以被其他函数访问,例如print(no.e)
)。注意,因为
no
是声明的(在它自己的def
中),所以即使no.e
还没有声明,也不会得到UnboundLocalError
,但是如果在使用它之前忘记声明它,就会得到AttributeError
。它是函数属性的may be considered and abuse,但在我看来,它在这里是合理的,因为它明确了
e
只有作为no
的一部分才有意义。顺便说一下,
no
在for
/while
循环之外似乎没有意义,因为它假设值e
需要更新。而您的while
循环只不过是调用no
。真的有必要将这两者分离吗?你可以
(Or把所有这些都放在一个函数中)
ie3xauqp3#
假设你想让值e在每次执行函数时都增加,你可以这样做:
输出的前两行,输入如下:
x一个一个一个一个x一个一个二个x
注意,你有一个无限循环。为了不有无限循环,你可以把循环条件改为类似
while e < x
的东西,让循环内容执行x
次。