I am looking for some help with loops. I have a name list, and I'm looking to sequentially message each profile from that list with a random user inputted message.
Ideally this would involve looping through the profileLink items while simultaneously looping through the nameList items so that I can build a new messageInput for each profile.
My code works, but currently has a lot of duplication and to build this to support a larger list will involve a lot of copying and pasting, as you can see below - How would you go about this?
messageInput0="Hi " f'{namelist[0]}' ", " f'{choice(messageOptions)}'
messageInput1="Hi " f'{namelist[1]}' ", " f'{choice(messageOptions)}'
messageInput2="Hi " f'{namelist[2]}' ", " f'{choice(messageOptions)}'
messageInput3="Hi " f'{namelist[3]}' ", " f'{choice(messageOptions)}'
messageInput4="Hi " f'{namelist[4]}' ", " f'{choice(messageOptions)}'
webbrowser.open(profileLink[0])
time.sleep(6)
pyautogui.press('tab')
pyautogui.write(messageInput0, interval=random.uniform(0.03, 0.15))
with pyautogui.hold('command'):
pyautogui.press('w')
webbrowser.open(profileLink[1])
time.sleep(6)
pyautogui.press('tab')
pyautogui.write(messageInput1, interval=random.uniform(0.03, 0.15))
with pyautogui.hold('command'):
pyautogui.press('w')
webbrowser.open(profileLink[2])
time.sleep(6)
pyautogui.press('tab')
pyautogui.write(messageInput2, interval=random.uniform(0.03, 0.15))
with pyautogui.hold('command'):
pyautogui.press('w')
webbrowser.open(profileLink[3])
time.sleep(6)
pyautogui.press('tab')
pyautogui.write(messageInput3, interval=random.uniform(0.03, 0.15))
with pyautogui.hold('command'):
pyautogui.press('w')
webbrowser.open(profileLink[4])
time.sleep(6)
pyautogui.press('tab')
pyautogui.write(messageInput4, interval=random.uniform(0.03, 0.15))
with pyautogui.hold('command'):
pyautogui.press('w')
EDIT: After trying the top answer, I got the error that list object has no attribute 'replace'
Worth mentioning my list is built using str.replace/str.split functions, like so:
profileLink = open("profiles.txt").read().splitlines()
profileLink = [item.replace(" ","name=") for item in profileLink]
newLinks = [item.replace("%","name=") for item in profileLink]
nameList = [i.split("name=")[1] for i in newLinks]
EDIT 2: First edit was actually an unrelated error. Fixed now.
CodePudding user response:
Like so.
- Use
zip
to "zip up" the name and profile link and you don't have to keep track of loop indexes.
import random
import time
import pyautogui
import webbrowser
namelist = ["a", "b", "c", "d"]
profilelink = ["q", "w", "e", "r"]
messageOptions = ["bye", "hello"]
for name, link in zip(namelist, profilelink):
message = f"Hi {name}, {random.choice(messageOptions)}"
webbrowser.open(link)
time.sleep(6)
pyautogui.press("tab")
pyautogui.write(message, interval=random.uniform(0.03, 0.15))
with pyautogui.hold("command"):
pyautogui.press("w")
CodePudding user response:
This is how I'd do it :
import random
import time
import webbrowser
def messageInput(nameList, profileLink):
for name in nameList:
message = "Hi " f'{name}' ", " f'{choice(messageOptions)}'
for profile in profileLink:
webbrowser.open(profile)
time.sleep(6)
pyautogui.press('tab')
pyautogui.write(message, interval=random.uniform(0.03, 0.15))
with pyautogui.hold('command'):
pyautogui.press('w')
I hope this helps !
CodePudding user response:
Use a for
loop:
for i in range(len(profileLink)):
webbrowser.open(profileLink[i])
time.sleep(6)
pyautogui.press('tab')
message = f'Hi {namelist[i]}, {choice(messageOptions)}'
pyautogui.write(message, interval=random.uniform(0.03, 0.15))