繁体   English   中英

函数names()和testCraps()函数无法正常工作。 谁能找出原因?

[英]function names() and function testCraps() aren't working correctly. Can anyone figure out why?

我试图将两个功能放在一起,但我终生无法弄清楚自己做错了什么。

  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,而我看不到任何问题。 你能看到我想念的东西吗?

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.

这是胡扯的代码,其中的缩进固定,并且在上面的注释之一中建议进行强制转换:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM