为什么我的if语句没有得到正确的答案?另外,如何找到所有输入的平均值?

2024-10-02 18:19:28 发布

您现在位置:Python中文网/ 问答频道 /正文

由于某些原因,我在运行这个程序时没有得到正确数量的快速女性和快速男性。快速雌性是小于-19的数字,快速雄性是小于15的数字。另外,如果有人能建议如何找到所有输入组合的平均值?你知道吗

#Write a program that categorizes user input

#Ask for user input
userInput=input("Enter a time (negative for F, "" to quit): ")

#Initialize variables
female=0
male=0
noRunner=0
fastFemale=0
fastMale=0
count=0

#Categorize input into male, female, fast female, and fast male
while userInput!="":
    count=count+1
    if userInput=="0":
        userInput=noRunner
        noRunner=noRunner+1
    if str(userInput).startswith("-"):
        userInput=female
        female=female+1
        if float(userInput) >= 19.0 and float(userInput) < 0.0:
            userInput=fastFemale
            fastFemale=fastFemale+1
    elif float(userInput) > 0.0:
        male=count-female-noRunner
        if float(userInput) <= 15.0 and float(userInput) > 0.0:
            userInput=fastMale
            fastMale=fastMale+1
    userInput=input("Enter a time (negative for F, "" to quit): ")

#Computations
total=male+female
noShow=noRunner

#Print statements
print()
print("Try-Out Report")
print("-"*40)
print("Total number of runners:", count-noShow)
print("Number of runners who didn't show:", noShow)
print("female", female)
print("male", male)
print("Average time for male runners:")
print("Average time for female runners:")
print("Average time for all runners:")
print("Fast female runners:", fastFemale)
print("Fast male runners:", fastMale)

Tags: andforinputiftimecountfloatmale
3条回答

您可以很好地使用pythons迭代器和列表函数(sumlen)以及-理解。你知道吗

像这样:

def prompt():
    return input('Enter a time (negative for F, "" to quit): ')

data = [float(datum) for datum in iter(prompt, '')]

females = [-datum for datum in data if datum < 0.]
males = [datum for datum in data if datum > 0.]

print ('Males average: {}'.format(sum(males) / len(males)))
print ('Females average: {}'.format(sum(females) / len(females)))
print ('Fast males: {}'.format(sum(1 for male in males if male < 15.)))

下面是一个交互式会话示例:

Enter a time (negative for F, "" to quit): 0
Enter a time (negative for F, "" to quit): 0
Enter a time (negative for F, "" to quit): 12
Enter a time (negative for F, "" to quit): 14
Enter a time (negative for F, "" to quit): 18
Enter a time (negative for F, "" to quit): -10
Enter a time (negative for F, "" to quit): -11
Enter a time (negative for F, "" to quit): 
Males average: 14.666666666666666
Females average: 10.5
Fast males: 2

要进一步分类,您可以执行以下操作:

fastMales = [male for male in males if male < 15.]
fastFemales = [female for female in females if female < 19.]
...
if str(userInput).startswith("-"):
...

我被这个吓坏了。使用userInput < 0就像您在下面的elif上几乎做的那样。你知道吗

    ...
    userInput=female
    ...

当你这么做的时候,你就失去了userInput值。你知道吗

在交互式会话中玩input,看看它是如何工作的。不需要float(userInput)。你知道吗

代码真的很糟糕。试着从问题的一个子集开始,比如说仅仅是女性,试着去理解发生了什么,不要只是试着得到一个随机调整的结果。你知道吗

当你得到输入时,建立一个和然后除以计数

当然,初始化count时initialize sum=0

因为你已经去掉了“-”符号,所以你不需要用abs

sum += float(userval)

avg = sum/total

请注意,您应该使用如下代码

female += 1

而不是

female = female + 1

请注意,这里的问题是,在使用输入变量之前要对其进行更改 这使得以后的所有检查都无效。在检查值之前,也不要使输入为正,这样它将始终为负,因此永远不会>;19将其更改为字符串以查找“-”是错误的,只需检查<;0即可

从已经是float或int的userInput开始

检查负值,然后更改为abs(userval)作为女性类别中的实际算法。你知道吗

if str(userInput).startswith("-"):
    userInput=female # This messes up the next if
    female=female+1
    if float(userInput) >= 19.0 and float(userInput) < 0.0:
        userInput=fastFemale
        fastFemale=fastFemale+1

相关问题 更多 >