1. bigdigits.py程序的一个变形,不再打印*,而是打印具体的数字。
__author__ = 'Ibuki Suika'
import sys
Zero = [" *** ",
" * * ",
"* *",
"* *",
"* *",
" * * ",
" *** "]
One = [" * ", "** ", " * ", " * ", " * ", " * ", "***"]
Two = [" *** ", "* *", "* * ", " * ", " * ", "* ", "*****"]
Three = [" *** ", "* *", " *", " ** ", " *", "* *", " *** "]
Four = [" * ", " ** ", " * * ", "* * ", "******", " * ",
" * "]
Five = ["*****", "* ", "* ", " *** ", " *", "* *", " *** "]
Six = [" *** ", "* ", "* ", "**** ", "* *", "* *", " *** "]
Seven = ["*****", " *", " * ", " * ", " * ", "* ", "* "]
Eight = [" *** ", "* *", "* *", " *** ", "* *", "* *", " *** "]
Nine = [" ****", "* *", "* *", " ****", " *", " *", " *"]
Digits = [Zero, One, Two, Three, Four, Five, Six, Seven, Eight, Nine]
try:
digits = sys.argv[1:]
row = 0
while row < 7:
line = ""
column = 0
while column < len(digits):
number = int(digits[column])
digit = Digits[number]
ch = digit[row].replace('*', str(number))
line += ch + " "
column += 1
print(line)
row += 1
except IndexError:
print("usage: bigdigits.py <number>")
except ValueError as err:
print(err, "in", digits)
2.创建一个程序,该程序提示用户在while循环中输入数值,并根据输入的数值逐步构建一个列表。用户结束输入时,打印出输入的数值本身、输入数值个数、输入数值和、输入的最小值与最大值与平均值。
__author__ = 'Ibuki Suika'
ls = []
while True:
s = input('enter a number or Enter to finish: ')
if s == '':
if len(ls) == 0:
print('list is empty')
break
count = len(ls)
total = sum(ls)
lowest = min(ls)
highest = max(ls)
mean = total / count
print("numbers: %s" % ls)
print("count={0:d} sum={1:d} lowest={2:d} highest={3:d} mean={4:f}".format(count, total, lowest, highest, mean))
break
else:
try:
num = int(s)
ls.append(num)
except ValueError as err:
print(err)
3.有些情况下,我们需要生成测试文本——比如,在网站真实内容可用之前,生成一个Web站点的设计方案,或者在开发报告写入者之前提供测试内容。为这一目的,可以编写一个用于生成可怕的诗歌的程序。
import random
articles = ["the", "a", "another", "her", "his"]
subjects = ["cat", "dog", "horse", "man", "woman", "boy", "girl"]
verbs = ["sang", "ran", "jumped", "said", "fought", "swam", "saw",
"heard", "felt", "slept", "hopped", "hoped", "cried",
"laughed", "walked"]
adverbs = ["loudly", "quietly", "quickly", "slowly", "well", "badly",
"rudely", "politely"]
for _ in [1, 2, 3, 4, 5]:
article = random.choice(articles)
subject = random.choice(subjects)
verb = random.choice(verbs)
if random.randint(0, 1) == 0:
print(article, subject, verb)
else:
adverb = random.choice(adverbs)
print(article, subject, verb, adverb)
4.为了使得产生可怕诗歌的程序功能更丰富,可以向其中添加一些代码,以便于用户在命令行上输入一个数字(在1与10之间)时,程序将输出该数字的代表行数。如果没有给定命令行参数,默认像以前一样打印5行。
__author__ = 'Ibuki Suika'
import random
import sys
articles = ["the", "a", "another", "her", "his"]
subjects = ["cat", "dog", "horse", "man", "woman", "boy", "girl"]
verbs = ["sang", "ran", "jumped", "said", "fought", "swam", "saw",
"heard", "felt", "slept", "hopped", "hoped", "cried",
"laughed", "walked"]
adverbs = ["loudly", "quietly", "quickly", "slowly", "well", "badly",
"rudely", "politely"]
count = 5
try:
num = int(sys.argv[1])
if 1 <= num <= 10:
count = num
except ValueError as err:
print(err)
for _ in range(count):
article = random.choice(articles)
subject = random.choice(subjects)
verb = random.choice(verbs)
if random.randint(0, 1) == 0:
print(article, subject, verb)
else:
adverb = random.choice(adverbs)
print(article, subject, verb, adverb)
5.对于练习2,计算中间值,并将其与其他相关信息一起输出。
numbers = []
indexes = []
total = 0
lowest = None
highest = None
while True:
try:
line = input("enter a number or Enter to finish: ")
if not line:
break
indexes.append(len(numbers))
number = int(line)
numbers.append(number)
total += number
if lowest is None or lowest > number:
lowest = number
if highest is None or highest < number:
highest = number
except ValueError as err:
print(err)
swapped = True
while swapped:
swapped = False
for index in indexes:
if index + 1 == len(numbers):
break
if numbers[index] > numbers[index + 1]:
temp = numbers[index]
numbers[index] = numbers[index + 1]
numbers[index + 1] = temp
swapped = True
if numbers:
index = int(len(numbers) / 2)
median = numbers[index]
if index and index * 2 == len(numbers):
median = (median + numbers[index - 1]) / 2
print("numbers:", numbers)
if numbers:
print("count =", len(numbers), "total =", total,
"lowest =", lowest, "highest =", highest,
"mean =", total / len(numbers), "median =", median)