Python程序控制

141 阅读11分钟

1.用id函数和type函数输出变量的地址和变量的数据类型,理解Python中各类变量的定义和赋值过程。

image.png

  1. 在第一个语句中,变量 x 被赋值为整数 5,其内存地址和数据类型分别为 id(x)type(x)。输出结果显示 5 的内存地址和数据类型为整数 (int)。
  2. 在第二个语句中,变量 x 的值被增加了 1,此时 x 的值变为 6,但是它的内存地址和数据类型发生了改变,因为整数是不可变对象,Python 在内部创建了一个新的整数对象来存储新的值。
  3. 在第三个语句中,变量 x 被赋值为浮点数 0.5,其内存地址和数据类型分别为 id(x)type(x)。输出结果显示 0.5 的内存地址和数据类型为浮点数 (float)。
  4. 在第四个语句中,变量 s 被赋值为字符串 "china",其内存地址和数据类型分别为 id(s)。输出结果显示字符串 "china" 的内存地址和数据类型为字符串 (str)。
  5. 在第五个语句中,使用字符串的 replace 方法将字符 'a' 替换为 'A',此时字符串的值变为 "chinA",但是内存地址发生了变化。这是因为字符串是不可变对象,Python 在内部创建了一个新的字符串对象来存储替换后的值。

可见,Python中的变量赋值和数据类型是动态的,根据赋值的内容来自动确定变量的数据类型,而不需要显式声明数据类型。对于不可变对象(如整数、浮点数和字符串),在重新赋值时通常会创建新的对象,而可变对象(如列表和字典)可以在不改变内存地址的情况下修改其内容。

2.编写程序,输入两个整数(两个整数分别输入,每个占一行),输出它们的和。

image.png

  1. map() 会根据提供的函数对指定序列做映射。语法为: map(function, iterable, ...)
  2. function表示对迭代对象iterable进行处理的函数
  3. iterable -- 一个或多个序列,表示处理的迭代对象

3.编写程序,输入任意个数(注意可以是int,也可以是float,两个数据用逗号分隔),按照从小到大的顺序输出。

image.png

这个程序首先使用input()函数获取用户输入的一组数据,然后使用eval()函数将输入的字符串转换为元组。接下来使用sorted()函数对元组进行排序,并将排序后的结果打印出来。

4.输入两个整数表示的数据范围m和n,两个数据甩空格分割,然后输出该范围内所有的素数,输出结果中两个数据之间用一个空格分割。

提示:

  1. 用空格分割的两个数据必须对字符串进行分割后再类型转换。 m,n = map(int,input().split())
  2. m和n要确保m是小数,n是大数 if m>n : m,n=n,m
  3. 判断素数可以使用循环语句的else来优化代码 for i in range(m,n+1): for j in range(2,m): if i%j==0: break else: print(i,end=" ")

image.png

这段代码是一个求素数的程序,它要求用户输入两个整数m和n,然后输出在这个范围内的所有素数。代码中使用了两个for循环,第一个循环遍历m到n之间的所有整数,第二个循环遍历2到i-1之间的所有整数,判断i是否为素数。如果i是素数,则输出i。

  1. m,n = map(int,input().split())GitHub Copilot: 这行代码将用户输入的两个整数以空格为分隔符进行分割,并将其转换为整数类型,分别赋值给变量m和n。

  2. map() 是 Python 内置的一个高阶函数,它的作用是将一个函数映射到一个可迭代对象的所有元素上,返回一个新的可迭代对象。map() 的第一个参数是一个函数,第二个参数是一个可迭代对象,它将第一个参数函数作用于第二个参数可迭代对象的每个元素上,并返回一个新的可迭代对象。在这个代码中,map() 函数将 int() 函数作用于 input().split() 返回的可迭代对象的每个元素上,将其转换为整数类型,并将转换后的结果以元组的形式返回,然后使用解包的方式将这两个整数分别赋值给变量 mn

  3. for i in range(m,n+1):GitHub Copilot: 这行代码是一个 for 循环语句,它的作用是遍历从 mn 之间的所有整数。range() 函数用于生成一个整数序列,它的第一个参数是起始值,第二个参数是终止值(不包括),第三个参数是步长(默认为1)。在这个代码中,range(m, n+1) 生成了一个从 mn 之间的整数序列,包括 mnfor 循环语句遍历这个序列中的每个元素,将其依次赋值给变量 i,然后执行循环体中的代码。

  4. print(i,end=" ")GitHub Copilot: 这行代码的作用是输出变量 i 的值,并在输出后加上一个空格。在这个代码中,i 是一个素数,它会被输出到控制台上。end=" " 参数指定了输出的结尾字符,这里是一个空格。这样可以让输出的素数之间用一个空格分隔开来。

这个代码的缩进不能是:

m,n = map(int,input().split())
if m>n:
    m,n = n,m
for i in range (m,n+1):
    for j in range (2,m):
        if i%j == 0: break
        else: 
            print(i,end=" ")

而应该是:

m, n = map(int, input().split())
if m > n:
    m, n = n, m
for i in range(m, n+1):
    for j in range(2, m):
        if i % j == 0:
            break
    else:
        print(i, end=" ")

在 Python 中,缩进是非常重要的,它决定了代码块的开始和结束。在这个代码中,第一个 else 语句应该与第二个 for 循环语句对齐,而不是与第二个 if 语句对齐。如果将 else 语句与 if 语句对齐,那么它就成为了第二个 for 循环语句的一部分,而不是第一个 for 循环语句的一部分。这将导致代码的逻辑错误,因为第一个 for 循环语句将不会执行 else 语句中的代码。

在这个代码中,第一个 else 语句与第一个 for 循环语句对齐,第二个 if 语句与第二个 for 循环语句对齐,代码的逻辑是正确的。

5.根据父母的身高预测孩子的身高,男孩、女孩的身高通常有以下规律:

男性身高=(父亲身高+母亲身高)×1.08÷2(厘米)

女性身高=(父亲身高×0.923+母亲身高)÷2(厘米)

image.png

  1. 这段代码首先使用 input() 函数获取用户输入的父亲身高和母亲身高,然后根据男孩和女孩的身高计算公式分别计算出预测的男孩身高和女孩身高,并使用 print() 函数输出结果。其中,{:.2f} 是一个格式化字符串,用于将浮点数格式化为保留两位小数的字符串。
  2. input() 函数返回的是一个字符串类型的值,因此 mother_hightfather_hight 变量的类型也是字符串类型。在这个代码中,mother_hightfather_hight 变量分别用于存储输入的母亲身高和父亲身高,但是这两个变量的类型是字符串类型,不能直接进行数值计算。因此,在计算男孩身高时,需要将 father_hight 转换为整数类型,而在计算女孩身高时,需要将 mother_hightfather_hight 都转换为浮点数类型。

6.输入一个学生的成绩,如果是90分以上,打印出“优秀”的评语,如果是80-90之间,打印“良好”的评语;70-80之间打印“中等”的评语,如果是60-70之间,打印“及格”,0-60打印“不及格”,其他打印“数据输入有误!”。

image.png

这段代码的作用是根据学生的成绩打印出相应的评语。代码中使用了 input() 函数获取用户输入的学生成绩,并将其转换为浮点数类型,然后使用 if-elif-else 语句判断学生的成绩属于哪个区间,并打印出相应的评语。如果学生的成绩小于0或大于100,则打印出“数据输入有误!”的评语。

7.编写猜数字的游戏。系统随机生成一个0到100的数,玩家猜测这个数是什么,两数相等则输出“成功!”。如果玩家输入的数字小于系统生成的数字,则提醒猜小了,如果大了,则提醒猜大了。如果猜测7次仍然没有成功,则玩家失败,输入“失败”。

提示:生成随机数要使用扩展模块random中的randint函数。

image.png

  1. for i in range(7): for 循环进行7次迭代。在每次迭代中,变量 i 的值会依次从0到6,可以在循环体中使用 i 变量进行相应的操作。例如,可以使用 print(i) 语句输出变量 i 的值。

  2. import random 是 Python 中导入 random 模块的语句。random 模块提供了生成随机数的函数,包括 random()randint(a, b)uniform(a, b) 等。使用 import 语句导入模块后,就可以使用模块中的函数和变量了。例如,可以使用 random.randint(0, 10) 函数生成一个0到10之间的随机整数。

8.用户从键盘输入一行字符,编写一个程序,统计并输出其中英文字符、数字、空格和其他字符的个数。

image.png

  1. 在这个代码中,使用 input() 函数获取用户输入的字符串,并将其赋值给变量 string。然后,初始化四个计数器变量 letter_countdigit_countspace_countother_count,分别用于统计英文字符、数字、空格和其他字符的个数。接着,使用 for 循环遍历字符串中的每个字符,使用 isalpha()isdigit()isspace() 方法判断字符的类型,并将计数器变量相应地加1。最后,使用 print() 函数输出统计结果。
  2. if char.isalpha():这行代码的作用是判断字符 char 是否为英文字母。isalpha() 方法是 Python 字符串对象的一个方法,用于判断字符串中的所有字符是否都是字母。如果 char 是英文字母,则返回 True,否则返回 False。在这个代码中,如果字符 char 是英文字母,则将计数器变量 letter_count 加1。

9.模拟一个抽奖游戏,比如准备的奖品有car 1辆,bike 10辆,notebook100本,再来一瓶1000个,当用户输入y表示进行抽奖时,系统随机生成一个0到1111的随机数,查找对应的奖品后输出。

提示:多个相同对象可以使用*表示重复。

image.png

示例:

import random

st = []
st.append("car")
st.extend(['bike'] * 10)
st.extend(['notebook'] * 100)
st.extend(['onemoreagain'] * 1000)

x = input()
if x == "y" or x == 'Y':
    m = random.randint(0, len(st))
    #print(m)
    print('恭喜!获得了%s' % st[m])
  1. 这段代码实现了一个抽奖游戏。代码中首先定义了一个空列表 st,然后使用 append()extend() 方法向列表中添加了所有的奖品,包括1辆车、10辆自行车、100本笔记本电脑和1000个瓶子。接着,使用 input() 函数等待用户输入,如果用户输入了“y”或“Y”,则使用 random.randint(0, len(st)) 函数生成一个0到列表长度之间的随机整数,并将其赋值给变量 m。然后,根据随机数 m 在奖品列表 st 中查找对应的奖品,并输出中奖结果。
  2. prizes = ['car']+['bike'] * 10+['notebook'] * 100+['再来一瓶'] * 1000这行代码定义了一个奖品列表 prizes,其中包含了所有的奖品,包括1辆车、10辆自行车、100本笔记本电脑和1000个瓶子。然后使用 + 运算符将这些列表连接起来,得到一个包含所有奖品的列表 prizes。具体来说,代码中使用了以下语法:
  • ['car']:表示包含一个元素 'car' 的列表。
  • ['bike'] * 10:表示包含10个元素 'bike' 的列表。
  • ['notebook'] * 100:表示包含100个元素 'notebook' 的列表。
  • ['再来一瓶'] * 1000:表示包含1000个元素 '再来一瓶' 的列表。