コンピュータ科学とPythonプログラミングの導論week 4

4604 ワード

テストについて
テストはエラーの存在を証明するために使用され、多くの場合OKである可能性がありますが、1つの問題を発見すれば問題があることを示します.
1、ブラックボックステストブラックボックステストとは、ブラックボックステストを構築する際にテストするコードを表示する必要がないことを意味します.ブラックボックステストでは、テスト者と開発者が異なるグループから来ることができます.
2、ホワイトボックステストホワイトボックステストとは、テストのコードや内部構造を見てテストすることです.コードの内部構造をチェックしないと、どのテスト例が新しい情報を提供できるか分からない.
例外とアサーション
スナップ例外はtry/except文を使用できます.
 :

try:
        # 
except :
        # try 'name' 
except ,:
        # 'name' , 
else:
        # 


 :

try:
    fh = open("testfile", "w")
    fh.write(" , !!")
except IOError:
    print "Error:  "
else:
    print " "
    fh.close()

アサーションassertの役割:プログラムを開発するときに、実行時にクラッシュさせるよりも、エラー条件が発生したときにクラッシュさせる(エラーを返す)ことを断言します.
assert :
assert expression

In [17]: str_a = 'this is string'

In [18]: type(str_a)
Out[18]: str

In [19]: assert type(str_a) == str
In [20]: assert type(str_a) == int
Traceback (most recent call last):

  File "", line 1, in 
    assert type(str_a) == int

AssertionError

試験問題エラー(stackoverflow大法好):
Problem Set 4

 py3 inFile = open(WORDLIST_FILENAME, 'r',0)  inFile = open(WORDLIST_FILENAME, 'r'), 。
L7 PROBLEM 4
 , 。

def union(set1, set2):
   """
   set1 and set2 are collections of objects, each of which might be empty.
   Each set has no duplicates within itself, but there may be objects that
   are in both sets. Objects are assumed to be of the same type.

   This function returns one set containing all elements from
   both input sets, but with no duplicates.
   """
   if len(set1) == 0:
      return set2
   elif set1[0] in set2:
      return union(set1[1:], set2)
   else:
      return set1[0] + union(set1[1:], set2)

 :
Test Suite D: union('','abc'), union('a','abc'), union('ab','abc'), union('d','abc')

中間試験:quiz(中間試験のquizとプログラミング試験の問題が重複している):
PROBLEM 4
Write a simple procedure, myLog(x, b), that computes the logarithm of a number x relative to a base b.
For example, if x = 16 and b = 2, then the result is 4 - because 24=16. If x = 15 and b = 3, 
then the result is 2 - because 32 is the largest power of 3 less than 15.

 :

In [57]: def myLog(x, b):
    ...:     if x == b:
    ...:         return 1
    ...:     elif x < b:
    ...:         return 0
    ...:     else:
    ...:     #  
    ...:         return 1 + myLog (x / b, b)



PROBLEM 6

Write a recursive procedure, called laceStringsRecur(s1, s2), which also laces together two strings. 
Your procedure should not use any explicit loop mechanism, such as a for or while loop.
We have provided a template of the code; your job is to insert a single line of code in each of the indicated places.

 :

In [60]: def laceStringsRecur(s1, s2):
    ...:     """
    ...:     s1 and s2 are strings.
    ...: 
    ...:     Returns a new str with elements of s1 and s2 interlaced,
    ...:     beginning with s1. If strings are not of same length, 
    ...:     then the extra elements should appear at the end.
    ...:     """
    ...:     def helpLaceStrings(s1, s2, out):
    ...:         if s1 == '':
    ...:             return s2            
    ...:         if s2 == '':
    ...:             return s1
    ...:         else:
    ...:             return s1[0] + s2[0] + helpLaceStrings(s1[1:], s2[1:], '')
    ...:     return helpLaceStrings(s1, s2, '')
    ...: 

In [61]: laceStringsRecur('prgv', 'rtgwnisohg')
Out[61]: 'prrtggvwnisohg'

PROBLEM 7

6a+9b+20c=n

 :

In [81]: 
    ...: def McNuggets(n):
    ...:     """
    ...:     n is an int
    ...:     Returns True if some integer combination of 6, 9 and 20 equals n
    ...:     Otherwise returns False.
    ...:     """
    ...:     if n == 0:
    ...:         return True
    ...:     else:
    ...:         for factor in [20, 9, 6]:
    ...:             if n >= factor and McNuggets(n - factor):
    ...:                 return True
    ...:         return False
    ...:     

In [82]: McNuggets(9)
Out[82]: True

In [83]: McNuggets(15)
Out[83]: True

参考リンク:6.0.1 Xコンピュータ科学とPYTHONプログラミングガイド(自主モード)How can I fix this"ValueError:can't have unbuffered text I/O"in python 3?6.00.1x-intro-computer-science edx-mitx-6.00.1x edx-mitx-6.00/midTerm1_1.py