第1题

难度:1级

问题:编写一个程序,找到2000年至3200年(包括在内)中所有可被7整除但不能被5整除的所有数字,得到的数字按逗号分隔,打印在一行上。

提示:考虑使用range(begin, end)方法

l=[]
for i in range(2000, 3201):
    if (i%7 == 0) and (i%5 != 0):
        l.append(str(i))
print (','.join(l))

我的答案:

>>> [i for i in range(2000,3201) if not i%7 and i%5]
[2002, 2009, 2016, 2023, 2037, 2044, 2051, 2058, 2072, 2079, 2086, 2093, 2107,
 2114, 2121, 2128, 2142, 2149, 2156, 2163, 2177, 2184, 2191, 2198, 2212, 2219,
 2226, 2233, 2247, 2254, 2261, 2268, 2282, 2289, 2296, 2303, 2317, 2324, 2331,
 2338, 2352, 2359, 2366, 2373, 2387, 2394, 2401, 2408, 2422, 2429, 2436, 2443,
 2457, 2464, 2471, 2478, 2492, 2499, 2506, 2513, 2527, 2534, 2541, 2548, 2562,
 2569, 2576, 2583, 2597, 2604, 2611, 2618, 2632, 2639, 2646, 2653, 2667, 2674,
 2681, 2688, 2702, 2709, 2716, 2723, 2737, 2744, 2751, 2758, 2772, 2779, 2786,
 2793, 2807, 2814, 2821, 2828, 2842, 2849, 2856, 2863, 2877, 2884, 2891, 2898,
 2912, 2919, 2926, 2933, 2947, 2954, 2961, 2968, 2982, 2989, 2996, 3003, 3017,
 3024, 3031, 3038, 3052, 3059, 3066, 3073, 3087, 3094, 3101, 3108, 3122, 3129,
 3136, 3143, 3157, 3164, 3171, 3178, 3192, 3199]
>>>

第2题

难度:1级

问题:编写一个可以计算给定数阶乘的程序,结果以逗号分隔,打印在一行上;假设向程序输入8,则输出40320;

提示:在为问题提供输入数据的情况下,假设它是控制台输入。

我的答案:

print('请输入一个数字:')
n=int(input())
d={0:1}
for i in range(1,n+1):
    d[i]=d[i-1]*i

print(n,d[n],sep=',')

第3题

难度:1级

问题:使用给定的整数n,编写程序生成一个包含(i, i×i)的字典,该字典包含从1到n之间的整数(两者都包含),然后打印字典。

假设向程序提供以下输入:8

则输出为:{1:1,2:4,3:9,4:16,5:25,6:36,,7:49,8:64}

提示:在为问题提供输入数据的情况下,应该假设它是控制台输入。考虑使用dict类型()

print('请输入一个数字:')
n=int(input())
d=dict()
for i in range(1,n+1):
    d[i]=i*i
print(d)

我的答案:

>>> n = 8  # input() 输入 8
>>> {i:i**2 for i in range(1,n+1)}
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64}
>>>

第4题

难度:1级

问题:编写一个程序,该程序接收控制台以逗号分隔的数字序列,并生成包含每个数字的列表和元组;

假设,向程序提供以下输入:34岁,67年,55岁,33岁,12日,98年;

则输出为:['34', '67', '55', '33', '12', '98'] ('34', '67', '55', '33', '12', '98')

提示:在为问题提供输入数据的情况下,应该假设它是控制台输入,同时方法可以将列表转换为元组;

import re
print('请输入一组数字:')
values=input()
l=values.split(",")
k=re.findall(r'[0-9]+',values)
t=tuple(k)
print (k)
print (t)

我的答案:

>>> import re
>>> s='34岁,67年,55岁,33岁,12日,98年'
>>> pat=r'[0-9]\d*'
>>> r=re.findall(pat,s)
>>> r
['34', '67', '55', '33', '12', '98']
>>> print(r,tuple(r))
['34', '67', '55', '33', '12', '98'] ('34', '67', '55', '33', '12', '98')
>>>

第5题

难度:1级

问题:定义一个至少有两个方法的类: 一、getString:从控制台输入获取字符串;二、printString:打印大写母的字符串,并写出简单的测试函数来测试类方法。

提示:使用init方法构造一些参数

class InputOutString(object):
    def __init__(self):
        self.s = ""
    def getString(self):
        print('请输入字符串:')
        self.s = input()
    def printString(self):
        print (self.s.upper())
strObj = InputOutString()
strObj.getString()
strObj.printString()

同上!

第6题

难度:2级

问题:编写一个程序,根据给定的公式计算并打印值:Q=\sqrt{[(2*C*D)/H]}。其中,假设C=50。H=30。D是一个变量,它的值应该以逗号分隔的序列输入到程序中。

例:程序的输入序列为(以逗号分隔):100,150,180;则程序输出为:18,22,24;

提示:如果输出是小数,则应四舍五入到其最近的值(例输出是26.0,则应打印为26)。

import math
c=50
h=30
value = []
print('请输入一组数字:')
items=[x for x in input().split(',')]
for d in items:
    value.append(str(int(round(math.sqrt(2*c*float(d)/h)))))
print (','.join(value))

我的答案:

>>> C,H=50,30
>>> D=[int(_) for _ in input('请输入一组数字(以逗号分隔):').split(',')]
请输入一组数字(以逗号分隔):100,150,180
>>> D
[100, 150, 180]
>>> ['%.f'%(2*C*d/H)**0.5 for d in D]
['18', '22', '24']
>>> print(','.join(['%.f'%(2*C*d/H)**0.5 for d in D]))
>>> 18,22,24

第7题

难度:2级

问题:编写一个程序,X,Y作为输入,生成一个二维数组,数组的第i行和第j列的元素值应该是i×j。

注意:i= 0,1 . .,X - 1; j = 0, 1, Y-1。

假设,程序输入3, 5;则程序输出为:[[0,0,0,0,0],[0,1,2,3,4],[0,2,4,6,8]];

提示:如果要为问题提供输入数据,应该假设它是一个控制台输入,以逗号分隔。

print('请输入两个数字:')
input_str = input()
dimensions=[int(x) for x in input_str.split(',')]
rowNum=dimensions[0]
colNum=dimensions[1]
multilist = [[0 for col in range(colNum)] for row in range(rowNum)]
for row in range(rowNum):
    for col in range(colNum):
        multilist[row][col]= row*col
print (multilist)

我的答案:

>>> X,Y=3,5
>>> t=[x*y for x in range(X) for y in range(Y)]
>>> t
[0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 2, 4, 6, 8]
>>> [t[i:i+Y] for i in range(0,X*Y,Y)]
[[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8]]
>>> # 合成一行:
>>> [[x*y for x in range(X) for y in range(Y)][i:i+Y] for i in range(0,X*Y,Y)]
[[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8]]
>>>
>>> X,Y=6,3
>>> [[x*y for x in range(X) for y in range(Y)][i:i+Y] for i in range(0,X*Y,Y)]
[[0, 0, 0], [0, 1, 2], [0, 2, 4], [0, 3, 6], [0, 4, 8], [0, 5, 10]]
>>>

第8题

难度:2级

问题:编写一个程序,以逗号分隔的单词序列作为输入,按照字母顺序对每个单词进行排序,并通过逗号分隔的序列来打印单词。

假设向程序输入:without,hello,bag,world;

则输出为:bag,hello,without,world;

提示:在为问题提供输入数据的情况下,应该假设它是控制台输入。

items=[x for x in input().split(',')]
items.sort()
print (','.join(items))

我的答案:

>>> print(','.join(sorted([x for x in input().split(',')])))
without,hello,bag,world
bag,hello,without,world
>>>

第9题

难度:2级

问题编写一个程序,接收一行序列作为输入,并在将句子中的所有字符大写后打印行。

假设向程序依次输入:Hello world;Practice makes perfect;

则输出为:HELLO WORLD;PRACTICE MAKES PERFECT;

提示:在为问题提供输入数据的情况下,应该假设它是控制台输入。

lines = []
while True:
    s = input()
    if s:
        lines.append(s.upper())
    else:
        break;
for sentence in lines:
    print(sentence)

我的答案:

>>> print(input().upper())
Hello world; Practice makes perfect
HELLO WORLD; PRACTICE MAKES PERFECT
>>>

第10题

难度:2级

问题:编写一个程序,以一系列空格分隔的单词作为输入,并在删除所有重复的单词后,按字母顺序排序后打印这些单词。

假设向程序输入:hello world and practice makes perfect and hello world again

则输出为:again and hello makes perfect practice world

提示:我们使用set容器自动删除重复的数据,然后使用sort()对数据进行排序。

print('请输入一组字符串:')
s = input()
words = [word for word in s.split(" ")]
print (" ".join(sorted(list(set(words)))))

我的答案:

>>> print(' '.join(sorted(list(set([s for s in input().split(' ')])))))
hello world and practice makes perfect and hello world again
again and hello makes perfect practice world
>>>