【问题标题】:Creating an array inside an if else statement in Python在 Python 中的 if else 语句中创建数组
【发布时间】:2017-12-10 12:43:34
【问题描述】:

我在一个列表中存储了以下 4 种水果
fruits = ["Apple", "Orange", "Pear", "Watermelon"]

我使用随机数生成器“numgen”生成 1 到 5 的值。

输出将是这样的
Apple Item is available Orange Item is unavailable Pear Item is available Watermelon Item is available

如果生成的数字是 1 或 2,它应该属于 else,这将不可用。

现在我想使用'unavailablefruits''availablefruits'else不可用 的水果存储到列表中,以在末尾显示可用水果并进行计数,使用类似的东西

print("The following items are unavailable")
print(unavailablefruits)
print('Number of fruits available = ' + availablefruits)
print('Percentage of fruits available = " + percent)

我还希望通过'percent' 显示可用水果的百分比,以在最后实现类似的目标

输出:

Apple
Item is available

Orange
Item is unavailable

Pear
Item is available

Watermelon
Item is available

The following items are unavailable:
Orange

Number of fruits available = 3
Percentage of fruits available = 75.0

我需要一些帮助,因为我不知道如何将它们存储在列表中并为其命名。有什么建议么?

修订代码 v2

import random

class Queue:
    def __init__(self):
        self.container = []

    def __len__(self):
        return len(self.container)

    def is_empty(self):
        return len(self) == 0

    def enqueue(self, item):
        self.container.append(item)

    def dequeue(self):
        return self.container.pop(0)

    def peek(self) :
        return self.container[0]

    def __iter__(self):
        return iter(self.container)

fruits = ["Apple", "Orange", "Pear", "Watermelon"]
#unavailable_fruits = [f for f in fruits if random.randint(1, 5) in (1, 2)]
#available_fruits = list(set(fruits) - set(unavailable_fruits))
#percent_available = (len(available_fruits)/len(fruits)) * 100
q = Queue()

temp = fruits.copy()

fruits = ["Apple", "Orange", "Pear", "Watermelon"]
d = {fruit: random.randint(1, 5) for fruit in fruits}
unavailable = [fruit for fruit in d if d[fruit] < 3]
available = [fruit for fruit in d if d[fruit] >= 3]


for fruit in fruits:
    if random.randint(1, 5) < 3:
        unavailable.append(fruit)
    else:
        available.append(fruit)

percent_available = len(available) / (len(available) + len(unavailable)) * 100

for fruit in temp:
    q.enqueue(fruit)

    print(fruit)

    numgen = random.randint(1, 5)
    if(numgen >= 3):
        print("Item is available")
    else:
        print("Item is unavailable")

print("The following items are unavailable")
print(unavailable)
print('Number of fruits available = ' + str(available))
print('Percentage of fruits available = ' + str(percent_available))

输出

Apple
Item is unavailable
Orange
Item is available
Pear
Item is unavailable
Watermelon
Item is available
The following items are unavailable
['Apple', 'Watermelon', 'Apple', 'Watermelon']
Number of fruits available = ['Orange', 'Pear', 'Orange', 'Pear']
Percentage of fruits available = 50.0

【问题讨论】:

    标签: python data-structures queue


    【解决方案1】:

    您可以只使用列表来存储可用和不可用的水果:

    fruits = ["Apple", "Orange", "Pear", "Watermelon"]
    
    available = []
    unavailable = []
    
    for fruit in fruits:
        if random.randint(1, 5) < 3:
            unavailable.append(fruit)
        else:
            available.append(fruit)
    

    如果您想保留每种水果的计数,您可以使用字典:

    d = {fruit: random.randint(1, 5) for fruit in fruits}
    unavailable = [fruit for fruit in d if d[fruit] < 3]
    available = [fruit for fruit in d if d[fruit] >= 3]
    

    现在 d 包含作为键的水果,作为值的计数。您可以像这样查看每种水果的数量:

    >>> d['Apple']
    5
    

    可用和不可用水果的数量只是使用len() 的每个列表的长度。

    可用百分比由下式给出:

    >>> len(available) / (len(available) + len(unavailable)) * 100
    75.0
    

    【讨论】:

    • 我可以计算百分比,但对于可用水果的数量,我仍然无法计算。我已经编辑了我的帖子,你可以看看吗?
    • 您似乎包含了我上面显示的两种方法,因此availableunavailable 列表包含相同项目的多个条目。如果您不需要保留每个水果的计数,请使用第一个(非字典),否则只需使用字典解决方案 - 但不能同时使用两者。
    【解决方案2】:

    尝试在您要创建水果列表的位置旁边创建一个空列表。现在,只要您发现水果不可用,请将水果添加到您的列表中。当您完成对所有水果的迭代后,该列表应该包含所有不可用的水果。

    【讨论】:

      【解决方案3】:
      fruits = ["Apple", "Orange", "Pear", "Watermelon"]
      unavailable_fruits = []
      available_fruits = []
      unavailable = (1, 2)
      for fruit in fruits:
          numget = random.randint(1, 5)
          if numget in unavailable:
              unavailable_fruits.append(fruit)
          else:
              available_fruits.append(fruit)
      percent_available = (len(available_fruits)/len(fruits)) * 100
      

      或者,一种非常简洁的方式,并且可能更 Pythonic:

      unavailable_fruits = [f for f in fruits if random.randint(1, 5) in (1, 2)]
      available_fruits = list(set(fruits) - set(unavailable_fruits))
      percent_available = (len(available_fruits)/len(fruits)) * 100
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-13
        • 1970-01-01
        • 2022-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-27
        • 1970-01-01
        相关资源
        最近更新 更多