【问题标题】:How to obtain a value from inside a loop如何从循环内部获取值
【发布时间】:2021-05-06 15:22:16
【问题描述】:

我将实现多处理以使循环同时发生,但是如何在每次迭代结束时做到这一点,我可以获得westernEurope.caseseasternEurope.cases 的值,这样我就可以把它们加在一起

westernEurope = Region("Western Europe", 1000, 0, 0, 8, 4, 4, 0)
while westernEurope.deaths < westernEurope.population:
    westernEurope.infection()
    if westernEurope.cases > westernEurope.population:
        westernEurope.cases = westernEurope.population
    print("Infections:", westernEurope.cases)    
    westernEurope.death()
    if westernEurope.deaths > westernEurope.population:
        westernEurope.deaths = westernEurope.population
    print("Deaths:", westernEurope.deaths)
    #where i want to return the value of westernEurope.cases
    time.sleep(0.1)

easternEurope = Region("Eastern Europe", 1000, 0, 0, 8, 4, 4, 0)
while easternEurope.deaths < easternEurope.population:
    easternEurope.infection()
    if easternEurope.cases > easternEurope.population:
        easternEurope.cases = easternEurope.population
    print("Infections:", easternEurope.cases)    
    easternEurope.death()
    if easternEurope.deaths > easternEurope.population:
        easternEurope.deaths = easternEurope.population
    print("Deaths:", easternEurope.deaths)
    # where i want to return the value of easternEurope.cases
    time.sleep(0.1)

print(easternEurope.cases + westernEurope.cases)

【问题讨论】:

  • 一种方法是在一个进程中将值写入文件,然后在另一个进程中读取该文件

标签: python python-3.x loops while-loop


【解决方案1】:

恕我直言,不需要多处理。使用生成器,您的问题可以以更优雅的方式解决。

# where i want to return the value of easternEurope.cases
yield region.cases

完整代码:

def desease(region: Region):
    while region.deaths < region.population:
        region.infection()
        if region.cases > region.population:
            region.cases = region.population
        print("Infections:", region.cases)
        region.death()
        if region.deaths > region.population:
            region.deaths = region.population
        print("Deaths:", region.deaths)
        # where i want to return the value of easternEurope.cases
        yield region.cases
        time.sleep(0.1)


easternEurope = Region("Eastern Europe", 1000, 0, 0, 8, 4, 4, 0)
westernEurope = Region("Western Europe", 2000, 0, 0, 8, 4, 4, 0)
eastDesease = desease(easternEurope)
westDesease = desease(westernEurope)
for eastCases, westCases in zip(eastDesease, westDesease):
    print(eastCases, westCases)

【讨论】:

  • 不错。也许使用zipzip_longest 而不是whilenext
  • 昨天我意识到我可以在没有多处理的情况下处理它,并且我确实对其进行了一些更改 - 与您的非常相似。但是你曾经似乎比我的更有效率,特别是因为它得到了更多的维护。感谢您的帮助,非常感谢您
猜你喜欢
  • 2020-09-23
  • 2020-09-27
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多