2017-08-16 128 views
0

我想創建一個小型的Python程序,它需要名字和姓氏列表,並以FirstInitial格式創建一個用戶名。姓氏(區分相似姓名的可選號碼),例如P.Test16。然後將它們與現有用戶名列表以及所有其他新生成的用戶名進行比較,並通過在最後增加號碼來使它們全都是唯一的。 但是,雖然它可以將新用戶名與現有用戶名進行比較,但無法將其與其他新用戶名進行比較,例如,我目前已經有用戶名「j.moore」,並且還有兩名新用戶將擁有用戶名j。 moore,因此在while循環中第一次運行後都有用戶名「j.moore1」,但它不會在第二次運行中創建第二個「j.moore2」。下面是我的代碼Python的列表字符串比較不起作用

while len(intakearray) > 0: 
    nonuniqueusers = [] 
    for row in intakearray: 
     if (row[2] not in usersarray) and (row[2] not in uniqueusers): 
      if count > 0: 
       print(row) 
      uniqueusers.append(row) 
     else: 
      nonuniqueusers.append(row) 
      if args.verbose >= 1: 
       conflicts += 1 
       if args.verbose == 2: 
        conflictingnames.append(row[2]) 
    for row in nonuniqueusers: 
     newname = row[2] 
     if count >= 1: 
      newname = row[2][0:-1] 
     newname += str(count + 1) 
     row[2] = newname 
    intakearray = nonuniqueusers 
    count += 1 
+0

這遠離[mcve]!所以很難猜測你的代碼實際上做了什麼,應該做什麼。用一些名字構建一個例子列表,編寫簡單的代碼,試圖轉換列表並顯示它解釋你獲得什麼以及你想獲得什麼。你肯定會得到更多(好的)答案:-) –

+0

@Serge Ballesta對不起,我應該更清楚一點代碼,但克里斯托弗Bohme已經回答了我的問題。 – FesteringDoubt

回答

0

當用戶是唯一的,你從intakearrayuniqueusers(你的代碼的第7行)存儲完整的row:當您檢查用戶是否

uniqueusers.append(row) 

然而,名稱是獨一無二的,你檢查row[2]的用戶名是否uniqueusers(4號線在你的代碼):

if (row[2] not in usersarray) and (row[2] not in uniqueusers): 

當您將第7行從uniqueusers.append(row)更改爲uniqueusers.append(row[2])時,您的代碼應該按預期工作。

由於您的示例沒有說明關於usersarray內容的任何內容,您應該檢查是否存在具有完整行的內容並僅檢查上述if語句中的用戶名之間的不匹配。