Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:为什么我的;变量+;=1“;没有按预期工作?_Python_Loops_Python 3.x_Operators - Fatal编程技术网

Python:为什么我的;变量+;=1“;没有按预期工作?

Python:为什么我的;变量+;=1“;没有按预期工作?,python,loops,python-3.x,operators,Python,Loops,Python 3.x,Operators,我试图输出用户名的每一部分(如“n”、“ne”、“nee”、…”neelkamath@gmail.com“,”e“,”ee“,…,”eelkamath@gmail.com,而不是从“n”到neelkamath@gmail.com“然后从“e”到”eelkamath@gmail.com“然后从“e”到”elkamath@gmail.com"; 它每次跳过一个额外的字母,尽管我在“下一个”中只加了1。它从“n”到“e”(应该是前面一个字母)再到“l”(前面两个字母)再到“m”(前面三个字母),依此类

我试图输出用户名的每一部分(如“n”、“ne”、“nee”、…”neelkamath@gmail.com“,”e“,”ee“,…,”eelkamath@gmail.com,而不是从“n”到neelkamath@gmail.com“然后从“e”到”eelkamath@gmail.com“然后从“e”到”elkamath@gmail.com"; 它每次跳过一个额外的字母,尽管我在“下一个”中只加了1。它从“n”到“e”(应该是前面一个字母)再到“l”(前面两个字母)再到“m”(前面三个字母),依此类推。我是否正在放置
next+=1

位置不正确?

如果要为while循环的每次迭代删除一个字符,则无需增加
next

username = "neelkamath@gmail.com"
usernamelist = []
next = 0
while len(username) > 0:
    for part in accumulate(username):
        usernamelist.append(part)
    next += 1
    username = username[next:]
print(usernamelist)
通过增加
next
可以增加要跳过的字符数:

在第一次迭代中:在
username=username[1:][/code>之后
username
“eelkamath@gmail.com“


在第二次迭代中:在
username=username[1:][/code>之后
username
“elkamath@gmail.com“
但在
用户名=用户名[2:]
用户名之后是
”lkamath@gmail.com“

您想改用for循环:

username = "neelkamath@gmail.com"
usernamelist = []
while len(username) > 0:
    for part in accumulate(username):
        usernamelist.append(part)
    username = username[1:]
print(usernamelist)
但是,
累积
不是很有效。对于大字符串,请使用切片:

username = "neelkamath@gmail.com"
usernamelist = []
for start in range(len(username)):
    usernamelist.extend(accumulate(username[start:]))
print(usernamelist)
a=”neelkamath@gmail.com"
对于范围(0,len(a)+1)内的i:
打印a[:i]

输出

n
氖
原姓的
尼尔
尼尔克
尼尔卡
尼尔卡姆
尼尔卡马
尼尔卡马特
尼尔卡马斯
尼尔卡马斯@
neelkamath@g
neelkamath@gm
neelkamath@gma
neelkamath@gmai
neelkamath@gmail
neelkamath@gmail.
neelkamath@gmail.c
neelkamath@gmail.co

neelkamath@gmail.com

问题在于您正在从已修改的值修改«用户名»

为了更好地理解这一点,请考虑以下几行:

username = "neelkamath@gmail.com"
usernamelist = [
    username[s:e]
    for s, e in combinations(range(len(username)+1), 2)
]
print(usernamelist)
未拾取原始值的一部分(neelkamath@gmail.com),但来自已修剪的(在上一个循环中)。这都是关于下一次迭代的参考

这个例子可能有助于:

username = username[next:]

这不是OPS所需的输出。您可能希望更改电子邮件地址以获得更通用的内容@JacquesGaudin没关系,这不是一封真正的电子邮件(它是一个已删除的地址)
from itertools import accumulate
username1 = "neelkamath@gmail.com"
username2 = "neelkamath@gmail.com"
usernamelist = []
next = 0
while len( username2 ) > 0:
    for part in accumulate( username2 ):
        usernamelist.append( part )
    next += 1
    username2 = username1[next:]
    print( username1 )
    print( username2 )
print(usernamelist)