2013-07-08 64 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