我想提示用户输入要运行的用户数和电子邮件地址以填充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))
答案 0 :(得分: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)
另外,还有几种风格的笔记:
如果您要采用复数命名法,请确保复数列表,然后确保项目可以作为单数形式引用而不是相反。例如:
last_name = [#some list] [#something for last_names in last_name]
只是令人困惑。它应该是:
last_names = [#some_list]
[#something for last_name in last_names]
答案 1 :(得分:0)
我根本不是Python,但在这一行的末尾看起来似乎是1个方括号:
Email_Address = (raw_input('Email_Address') [Last_Names + "Email_Address " for Last_Names inLast_Name]])
答案 2 :(得分: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'))
然后迭代一个范围(我假设你希望1
通过n
而不是0
通过n-1
:
First_Names = ["Test"+str(user) for user in range(1, users+1)]
我也冒昧地将变量的名称更改为First_Names
,因为你拥有的是名字的列表,而不是一个名字。
不幸的是,我没有时间用你的代码解决其余的问题,其中有很多(包括你实际要问的关于输入的问题),但那应该得到你开始修理它。