Python while 循环,打印数组中的一项,而不是连续打印两次

Python while loop, print one item from array without it being printed twice in a row

我希望 pyautogui 在一个月中输入从 1 到 31 的天数。在每个数字下方我希望它从数组中输入城市名称。问题是当循环结束时,在接下来的 运行 中它有机会打印我不想要的同一个城市。它可以而且应该再次打印它,而不是连续打印两次。

我尝试了几个可以Google但none有效的选项。这是我的代码。如果您有关于如何修复它或全新代码的建议,请告诉我。

import pyautogui, random

dayDate = 1
while dayDate < 32:
    pyautogui.click(380, 325)
    pyautogui.typewrite(str(dayDate))
    pyautogui.click(380, 345)
    cities = ['London', 'Paris', 'Berlin', 'Barcelona', 'Moscow']
    city = random.choice(cities)
    print(city)
    pyautogui.typewrite(str(city))
    dayDate += 1

我很清楚,终端中的优选输出不应该连续两次出现相同的城市。

例如:

  1. 伦敦 2.柏林 3.柏林 4.莫斯科 - 错误

  2. 柏林 2.伦敦 3.柏林 4.莫斯科 - 正确

您可以将之前的城市存储为变量。然后,有一个 while 循环,您可以在其中随机选择城市,而所选城市等于之前选择的城市。

import pyautogui, random

dayDate = 1
prevCity = ''
while dayDate < 32:
    pyautogui.click(380, 325)
    pyautogui.typewrite(str(dayDate))
    pyautogui.click(380, 345)
    cities = ['London', 'Paris', 'Berlin', 'Barcelona', 'Moscow']
    city = random.choice(cities)
    while prevCity == city:
        city = random.choice(cities)
    prevCity = city
    print(city)
    pyautogui.typewrite(str(city))
    dayDate += 1

将你的代码改成这样:

import pyautogui, random

cities = ('London', 'Paris', 'Berlin', 'Barcelona', 'Moscow')
last_city = city = random.choice(cities)

for day in range(1, 32):
    pyautogui.click(380, 325)
    pyautogui.typewrite(str(day))
    pyautogui.click(380, 345)
    pyautogui.typewrite(city)
    print(day, city)
    while city == last_city:
        city = random.choice(cities)
    last_city = city 

不完全确定我理解了这个问题。也许解决方案只是记住上次打印的城市并选择一个不同的城市?

import pyautogui, random

cities = ['London', 'Paris', 'Berlin', 'Barcelona', 'Moscow']
dayDate = 1
city = prev_city = ""
while dayDate < 32:
    pyautogui.click(380, 325)
    pyautogui.typewrite(str(dayDate))
    pyautogui.click(380, 345)
    while city == prev_city:
        city = random.choice(cities)
    prev_city = city
    print(city)
    pyautogui.typewrite(str(city))
    dayDate += 1