2013-07-08 3 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_ids будет лучшим именем.
  • Если вы собираетесь использовать номенклатуру плюрализации, то убедитесь, что списки плюрализаций и затем убедитесь, что элементы могут ссылаться как единственная версия, а не наоборот. Например:

    last_name = [#Some список] [#something для last_names в last_name]

просто сбивает с толку. Оно должно быть:

last_names = [#some_list] 
[#something for last_name in last_names] 
  • Выберите либо змейка случай (like_this) или заглавный (КакЭто) и придерживаться его. Нет ничего более раздражающего, чем прокручивать потерянную базу кода и выяснить, в каком случае используется конкретная переменная.
+0

Ну, видимо, квадратная скобка, которую я заметил, не единственная проблема ;-) –

+0

Я пытаюсь попросить пользователя ввести домен электронной почты say @ 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

да там это дополнительная квадратная скобка, но это далеко не единственная проблема с этой линией. –

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, так как у вас есть список первого имена, а не одно имя.

К сожалению, у меня нет времени, чтобы разобраться с остальными проблемами с вашим кодом, которых много (включая вопрос о том, что вы действительно спрашиваете), но это должно получиться вы начали его исправлять.

+0

First_Names = ["Test" + str (пользователь) для пользователя в диапазоне (1, пользователи + 1)] Я получаю TypeError: может только список конкатенаций (а не «int») в список – Wachira

+0

Нет, вы не знаете. Невозможно, чтобы эта строка могла дать вам эту ошибку. Ошибка находится на другой строке. Как я уже сказал, есть проблемы и в других направлениях. – kindall