嵌套for循环的Python在第一次循环的第二次迭代中不执行第二次for循环

时间:2015-09-04 00:46:47

标签: python loops

在我的python类中,我创建了一个嵌套的for循环,脚本和输出应该非常简单。什么是不直接的是我如何解决这个问题!

我已经用Google搜索了几个小时查看其他嵌套for循环的示例,但是没有发现任何与我类似的东西来帮助我理解这个问题。

以下是整个脚本:

LIST = "list.txt"
USERNAME = "users.txt"

# Open the files to read from

listtxt = open(LIST,"r")
userstxt = open(USERNAME,"r")

# For each user in users.txt
for USER in userstxt:
    print ("Started new user %s" % USER)

    for PASSWD in listtxt:
        print USER + ", " + PASSWD

输出

Started new user user1

user1
, pass1

user1
, pass2

user1
, pass3

user1
, pass4

user1
, pass5

Started new user user2

Started new user user3

Started new user user4

Started new user user5

你看到问题了吗?问题是它通过第一个用户正确迭代,但在所有后续用户上它只通过第一个(用户)循环但不执行密码循环

2 个答案:

答案 0 :(得分:4)

你在外循环的第一次迭代中耗尽了文件。您应该将list.txt文件读入列表,然后遍历该列表。您也可能希望在使用之前从行中删除换行符。

users_filepath = 'users.txt'
passwords_filepath = 'list.txt'

with open(users_filepath, 'r') as users_file:
    users = [line.strip() for line in users_file]

with open(passwords_filepath, 'r') as password_file:
    passwords = [line.strip() for line in password_file]

for user in users:
    print "Started new user {user}".format(user=user)

    for password in passwords:
        print "{user}, {password}".format(user=user, password=password)

答案 1 :(得分:0)

我尝试了你给出的代码,它对我来说很好用:

Started new user user1
user1, pass1
user1, pass2
user1, pass3
user1, pass4
user1, pass5
Started new user user2
user2, pass1
user2, pass2
user2, pass3
user2, pass4
user2, pass5
Started new user user3
...

看起来有些东西已经弄乱了你的循环嵌套语法。 这让我怀疑你的缩进。你有混合标签和空格吗?中间是否有非打印字符?

我建议您突出显示每一行的前导空格(第一个字符前的空白内容),并将其重新键入所有空格。

您也可以尝试使用暴力方法:插入一两个战略性打印语句,显示该点的循环索引。这可以帮助追踪循环的逻辑,尽管你已经拥有的打印效果非常好。