【问题标题】:Multiplying for loop inputs in Python3在 Python3 中乘以 for 循环输入
【发布时间】:2019-05-02 19:19:49
【问题描述】:

我正在用 Python3 编写一个计算网络可用性的小程序。

根据我的数据通信课程,您可以通过将网络中每个设备的可用性相乘来确定您的网络可用性。

例如:您的网络中有 3 台设备。设备 1 的可用性为 0.67。设备 2 的可用性为 0.94。设备 3 的可用性为 0.79。然后将可用性相乘:.67 * .94 * .79 = .498 网络可用性。

这是我目前的代码:

# Network Availability
# by Nicholas Zachariah

numDev = int(input("How many devices do you have? ")) # number of devices
print(f"There are {numDev} devices.")
devList = list(range(1, numDev+1)) # device list


for device in devList:
    ava = input(f"What is the availability of device number {device}? ") # availability

从这里,我想存储每个可用性输入,然后将每个设备的可用性相乘并打印整个网络的可用性,但是我无法完成这项任务,因为我无法弄清楚如何单独存储每个设备的可用性。有人可以帮忙吗?

附言 简单来说,我正在寻找网络的总可用性。

【问题讨论】:

  • 在此处以{device: availability} 的形式使用dict 可能会有所帮助,然后您可以使用dict.values() 访问所有可用性
  • 如果设备的名称无关紧要,只需用值填充一个列表,然后将元素相乘。
  • @TheIncorrigible1 我喜欢这个主意。让我自己试着从这里弄清楚。如果没有,我可以回来寻求更多帮助吗?如果我能弄清楚,我也会告诉你。
  • @NicholasZachariah 您随时可以提问!如果您确实设法解决了自己的问题,我建议您发布问题的答案。当您能够接受答案时,请选择使用 ✅最好解决您问题的任何一个
  • 谢谢。我会确保这样做。

标签: python list for-loop int


【解决方案1】:

你可以在for循环之前创建一个列表添加使用list.append()

numDev = int(input('How many devices do you have? '))
print(f'There are {numDev} devices.')
devList = list(range(1, numDev+1))
avaList = []

for device in devlist:
    avaList.append(input(f'What is the availability of device number {device}? '))

【讨论】:

  • 这根本没有解决问题。
【解决方案2】:

第一件事是您根据给定的输入定义 ava。在这种情况下,给定的输入应该是一个 int,所以 ava 将是一个 int。需要预先指定 ava 是一个列表,这样就可以使用 .append() 来追加输入值。

之后,您可以循环遍历 ava 列表并乘以结果:

# Network Availability
# by Nicholas Zachariah

numDev = int(input("How many devices do you have? ")) # number of devices
print(f"There are {numDev} devices.")
devList = list(range(1, numDev+1)) # device list
ava = []

for device in devList:
    ava.append(int(input(f"What is the availability of device number {device}? ")))

print (ava)
TotalAvailability = 1

for device in ava:
    TotalAvailability *=device

print( TotalAvailability)   

【讨论】:

  • 这是对我帮助最大的。但是,我被困在 TotalAvailability 上,您将其设置为 1,但几乎有“1 = 1 * 设备”(TotalAvailability = TotalAvailability * 设备)。你能解释一下它是如何工作的吗?
  • 在你的脑海中运行它:你首先从 Total = 1 开始,然后 Total = 1*device,这意味着 Total = device_1,下一次运行你得到 Total = device_1*device_2... 等等。 !
【解决方案3】:

对值使用字典。

#!/usr/bin/python3.5
import operator
from functools import reduce

numDev = int(input("How many devices do you have? ")) # number of devices
print("There are {} devices.".format(numDev))

devList = list(range(1, numDev+1)) # device list
ava = {}

for device in devList:
    ava[device] = float(input("What is the availability of device number {}? ".format(device))) #add to dict

print("{:.2f}".format(reduce(operator.mul, ava.values(), 1)))

>>>How many devices do you have? 2
>>>There are 2 devices.
>>>What is the availability of device number 1? .65
>>>What is the availability of device number 2? .66
>>>0.43

【讨论】:

  • 我确信您的代码是有效的,但我对导入以及如何使用它们还不够熟悉。不过,我一定会查看您的代码并使用它,这样我就可以开始练习了!感谢您的帮助。
  • 没问题。导入可能令人生畏,但实际上它们只是一种让您访问没有导入就无法使用的方法的方法。例如,有一个名为“functools”的模块。它有一个我需要的方法,叫做“reduce”,所以 import 语句说只导入一个方法而不是整个模块。如果您导入整个模块,就像我对运算符所做的那样,您需要指定该项目属于该模块。因此,“operator.mul”。
  • 我想指出functoolsthe standard library中,所以你不需要安装任何额外的东西。
  • 这不是他要找的,他想“打印整个网络的可用性”
  • @AdamDadvar 我相信你误解了这个问题。 “然后将每个设备的可用性相乘并打印整个网络的可用性,但我无法完成这项任务,因为我无法弄清楚如何单独存储每个设备的可用性。”
【解决方案4】:

据我所知(不是其他人所推断的),您希望找到网络可用性,换句话说,所有可用性的乘积。

为了单独存储可用性,您可以使用 python 中的许多可迭代对象之一,最简单的一个是list。列表是包含多个元素(不一定是同一类型)的数据结构。

为了实现您想要完成的目标,您需要以下内容:

# Network Availability
# by Nicholas Zachariah

numDev = int(input("How many devices do you have? ")) # number of devices
print(f"There are {numDev} devices.")
devList = list(range(1, numDev+1)) # device list

availability_list = list()
for device in devList:
    ava = input(f"What is the availability of device number {device}? ") # availability
    availability_list.append(ava)
curr_avail = availability_list.pop()
for avail in availability_list:
    curr_avail = curr_avail*avail

例如,当您输入 0.8、0.7 和 0.6 时

availability_list = [0.8, 0.7, 0.6]
curr_avail = availability_list.pop()
for avail in availability_list:
    curr_avail = curr_avail*avail

curr_avail
>>> 0.33599999999999997

【讨论】:

    【解决方案5】:

    Michael King 的答案很好,我将其标记为正确。这是我基于他的回答的新代码。我只是稍微组织了一下,并使用了一个圆形函数,所以最终结果没有十位小数。

    netAva = 1 # Network Availability
    ava = [] # List of each device's availability
    
    numDev = int(input("How many devices do you have? ")) # number of devices
    print(f"There are {numDev} devices.")
    devList = list(range(1, numDev+1)) # device list
    
    for device in devList:
        ava.append(float(input(f"What is the availability of device number     {device}? "))) # availability
    
    for device in ava:
        netAva *= device
    
    netAva = round(netAva, 3)
    
    print(f"{netAva} is your network's availability.")
    

    【讨论】:

      猜你喜欢
      • 2016-10-24
      • 2020-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-01
      • 2015-06-14
      相关资源
      最近更新 更多