如何在Python中使用复杂的if语句添加运行总数



我在一个文本文件中有以下数据。

Intium II,2.8,24,128
Celerisc I,1.6,32,256
Ethloan III,2.6,32,128
Powerup II,1.9,64,512
Mitduo III,3.1,24,128

我正在做以下事情:

为每个处理器分配点

每个处理器将获得如下积分:

  • 时钟速度低于2 GHz,奖励10分
  • 时钟速度介于2GHz和3GHz之间(包括2GHz和5GHz(,奖励20分
  • 时钟速度大于3GHz,奖励30分

数据总线点

数据总线上每条线路得1分,例如24位数据总线,奖励24分。

缓存大小点

每10 Kb的缓存(例如128Kb缓存(得1分,奖励12分
(128/10=12.8,应四舍五入为12(

程序的输出应类似于以下内容:

John Doe your order code is JD3f
Processor    Points
Intium II    56
Celerisc I   67
Ethloan III  64
Powerup II   125
Mitduo III   66 

这是我的代码

import random
import string
def getDetails():
forename = input("Enter first name: ")
surname = input("Enter last name: ")
number = random.randint(0,9)
character = random.choice(string.ascii_letters).lower()
code = (forename[:1] + str(surname[:1]) + str(number) + str(character))
return forename, surname, code
def readProcessorDetails():
processorName = []*5
clockSpeed = []*5
dataBusWidth = []*5
cacheSize = []*5
file = open("processors.txt","r")
for line in file:
data = line.split(",")
processorName.append(data[0])
clockSpeed.append(float(data[1]))
dataBusWidth.append(data[2])
cacheSize.append(data[3])

input("file read successfully.. Press any key to continue")
return processorName, clockSpeed, dataBusWidth, cacheSize

def allocatePoints(clockSpeed, dataBusWidth, cacheSize):

proPoints = 0.0
processorPoints = []
for counter in range(len(clockSpeed)):
if clockSpeed[counter] < 2.0 or dataBusWidth[counter] == 24 or dataBusWidth[counter] == 128:
proPoints = proPoints + 10 + 24 + 12
processorPoints.append(proPoints)

elif clockSpeed[counter] > 2.0 or clockSpeed[counter] <= 3.0 or dataBusWidth[counter] == 24 or dataBusWidth[counter] == 128:
proPoints = proPoints + 20 + 24 + 12
processorPoints.append(proPoints)

elif clockSpeed[counter] > 3.0 or dataBusWidth[counter] == 24 or dataBusWidth[counter] == 128:
proPoints = proPoints + 30 + 24 + 12
processorPoints.append(proPoints)
return processorPoints
def display(processorName, processorPoints):
print(f"Processor t Points")
for counter in range(len(processorPoints)):
print(f"{processorName[counter]}t {processorPoints[counter]}n")
def main():
forename, surname, code = getDetails()
processorName, clockSpeed, dataBusWidth, cacheSize = readProcessorDetails()
processorPoints = allocatePoints(clockSpeed, dataBusWidth, cacheSize)
print()
print(forename + " " + surname + " your order code is " + code)
print()
display(processorName, processorPoints)

main()

这是我的代码输出

Enter first name: John
Enter last name: Doe
file read successfully.. Press any key to continue
John Doe your order code is JD8z
Processor    Points
Intium II    56.0
Celerisc I   102.0
Ethloan III  158.0
Powerup II   204.0
Mitduo III   260.0

我不确定我在allocatePoints((函数中做错了什么,我在函数中使用了复杂的if语句和运行total来添加处理器点。

考虑将所有数据保留在一个列表中,而不是尝试协调多个列表。这可以让你避免非Python的";对于范围(len(x(("中的x;构造并直接遍历列表。

我还修复了你的根本问题,那就是你没有为每个新处理器将点重置为零。

import random
import string
def getDetails():
forename = input("Enter first name: ")
surname = input("Enter last name: ")
number = random.randint(0,9)
character = random.choice(string.ascii_letters).lower()
code = (forename[:1] + str(surname[:1]) + str(number) + str(character))
return forename, surname, code
def readProcessorDetails():
pdata = []
for line in  open("processors.txt"):
data = line.split(",")
pdata.append( [data[0], float(data[1]), int(data[2]), int(data[3])] )
return pdata
def allocatePoints(pdata):
for row in pdata:
points = 0
if row[1] < 2.0:
points += 10
elif row[1] <= 3.0:
points += 20
else:
points += 30
points += row[2]
points += row[3] // 10
row.append( points )
def display(pdata):
print("ProcessortPoints")
for row in pdata:
print(f"{row[0]}t{row[-1]}")
def main():
forename, surname, code = getDetails()
processorData = readProcessorDetails()
allocatePoints(processorData)
print()
print(forename + " " + surname + " your order code is " + code)
print()
display(processorData)

main()

最新更新