2013-07-08 63 views
-2

我想提示用戶輸入要運行的用戶數量和電子郵件地址以填充csv文件。我收到一些語法錯誤。我如何得到這個工作?詢問我的腳本中的輸入

enter code here 

import csv 

# Define users 
valid_input = False 
while not valid_input: 
    users =raw_input('Number of users: ') 
    try: 
     users = range(0,int(users) 
     valid_input = True 
    except: 
     print "Invalid input" 
     pass 

First_Name = ["Test"+str(user) for user in range(1, users+1)] 
Last_Name = ["User%s" %user for user in users] 
email_addresses = [] 
for user in users: 
    email= raw_input("Email domain for user %d: " %user) 
    email_addresses.append(last_names[user] + email) 
Password = ["Password1" for user in users] 
Group =["Test" for user in users] 
Admin = ["Yes" for user in users] 
# open a file for writing. 
# open a file for writing. 
with open('users.csv', 'wb') as csv_out: 
    writer = csv.writer(csv_out) 
    writer.writerows(zip(Email_Address, Password, First_Name, Last_Name, Group, Admin)) 

回答

2

Email_Address = (raw_input('Email_Address') [Last_Names + "Email_Address " for Last_Names inLast_Name]]) 

是無效的語法。實際上很難說出你想用這條線做什麼,但這是非常無效的語法。

此外,你似乎是在Python中的誤解迭代。在你的第一行中,你提示輸入一個單一的數字,然後嘗試在其他多個地方遍歷它,我猜測你的意圖離你很遠。

users = (raw_input('number of users')) 

將設置用戶等於單個字符串。我猜你真正想要的是更多的東西是這樣的:

valid_input = False 
while not valid_input: 
    users =raw_input('Number of users: ') 
    try: 
     users = range(0,int(users)) 
     valid_input = True 
    except: 
     print "Invalid input" 
     pass 

我一直在讀通過代碼多一些,雖然它似乎是從你寫什麼有相當遠,我猜你想要提醒用戶輸入每個用戶的電子郵件地址。如果情況確實如此,這是你會怎麼做:

email_addresses = [] 
for user in users: 
    email = raw_input("Email address for user %d: " %user) 
    email_addresses.extend([email + last_name for last_name in last_names]) 

顯然我錯了你的意圖,這裏有一個解決方案,你在找什麼:

email_addresses = [] 
for user in users: 
    email= raw_input("Email domain for user %d: " %user) 
    email_addresses.append(last_names[user] + email) 

而且,一對夫婦風格的筆記:

  • 儘量保持所有變量名稱儘可能描述。例如,你得到的姓氏列表實際上並沒有姓氏,但是擁有用戶標識符,所以user_id將是一個更好的名字
  • 如果你打算採用複數命名法,那麼確保複數列表和然後確保這些項目可以被引用爲單數版本而不是其他方式。例如:

    姓氏= [#some列表] [在姓氏#something爲last_names]

只是混亂。它應該是:

last_names = [#some_list] 
[#something for last_name in last_names] 
  • 選擇使用蛇的情況下(like_this)或標題情況(likeThis),並堅持下去。沒有什麼比滾動丟失的代碼庫並找出某個變量正在使用哪種情況更煩人了。
+0

那麼,顯然我發現的方括號不是唯一的問題;-) –

+0

我想要求用戶輸入一個電子郵件域說@ gmail.com。然後它將採取Last_Name並加入兩個並且有[email protected]。這取決於您爲用戶投入的用戶數量。 – Wachira

+0

@ user2547206哦,好吧,編輯響應 –

0

我沒有把Python的所有,但它似乎是1個括號太多這行的末尾:

Email_Address = (raw_input('Email_Address') [Last_Names + "Email_Address " for Last_Names inLast_Name]]) 
+0

yes there是一個額外的方括號,但這遠不是那條線的唯一問題。 –

0

這一行後:

users = (raw_input('number of users')) 

users是一個字符串。假設你輸入100。

現在,你遍歷users

First_Name = ["Test"+str(user) for user in users] 

字符串是可迭代的,所以user呈現字符串'100'的單個字符。即,user將首先是'1',然後是'0',然後是'0';你得到Test1然後Test0然後Test0,而不是我期望的100個項目。

你可能想輸入轉換爲整數:

users = int(raw_input('number of users')) 

然後遍歷一個範圍(我假設你想通過1n而不是通過0n-1

First_Names = ["Test"+str(user) for user in range(1, users+1)] 

我也冒昧地將您的變量名稱更改爲First_Names,因爲您擁有的是列表的第一個名字,而不是一個名字。

不幸的是,我沒有時間去處理其他問題,其中有很多問題(包括您實際詢問的有關輸入的問題),但是應該得到你開始修理它了。

+0

First_Names = [「測試」+ str(用戶)範圍內的用戶(1,用戶+ 1)]我得到TypeError:只能連接列表(不是「int」)列表 – Wachira

+0

不,你不是。這條線沒有辦法給你那個錯誤。該錯誤在另一行。正如我所說,其他線路也存在問題。 – kindall