python怎么用print输出多行(python print全部输出)
python怎么输出30到60
python怎么输出30到60?在python编程的学习过程之中,将一个数字输出和打印在控制台上面可以说是所有python编程学习者的第一次编码经历,而这也是python基础知识中的一个关键点。本篇文章要来讲一下python打印1-20整数的方法,感兴趣的小伙伴一起往下看看吧。
?
这个需求涉及到打印和连续的整数两个方面,打印的话使用print()函数将它们都输出到控制台就可以了。而1-20的整数可以使用列表等序列保存起来一次性输出,也可以使用循环迭代输出,最简单的方法就是用字符串将1-20的整数包括起来然后输出。
但是这个需求其实有着一个非常简单的实现方法就是使用range()方法去生成一个自增数字的元组,然后用for循环去迭代这个元组就可以了。整个实现的代码只需要两行,代码示例如下:
for i in range(1,21):
print(i,end=',')
这里的range()函数参数定义需要设置为1和21,它们分别表示从数字1开始一直自增生成整数直到21。但是并不会取到21,所以要得到结尾的20就要将临界值设为21。而print()函数之中的i就是for循环每次迭代按照索引顺序从数字元组中取出来的值,而end的意思则表示在每一次print()输出完成之后不是换行而是把结尾字符变成空格,这样就可以把1-20的整数显示在一行中了。30-60也是用同样的方法
python怎么出123行
同时开启三个线程,分别只能输出1,2,3,并让三个线程按顺序输出打印123123123…
这道问题简单来说就是一种红绿灯,我们先让红灯亮,过一段时间后黄灯亮,再过一段时间后绿灯量,以此类推。一般对于多线程而言,可以很容易的实现这三种颜色的切换,但是再不对其进行控制的话,他的执行顺序将会是乱的,其可能在红灯之后还是红灯,绿灯之后还是绿灯(这要是在现实中将会引发巨大的灾难),因此要实现多线程之间的顺序执行,我们就需要使用到锁的概念,也就是Python中的GIL、同步锁(互斥锁)、递归锁(用来解决死锁,当有多个互斥锁存在的时候,可能会导致死锁),对于Python中锁的概念不进行阐述,我们在这里直接使用Threading.Lock来解决上述问题。
实现多线程的顺序执行,关键在于如何控制上锁lock.acquire()与锁的释放lock.release()。在这里我们可以将红绿灯的各种颜色的切换看作是上锁与释放锁。一开始是红灯亮,因此,在初始时刻对于红黄绿的三种锁中,只有红灯的锁是释放的,而黄灯和绿灯的锁是被锁着的,这样一来只有红灯的线程可以进入得到资源,从而显示为红灯,这里需要注意的是红灯的线程进入后,应将其锁给锁住,而不让其他线程进入(红灯亮着的时候,三个锁都是锁住的);当红灯显示时间结束后,下一个为黄灯,因此需要将黄灯的锁给释放掉,从而让黄灯的线程进入,进入后再将锁锁住;当黄灯显示完毕后,将绿灯的锁给打开,从而让绿灯显示,以此类推。
完整代码如下:
import threading
import time
red_lock = threading.Lock() # 红灯锁
yellow_lock = threading.Lock() # 黄灯锁
green_lock = threading.Lock() # 绿灯锁
count = 18 # 为避免一直循环,我们在这里假设每个数字输出6次,3×6=18
def red():
"""红灯显示函数"""
global count
while count = 0:
red_lock.acquire() # 将红灯的锁给锁住
print(1, end = '-') # 将红灯表示为1
# print('id:', threading.get_ident()) # 查看线程id
yellow_lock.release() # 下一个为黄灯亮,将黄灯的锁给释放
count -= 1
def yellow():
"""黄灯显示函数"""
global count
while count = 0:
yellow_lock.acquire() # 将黄灯的锁给锁住
print(2, end = '-') # 将黄灯表示为2
# print('id:', threading.get_ident())
green_lock.release() # 下一个为绿灯亮,将绿灯的锁给释放
count -= 1
def green():
"""绿灯显示函数"""
global count
while count = 0:
green_lock.acquire() # 将绿灯的锁给锁住
print(3, end = '-') # 将绿灯表示为2
# print('id:', threading.get_ident())
red_lock.release() # 下一个为红灯亮,将红灯的锁给释放
count -= 1
if __name__ == '__main__':
thread_list = []
func_list = [red, yellow, green]
for func in func_list: # 创建三个线程
th = threading.Thread(target = func)
thread_list.append(th)
# 红灯先亮,因此将黄灯和绿灯的锁给锁住,以阻塞线程2和3的执行
yellow_lock.acquire() # 2上锁
green_lock.acquire() # 3上锁
for th in thread_list:
# print(time.time()) # 用于判断启动时间
th.start()
for th in thread_list:
th.join()
登录后复制
?
执行结果为:
1-2-3-1-2-3-1-2-3-1-2-3-1-2-3-1-2-3-1-2-3-
登录后复制
上面的判断启动时间的是用来看是否是同时启动的,由于for循环是有顺序的,因此三个线程的启动并不是同时的,虽然有些时候输出的时间会相同,但其实是不同的。
python的print命令
print命令用来输出指定对象的内容,语法为:
print(对象1[,对象2,…...sep=分隔符,end=终止符])
1.对象1,对象2,......:print命令可以一次打印多个对象数据,对象之间以逗号“,”分开。
2.sep:分隔符号,如果要输入的多个对象间需要用指定的符号进行分隔,则可通过此参数进行设置,默认值为一个空格符(“ ”)。
3.end:终止符,输入完毕后自动添加的字符,默认值为换行符(“ ”),所以下一次执行print命令会输出在下一行。
print命令支持参数格式化功能,即使用"%s"代表字符串,"%d"代表整数,"%f"代表浮点数,其语法格式为:
print(对象 %(参数行))
例如:
参数格式化可以精确控制输出位置,让输出的数据整齐排列,例如:
1.%5d:固定输出为5个数字的宽度,若输出少于5位,则会在数字的左边输入空格符(若数值大于5位,则会全部输出)
2.%5s:固定输出为5个字符的宽度,若输出少于5位,则会在字符串的左边输入空格符(若数值大于5位,则会全部输出)
3.%8 .2f :固定输出8 个字符宽度(含小数点),其中小数点输出为2 位。若整数部分少于5 位( 8 - 3=5 ),会在左边填入空格符;若小数少于2 位,会在右方填入“ 0"
例如:用格式化输出的方法输出23.8:
也可使用字符串的format 方法来做格式化,用一对大括号“{}”表示参数位置,语法为:
print (字符串.format (参数行))
例如,用字符串的format 方法输出下列字符串及整数:
文章结尾附上Python3.9.7文档中print命令的内容
print(*objects, sep=' ', end=' ', file=sys.stdout, flush=False)
将 objects 打印到 file 指定的文本流,以sep 分隔并在末尾加上 end。 sep, end, file 和 flush 如果存在,它们必须以关键字参数的形式给出。
所有非关键字参数都会被转换为字符串,就像是执行了 str() 一样,并会被写入到信息流,以 sep 且在末尾加上 end。 sep 和 end 都必须为字符串;它们也可以为 None,这意味着使用默认值。 如果没有给出 objects,则print() 将只写入 end。
file 参数必须是一个具有 write(string) 方法的对象;如果参数不存在或为 None,则将使用 sys.stdout。 由于要打印的参数会被转换为文本字符串,因此 print() 不能用于二进制模式的文件对象。 对于这些对象,应该改用 file.write(...)。
输出是否被缓存通常决定于 file,但如果 flush 关键字参数为真值,信息流会被强制刷新。
在 3.3 版更改: 增加了 flush 关键字参数。