第一周python作业——基础、分支、循环

Python编程入门

选择题

  1. 下列哪个语句在Python中是非法的?(B)
    A. x = y = z = 1
    B. x = (y = z + 1)
    C. x, y = y, x
    D. x = y
  2. 关于Python变量,下列列说法错误的是 (C)
    A. 变量无须指定类型
    B. 变量可以重新赋值
    C. 变量⽆须先创建和赋值⽽直接使⽤
    D. 同一个变量可以保存不同类型的值
  3. 下⾯哪个不是Python合法的标识符(B)
    A. int64
    B. 40XL
    C. self
    D. stu_name
  4. 下列关于Python语⾔说法错误的是(C)
    A. Python是解释型语言
    B. Python是⾯向对象语⾔
    C. Python2.x和Python3.x是完全兼容的
    D. 普通的⽂本编辑器也可以写Python程序
  5. 下列关于print函数用法错误的是(D)
    A. print(100)
    B. print(100, 200)
    C. print(100, ‘hello world!’)
    D. print(10 20)

填空题

  1. Python中单行注释的符号是(# ), 多⾏注释的符号是(‘’’ ‘’’ 或"“” “”")。
  2. 语句a, b=10,20执⾏后,a的值是( 10 );语句a, a = 10, 20 执⾏后,a的值是( 20 )。
  3. Python程序文件扩展名是( .py )。
  4. 在Python中,int表示的数据类型是( 整型 )。
  5. 在Python中,字符串数据需要⽤( ‘’ )或( “” )包裹。
  6. 在Python中,布尔类型有( 2 )个值,分别是( True、False )。
  7. 如果想要查看⼀个数据或者变量的数据类型,可以用( type() )函数。

编程题

  1. 写程序提示⽤户输入⽤户名和密码,并且将输⼊的内容保存到不同的变量中。
user_name = input('请输入用户名:')
password = input('请输入密码:')
  1. 使⽤一个print输出3个数据,3个数据在⼀行显示,并且用等号(=)隔开。
print(10,20,30,sep='=')

数据类型和运算符

选择题

  1. print(100 - 25 * 3 % 4) 应该输出什么? (B)

    A. 1

    B. 97

    C. 25

    D. 0

  2. 下列哪种说法是错误的(A)。

    A. 除字典类型外,所有标准对象均可以用于布尔测试

    B. 空字符串的布尔值是False

    C. 空列表对象的布尔值是False

    D. 值为0的任何数字对象的布尔值是False

  3. Python不支持的数据类型有(A)。

    A. char

    B. int

    C. float

    D. list

  4. (多选)n = 6784,以下能够获取到7 的方法有(CD)。

    A. n / 1000 % 100

    B. n % 1000 / 100

    C. n // 100 % 10

    D. n // 10 % 100 // 10

  5. 运行以下程序,当从键盘上输入12,运行结果是()。

    x = (input(A))
    print(type(x))
    

    A. <class 'str'>

    B. <class 'int'>

    C. 出错

    D. class 'dict'

  6. 下列表达式的运算结果是( D) 。

    a = 100
    b = False
    print(a * b > -1)
    

    A. False

    B. 1

    C. 0

    D.True

填空题

  1. 在Python中表示空类型的是(None)。
  2. 查看变量中数据的类型的函数名是(type)。
  3. 已知x = 3 == 3,执行结束后,变量x的值为(True)。
  4. 已知 x = 3,那么执行语句 x += 6 之后,x的值为(9)。
  5. 表达式 3 ** 2 的值为(9),表达式 3 * 2的值为(6),表达式 4 ** 0.5 的值为(2.0)。

编程题

  1. 写出判断一个数是否能同时被3和7整除的条件语句, 并且打印对应的结果。

    例如:输入 21 打印 True, 输入 9 打印 False。
    
    num = int(input())
    print('', num % 21 == 0)
    
  2. 写出判断一个数是否能够被3或者7整除,但是不能同时被3或者7整除的条件语句, 并且打印对应的结果。

    例如:输入 14 打印 True, 输入 4 打印 False, 输入 21 打印 False。
    
    num = int(input())
    print('', num % 3 == 0 and num % 7 != 0 or (num % 3 != 0 and num % 7 == 0))
    
  3. 输入年,写代码判断输入的年是否是闰年,并且打印对应的结果 。(是闰年的条件: 能被4整除但是不能被100整除或者能够被400整除的年)

    例如:输入 2020 打印 True, 输入 2011 打印 False
    
    year = int(input())
    print('', (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0))
    
  4. 假设今天的上课时间为15678秒,编程计算今天上课时间是多少小时,多少分钟,多少秒;以‘XX时XX分XX秒’的方式表示出来。

    例如: 时间 67 秒  —> 017 秒
        
    sums = int(input())
    hours = sums // 60 // 60
    minutes = sums // 60 - hours * 60
    seconds = sums  % 60
    print(hours, '时', minutes, '分', seconds, '秒')
    
  5. 定义两个变量保存一个人的身高和体重,编程实现判断这个人的身材是否正常!

    公式: 体重(kg)/身高(m)的平方值 在18.5 ~ 24.9之间属于正常。

    例如: 输入体重: 55, 输入身高:1.55, 输出: 正常或者不正常
                
    weight = int(input())
    hight = float(input())
    value = weight / (hight ** 2)
    print('%.1f' % value)
    if 18.5 <= value <= 24.9:
        print('正常')
    else:
        print('不正常')
    

分支和循环

基础题

  1. 根据输入的成绩的范围打印及格 或者不及格

    score = int(input())
    if score >= 60:
        print("及格")
       else:
        print('不及格')
    
  2. 根据输入的年纪范围打印成年或者未成年,如果年龄不在正常范围内(0~150)打印这不是人!

    age = int(input())
    if 0 < age < 18:
        print('成年')
    elif 18 <= age < 150:
        print('未成年')
    else:
        print('这不是人!')
    
  3. 输入两个整数a和b,若a-b的结果为奇数,则输出该结果,否则输出提示信息a-b的结果不是奇数

    a = int(input())
    b = int(input())
    if (a - b) % 2 == 1:
        print(a - b)
    else:
        print('a-b的结果不是奇数')
    
  4. 使用for循环输出 0~100内所有3的倍数。

    for i in range(3, 101, 3):
        print(i)
    
  5. 使用for循环输出100~200内个位数或者十位数能被3整除的数。

    for i in range(100, 201):
        if i % 10 % 3 == 0 or i // 10 % 10 % 3 == 0:
            print(i)
    
  6. 使用for循环统计100~200中十位数是5的数的个数

    count = 0
    for i in range(100, 201):
        if i // 10 % 10 == 5:
            count += 1
    print(count)
    
  7. 使用for循环打印50~150中所有能被3整除但是不能被5整除的数

    for i in range(51, 151, 3):
        if i % 5 != 0:
            print(i)
    
  8. 使用for循环计算50~150中所有能被3整除但是不能被5整除的数的和

    sum = 0
    for i in range(51, 151, 3):
        if i % 5 != 0:
            sum += i
    print(sum)
    
  9. 统计100以内个位数是2并且能够被3整除的数的个数。

    count = 0
    for i in range(0, 101, 3):
        if i % 10 == 2:
            count += 1
    print(count)
    

进阶题

  1. 输入任意一个正整数,求他是几位数?

    注意: 这儿不能使用字符串,只能用循环

    number = int(input())
    print(len(str(number)))
    
  2. 打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是

    ⼀个⽔仙花数,因为 1³ + 5³ + 3³ 等于 153。

    for i in range(100, 1000):
        if (i // 100) ** 3 + (i // 10 % 10)  ** 3 + (i  % 10) ** 3 == i:
            print(i)
    
  3. 判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)

    num  = int(input())
    if num < 2:
        print(num, '不是素数', sep='')
    elif num == 2:
        print('2是素数')
    for j in range(2, num):
        if num % j == 0:
            print(num, '不是素数', sep='')
            break
    else:
        print(num, '是素数', sep='')
    

    附加:打印某个区间内所有素数、统计素数的个数

    num  = int(input())
     
    # 方法一
    for i in range(2, num + 1):
        j = 2
        while j < i/j:
            if (i%j == 0):
                break
            j += 1
        if j > i/j :
            print("{}是素数".format(i))
    
    # 方法二        
    for i in range(2, num + 1):
        for j in range(2, i):
            if i % j == 0:
                break
        else:
            print("{}是素数".format(i))
    
    # 方法三      
    from math import sqrt
    for i in range(2, num + 1):
        for j in range(2,int(sqrt(i))+1):
            if i%j == 0:
                break
        else:
            print("{}是素数".format(i))
    
    # 方法四        
    one = int(input("第一个数"))
    two = int(input("第二个数"))
    list = []
    for num in range(one,two+1):
        if num > 1:
            for i in range(2,num):
                if (num % i) == 0:
                    break
            else:
                list.append(num)
    print(list)
    
    
    # 方法五
    from math import sqrt
    S = []
    def getSort():
        for i in range(2):
            x = int(input('integer:\n'))
            S.append(x)
        S.sort()
        print(S)
    def isPrime():
        l = []
        for i in range(int(S[0]),int(S[1])+1):
            if i > 1:
                for j in range(2,i):
                    if i%j == 0:
                        break
                else:
                    l.append(i)
        print(l)
        print('the total is %d'%len(l))
    def main():
        getSort()
        isPrime()
    if __name__ == '__main__':
        main()
    
  4. 输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。

    for j in range(1, 10):
        print('\n')
        for i in range(1, j + 1):
            print(i, '*', j, '=', i * j, sep='', end='\t')
    
  5. 这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)

    for large in range(1, 100 // 3 + 1):
        for medium in range(1, 100 // 2 + 1):
            small = 100 - medium - large
            if large + medium + small == 100 and \
                    large * 3 + medium * 2 + small / 2 == 100:
                print('大,中,小马各', large, ',', 
                      medium, ',', small, '匹', sep='')
    

第一周作业

选择题

  1. 下列变量名中不合法的是?(C)

    A. abc

    B. Npc

    C. 1name

    D ab_cd

变量不能以数字开头
  1. 下列选项中不属于关键字的是?(B)

    A. and

    B. print

    C. True

    D. in

>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', '__peg_parser__', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
  1. 下面哪个选项对应的代码写法是正确的?(CD)

    A.

    print('Python')
      print('新手村')
    

    B.

    print('Python') print('新手村')
    

    C.

    print('Python')
    print('新手村')
    

    D.

    print('Python''新手村')
    
A项:IndentationError: unexpected indent	缩进错误:意外缩进
B项:SyntaxError: invalid syntax	语法错误:无效语法
  1. 下面选项中能打印出50的是? B

    A.

    print('100 - 50')
    

    B.

    print(100 - 50)
    
>>> print('100 - 50')
100 - 50
  1. 关于引号,下面选项中使用正确的是? D

    A.

    print('hello)
    

    B.

    print("hello')
    

    C.

    print(“hello”)
    

    D.

    print("hello")
    
A项:却一个单引号
B项:引号左双右单
C项:中文引号错误

编程题

  1. 写代码在控制台打印 good good study, day day up!

    >>> print('good good study, day day up!')
    good good study, day day up!
    
  2. 写代码在控制台打印5次 you see see, one day day!

    >>> for i in range(5):
    ...     print('you see see, one day day!')
    ...
    you see see, one day day!
    you see see, one day day!
    you see see, one day day!
    you see see, one day day!
    you see see, one day day!
    
    
  3. 写代码打印数字 11、12、13、… 21

    >>> for i in range(11, 22, 2):
    ...     print(i, end='、')
    ...
    11、13、15、17、19、21
    
  4. 写代码打印数字 11,13,15,17,…99

    >>> for i in range(11, 100, 2):
    ...     print(i, end=',')
    ...
    11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,53,55,57,59,61,63,65,67,69,71,73,75,77,79,81,83,85,87,89,91,93,95,97,99
    
  5. 写代码打印数字:10、9、8、7、6、5

    >>> for i in range(10, 4, -1):
    ...     print(i, end='、')
    ...
    10、9、8、7、6、5、
    
  6. 写代码计算:1+2+3+4+…+20 的和

    >>> sum = 0
    >>> for i in range(1, 21):
    ...     sum += i
    ...
    >>> sum
    210
    
  7. 写代码计算100以内所有偶数的和

    >>> sum = 0
    >>> for i in range(2, 101, 2):
    ...     sum += i
    ...
    >>> sum
    2550
    
  8. 写代码统计100~200中个位数是3的数的个数

    >>> count = 0
    >>> for i in range(100, 201):
    ...     if i % 10 == 3:
    ...         count += 1
    ...
    >>> count
    10
    
  9. 写代码计算2*3*4*5*...*9的结果

    >>> x = 1
    >>> for i in range(2, 10):
    ...     x *= i
    ...
    >>> x
    362880
    
  10. 输入一个数,如果输入的数是偶数就打印偶数否则打印奇数

    >>> num = int(input())
    23
    >>> if num % 2 == 0:
    ...     print('偶数')
    ... else:
    ...     print('奇数')
    ...
    奇数
    
  11. 统计1000以内能被3整除但是不能被5整除的数的个数。

    >>> count = 0
    >>> for i in range(3, 1000, 3):
    ...     if i % 5 != 0:
    ...         count += 1
    ...
    >>> count
    267
    

循环练习题

  1. 判断101-200之间有多少个素数,并输出所有素数。
count = 0
for i in range(101, 201):
    for j in range(2, i):
        if i % j == 0:
            break
    else:
        count += 1
        print("{}".format(i), end= '\t')
print('素数个数为:', count)

运行结果:
101	103	107	109	113	127	131	137	139	149	151	157	163	167	173	179	181	191	193	197	199	素数个数为: 21
  1. 求整数1~100的累加值,但要求跳过所有个位为3的数。
num = 0
for i in range(1, 101):
    if i % 10 != 3:
        num += i
print(num)

运行结果:
4570
  1. 有⼀分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的第20个分数
a = 2
b = 1
for i in range(1, 21):
    a, b = a + b, a
print(a, '/', b, sep='')

运行结果:
28657/17711
  1. 写程序计算 n 的阶乘 n! 的结果
mult = 1
n = int(input())
for i in range(1, n + 1):
    mult *= i
print(mult)
  1. 求1+2!+3!+…+20!的和
sum = 0
mult = 1
for i in range(1, 21):
    for j in (1, i):
        mult *= j
    sum += mult
    print(sum)
print('\n', sum)

运行结果:
1
3
9
33
153
873
5913
46233
409113
4037913
43954713
522956313
6749977113
93928268313
1401602636313
22324392524313
378011820620313
6780385526348313
128425485935180313
2561327494111820313

 2561327494111820313
运算结果是正确的,但是为什么
for j in range(1, j)
而不是for j i n range(1, i + 1)呢?

>>> for i in range(1, 5):
...     print(i)
...
1
2
3
4

>>> for i in range(1, 5):
...     for j in (1, i):
...         print('j的值:', j)
...     print('\r')
...
j的值: 1
j的值: 1

j的值: 1
j的值: 2

j的值: 1
j的值: 3

j的值: 1
j的值: 4

>>> for i in range(1, 5):
...     for j in (1, i + 1):
...         print('j的值:', j)
...     print('\r')
...
j的值: 1
j的值: 2

j的值: 1
j的值: 3

j的值: 1
j的值: 4

j的值: 1
j的值: 5

在这个题目中,如果我们设置:
for j in range(1, i + 1), 那么最后一个j取到的值为21。

我们发现,这样循环的j非常危险,因为j每次只能取到两个值,并没有依次递增加1,
所以这种取值方式最能运行结果,但并不建议采用。

我们继续看下面这个循环:
>>> for i in range(1, 5):
...     print(i)
...
1
2
3
4

>>> for i in range(1, 5):
...     for j in range(i + 1):
...         print('j的值:', j)
...     print('\r')
...
j的值: 0
j的值: 1

j的值: 0
j的值: 1
j的值: 2

j的值: 0
j的值: 1
j的值: 2
j的值: 3

j的值: 0
j的值: 1
j的值: 2
j的值: 3
j的值: 4

for j in range(i + 1) , 其中 i + 1 也是我们想要的循环,并且每次的结果都是依次递增加1

所以,原题的代码可以修改为:
>>> for i in range(1, 21):
...     mult = 1
...     for j in range(i + 1):
...         if j < i:
...             j += 1
...             mult *= j
...     sum += mult
...     print(sum)
...
1
3
9
33
153
873
5913
46233
409113
4037913
43954713
522956313
6749977113
93928268313
1401602636313
22324392524313
378011820620313
6780385526348313
128425485935180313
2561327494111820313
  1. 写程序求表达式 a + aa + aaa + aaaa+ … 的结果,其中a是1~9的数字,求和的项数用n来控制。(a和n可以用变量来表示)

例如:a为3, n为5的时候: 3 + 33 + 333 + 3333 + 33333

a = int(input(""))
n = int(input(""))
num = 0
sum = 0
for i in range(1, n+1):
    num = num * 10 + a
    sum += num
    print(num)
print('\n', sum)

运行结果:
>? 3
>? 5
3
33
333
3333
33333
 37035
  1. 控制台输出三角形
a.根据n的值的不同,输出相应的形状
n = 5时             n = 4
*****               ****
****                ***                  
***                 **
**                  *
*



n = int(input())
for i in range(n, 0, -1):
    print('*' * n)
    n -= 1



b.根据n的值的不同,输出相应的形状(n为奇数)
n = 5               n = 7
  *                    *
 ***                  ***
*****                *****
                    *******


n = int(input())
j = n // 2
for i in range(1, n + 1, 2):
    print(' ' * j, '*' * i)
    j -= 1
    i += 2



c. 根据n的值的不同,输出相应的形状
n = 4
   1
  121
 12321
1234321

n = 5
    1
   121
  12321
 1234321
123454321


n = int(input())
for i in range(1, n + 1):
    # 前面空格
    print(' ' * (n - i), end='')
    for j in range(1, i + 1):
        # 依次输出 1 ~ j
        print(j, end='')
    for k in range(i - 1, 0, -1):
        # 依次输出 j-1 ~ 1
        print(k, end='')
    print()
  1. 小明单位发了100元的购物卡,小明到超市买三类洗化用品,洗发水(15元),香皂(2元),牙刷(5元)。要把100元正好花掉,可有哪些购买结合?

道理同百马百货,比那个简单点

for i in range(100 // 15 + 2):
    for j in range(100 // 2 + 1):
        for k in range(100 // 5 + 1):
            if i * 15 + j * 2 + k * 5 == 100:
                print('洗发水、香皂、牙刷各买:',
                      i, ', ',  j, ',', k, '个')
  1. 一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?
count = 0
thickness = 0.08 / 1000
while True:
    if thickness < 8848.13:
        thickness *=  2
        count += 1
    else:
        break
print(count)
  1. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    num = int(input())
    num1 = 1  
    num2 = 1  
    for x in range(3, num + 1):
        num3 = num1 + num2 
        num1 = num2
        num2 = num3
        print('第{}月:'.format(x), 2 * num3)
    
  2. 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。

    思路:先写前面一部分, ‘数字 =’, 再依次从2开始找质因数(因为2是最小的质数),如果被整除,取出i,令i+1,并更新num的值进行下次循环取值,直到找不到质数为止

    num = int(input())
    s = str(num) + " = "
    i = 2
    while i <= num:
        if num % i == 0:
            s = s + str(i) + " x "
            num = num // i
        else:
            i += 1
    print(s, end="")
    print('\b\b')
    
  3. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值

    转str,方便操作。本来想法挺好的,但发现到后面就进行不下去了,不只在运算修改值的时候,还有换位的时候也特别麻烦,需要转来转去的,哎,还是学艺不精,有大神能不用列表的方式操作一下吗?

    a = input()
    c = []
    for i in range(4):
        c.append(int(a[i]))
    for j in range(4):
        c[j] = (c[j] + 5) % 10
    c[0], c[3] = c[3], c[0]
    c[1], c[2] = c[2], c[1]
    for k in range(4):
        print(c[k], end='')
    
  4. 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。

见11题

  1. 本金10000元存入银行,年利率是千分之三。每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是多少。

    num_1 = 10000
    for i in range(5):
        num_2 = num_1 * 0.003 + num_1
        num_1 = num_2
    print('%.3f'%num_1)
    
  2. 输入一个整数,计算它各位上数字的和。(注意:输入的整数可以是任意位)

    转成字符串,切开,再转int,相加

    num = int(input())
    str_num = str(num)
    sum = 0
    for j in range(len(str_num)):
        for i in str_num[j]:
            sum += int(i)
    print(sum)
    
  3. 求两个数的最大公约数和最小公倍数。(提示:公约数一定小于等于两数中的小的那个数,且能同时被两个数整除;公倍数一定大于等于两数中的大数,且是大数的倍数又能被两数中的小数整除)

    这个代码中间有点小细节就是如果print在if的外面,打印的是满足循环的最后一个值,所以我在求最大公约数时从小到大找,这样就不用加break,在最小公倍数用了break,读者可细细体会两者的区别。

    num_1 = int(input())
    num_2 = int(input())
    max, min = 0, 0
    if num_1 < num_2:
        num_1, num_2 = num_2, num_1
    for i in range(1, num_2 + 1):
        if num_1 % i == 0 and num_2 % i == 0:
            max = i
    print('最大公约数:', max)
    for j in range(1, num_1 + 1):
        if j * num_2 % num_1 == 0:
            print('最小公倍数:', j * num_2)
            break
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值