【问题标题】:function names() and function testCraps() aren't working correctly. Can anyone figure out why?函数名() 和函数 testCraps() 不能正常工作。谁能弄清楚为什么?
【发布时间】:2015-11-17 16:55:21
【问题描述】:

我正在尝试将两个函数放在一起,但我终其一生都无法弄清楚我做错了什么。

  1. 函数 names() 应该反复要求用户输入名称。当用户停止输入姓名时,程序应该打印每个姓名被输入的次数。这就是我目前所得到的。

    def names():
        counter={}
        name=input('Enter next name:')
        while name!='':
            if name in counter:
                counter[name]+=1
            else:
                counter[name]=1
            name=input('Enter next name:')
        for name in counter:
            if counter[name]>1:
            print('There are {1} students named {2}.'.format(counter[name], name))
        else:
            print('There is {1} student named {2}.'.format(counter[name], name))
    

在我停止输入名称之前它一直有效。那时,它只是给我一个语法错误,说明“解析时出现意外的 EOF”。有人知道我需要解决什么问题吗?

  1. 函数 testCraps() 应该以一个正整数 n 作为输入,模拟 n 次骰子游戏,掷骰子。然后它应该在 n 次掷骰子游戏后返回用户的赢率。在这里,我有:

    def craps():
        import random
        dice=random.randrange(1,7)+random.randrange(1,7)
        if dice in (7,11):
            return 1
        elif dice in (2,3,12):
            return 0
        else:
            newRoll=random.randrange(1,7)+random.randrange(1,7)
        while newRoll not in (7,dice):
            newRoll=random.randrange(1,7)+random.randrange(1,7)
        if newRoll==dice:
            return 1
        else:
            return 0
    
    def testCraps(n):
        count=0
        for i in range(n):
            if craps()==1:
                count+=1
        return count/n
    

出于某种原因,testCraps() 似乎总是给我 0,我看不出它有什么问题。你能看到我遗漏的东西吗?

【问题讨论】:

  • 也许你错过了需要缩进函数定义体的部分?
  • for 1,使用raw_input 代替input,因为您正在使用python 2.x
  • 对于第二个函数,python2中的2个整数除法自动使用整数除法。在划分之前将其中一个转换为浮点数(即float(count)/n
  • @N.Aylett 欢迎来到 StackOverflow!只是为了将来,请记住,网站上的每个问题都应该是一个单独的问题,因为您只能选择一个答案作为正确答案。它还允许比一般的“功能不起作用”更好的标题。
  • 谢谢,伙计们!我让他们俩都工作了!我知道这可能是他们俩的一个小错误。缩进只是格式化我的问题的错误。他们在实际程序中是正确的。

标签: python python-2.7


【解决方案1】:

names() 的问题在于,在格式化字符串时,您应该从 {0} 而不是 {1} 开始索引。纠正这个和缩进后,它工作正常:

def names():
    counter={}
    name=input('Enter next name:')
    while name!='':
        if name in counter:
            counter[name]+=1
        else:
            counter[name]=1
        name=input('Enter next name:')
    for name in counter:
        if counter[name]>1:
            print('There are {0} students named {1}.'.format(counter[name], name))
        else:
            print('There is {0} student named {1}.'.format(counter[name], name))

names()

互动环节:

Enter next name:Galax
Enter next name:Test
Enter next name:Galax
Enter next name:
There is 1 student named Test.
There are 2 students named Galax.

这是花旗代码,缩进固定,并且在上面的其中一个 cmets 中建议使用浮动转换:

def craps():
    import random
    dice=random.randrange(1,7)+random.randrange(1,7)
    if dice in (7,11):
        return 1
    elif dice in (2,3,12):
        return 0
    else:
        newRoll=random.randrange(1,7)+random.randrange(1,7)
        while newRoll not in (7,dice):
            newRoll=random.randrange(1,7)+random.randrange(1,7)
        if newRoll==dice:
            return 1
        else:
            return 0

def testCraps(n):
    count=0
    for i in range(n):
        if craps()==1:
            count+=1
    return float(count)/n

print(testCraps(100))

样本输出:

0.44

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多